This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] LAUNCHXL-CC1352P:CC1352P1:OpenThread temp_sensor 示例:使用 I2C 添加外部传感器

Guru**** 2457760 points
Other Parts Discussed in Thread: SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/zigbee-thread-group/zigbee-and-thread/f/zigbee-thread-forum/1321832/launchxl-cc1352p-cc1352p1-openthread-temp_sensor-example-adding-external-sensor-using-i2c

器件型号:LAUNCHXL-CC1352P
主题中讨论的其他器件:SysConfig

您好!

我正在研究 OpenThread 网络的使用。 我以 CC1352P-2 LaunchPad 的 Resource Explorer 中提供的 temp_sensor 示例为例、但当我使用 LP CC1352P1时、我要将天线输出功率更改为5dBm。 temp_sensor 应用程序连接到另一个运行 CLI_FTD 示例的 LP。 当我运行示例时、我可以将它们连接在一起、一切都按预期运行。

然后、我尝试使用 I2C 接口读取外部传感器。 下图显示了我在 temp_sensor 代码中所做的更改:

  • 添加 I2C_INIT () 在 main.c 中:

  • 更改了 tempsensor.c 文件以读取 I2C 温度值:

  • 这是 read_ens210_temp ()函数:

出于某种原因、当 temp_sensor 应用程序运行并加入 CLI_FTD 应用程序提供的网络时、似乎在 I2C 读取后崩溃:

我可以看到温度值发生变化、然后停止响应、我无法从 LP 获取 CoAP 响应、也不会做出任何响应。

对于可能出现错误或我可以查找原因的方面、您有什么建议吗?

谢谢你。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eduardo:

    请检查所有 I2C API 的状态吗? 它们的返回值是多少?

    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sid:

    通过检查 I2C API 的状态、您意味着检查 I2C_TRANSMIT () 限制?

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    是、I2C_TRANSMIT 的返回值

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    I2C 事务中的状态字段也更有意义。

    它具有更详细的状态。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    这给我带来了另一个问题:如何打印这些值以便检查它们是否正确? 我的意思是、我已经在这个和其他简单工程上尝试使用标准的"printf"、而当我访问终端时、它不会打印任何内容。

    如何在屏幕上打印这些值?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eduardo:

    则可以在调试模式下运行它。

    您还可以使用 UART2_WRITE API 来显示终端上的数据。 请检查 SDK 中的 UART 示例的用法。  

    dev.ti.com/.../node

    UART 驱动程序文档:  

    https://dev.ti.com/tirex/content/simplelink_cc13xx_cc26xx_sdk_7_10_02_23/docs/drivers/doxygen/html/_u_a_r_t2_8h.html

    此致、
    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sid:

    感谢大家的参与。

    我现在正在监视所有 I2C 事务之后的状态字段:

    所有事务中的所有状态值都是0 (成功状态):

    你还有其他建议吗?

    此致、

    爱德华多。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eduardo:

    似乎 I2C 传输并没有真正崩溃。 如果应用程序中有多个线程、请尝试使 I2C 线程的优先级最低?

    以便器件还执行其他线程
    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sid:

    查看 SysConfig 文件、似乎 I2C 驱动程序的优先级已最低:

    此致、

    爱德华多。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eduardo:

    在你的 main()中,我假设你使用 pthread_create 创建线程,你在其中分配应用程序级别线程优先级。  

    请检查调用读取传感器值的函数的线程的优先级。

    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sid:

    TempSensor_taskCreate ()是在 main 中创建的唯一线程:

    在 tempsensor.c 文件中:

    你所引用的这个线程优先级是 priParam.sched_priority?

    感谢您的耐心!

    此致、

    爱德华多。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Eduardo:  

    是的、这是我提到的优先级。  

    但我从一位同事那里得到了一些我错过的见解,问题可能是您不能在读取传感器线程 I2C_Close ()中关闭 i2c 外设。 请在 I2C_TRANSMIT 之后调用 I2C_CLOSE。

    此致、

    SID

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Sid:

    这绝对是问题所在。 在添加 I2C_CLOSE()后,它停止崩溃。 所以每次我要使用 I2C 时、我都需要将它打开然后进行壁橱处理? 它也适用于其他外设吗?

    此致、

    爱德华