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.

[参考译文] RTOS/CC3200MOD:I2C 时钟干扰

Guru**** 2411440 points
Other Parts Discussed in Thread: ADS1015, OPT3001, HDC1080, CC3200

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/603942/rtos-cc3200mod-i2c-clock-glitch

器件型号:CC3200MOD
主题中讨论的其他器件:ADS1015OPT3001HDC1080CC3200

工具/软件:TI-RTOS

您好!

我正在使用 PIN_02和 PIN_05作为 I2C 线路来开发定制 PCB。  在每秒轮询一次的10到20分钟后、我在 SCL 线路上看到干扰(见下文)。

在软件中,我卡在 I2CTransact(...):

while ((map_I2CMasterIntStatusEx (I2C_base、false)
&(I2C_INT_MASTER | I2C_MRI_CLKTOUT))= 0){
} 

从设备上有三个芯片(HDC1080、OPT3001和 ADS1015)、上拉电阻值为2.7k 欧姆(使用以下资源计算得出: http://www.ti.com/lit/an/slva689/slva689.pdf)

下面是我尝试过的:

  • 10k 欧姆的较大上拉电阻值  
  • 添加 PinModeSet (PIN_01、PIN_MODE_0);到 PinMuxConfig (processors.wiki.ti.com/.../CC32xx_Summary_of_Known_Issues)
  • 使用 TI-RTOS 和非 RTOS 环境
  • 各种电源  
  • 100kHz 和400kHz 时钟速度
  • 在 SCL 线路上生成脉冲、以便在每次传输前解除从器件冻结
  • 清除所有中断  

我已经浏览过论坛以寻找另一个解决方案、但到目前为止、我刚刚遇到了一些未回答的问题。  我还没有从 TI 找到任何内容、说明芯片本身存在问题、因此我不确定解决方案是什么。  如果有任何帮助,将不胜感激。

谢谢、


Kyle

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

    我认为您出现问题的原因是您的 I2C 从设备将 SCL 保持在低电平、并导致卡在 I2CTransact()中。 if 中间件库在任何情况下都不是如此具有项目符号。 此外、该库不使用中断、因此浪费了 CPU 周期。

    您应该在此 I2C 代码中添加一些超时、并且仅在冻结时生成 SCL 脉冲。 本例中的错误代码为 I2C_MASTER_ERR_ARB_Lost。

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

    在我看来、它确实恢复了。  不过、我将尝试添加脉冲、以确保正确。

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

    好的、请告诉我。

    我们不使用_if 中间件库、因为我们发现实际应用中的中间件库不可靠。

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

    在 I2C 事务中提供超时功能正常、但时钟被锁定的频率有点小问题。  现在这可能还可以、但似乎不是我想要向客户销售的解决方案。 此外、即使重新配置 pinmux 并完全重新启动电路板、我的某些电路板也从未恢复。 您过去是否遇到过类似的问题?  我仍然怀疑这个问题的根源是我的电源管理 IC 触发的、因为我无法使用台式机电源重复这个问题。  

    感谢您的帮助 这确实有帮助。

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

    根据我使用的经验恢复机制、这是可靠的。 在我的应用中、我使用中断驱动的 I2C 通信、但在这种情况下、这并不重要。 主要是当我停止通过调试器执行代码时、我会看到这个问题(下文中对原因进行了说明)。 我的恢复机制(如果 I2C 外设出现通信问题/超时):
    -将 SCL 处的 punumx 设置为 GPIO 和输出
    -在 SCL 上生成一些脉冲(直接设置高电平和低电平、在这种情况下不使用上拉电阻器来驱动高电平状态)
    -将 punmux 设置回 I2C SCL
    -重新初始化 I2C 外设

    CC3200 I2C 外设的问题是它非常智能。 当总线状态(SDA、SCL)发生变化时、是总线读取的物理状态;当总线电平错误时、返回错误代码 I2C_MASTER_ERR_ARB_Lost。 这种行为的原因是 I2C 芯片内部存在一些"过渡状态"。 当不接收所有时钟脉冲等时、I2C 芯片内部逻辑可能会"卡死"在不良状态

    潜在问题的几个原因:
    - I2C 芯片的电源问题(在您的案例中是合理的)
    - I2C 上拉电阻不够强(请尝试使用至少3K3上拉电阻)
    -由于长电缆而导致的 IC 总线高电容(根据图像、它不是根据您的情况而定)

    1月