工具/软件:
您好:
我使用的是 TMS320F28386D(下文称为“DSP")“)、该器件在共享总线上配置为 I2C 从器件。 连接管理器 (CM) 通过 I2C (CM-I2C) 接收命令、而 C28x 内核在运行逆变器 (PWM) 的控制环路。
问题:
当逆变器运行时、会将噪声引入环境中。 该噪声有时会耦合到 I2C 总线上。 虽然噪声水平不是很高、但如果噪声尖峰与时钟 (SCL) 的上升沿相一致、则可能会产生错误的时钟边沿。 这些错误边沿有时会被识别为错误数据包、我的软件会检测这些数据包并向主器件报告、从而继续正常运行。
但是、有时 CM 中的 I2C 外设会卡住、从而将 SDA 线路保持为低电平。 发生这种情况时、如果不复位 DSP、系统就无法恢复。
我的问题:
如何在不复位器件的情况下从该卡滞状态恢复 I2C 外设?
我尝试过的方法:
-
在 SCL 上发送 9 个时钟脉冲(这是释放从器件卡滞的标准)不会恢复总线。
-
使用调试器 (XDS110 和 CCS)、我切换了 I2C 外设中的“Master Enabled“和“Slave Enabled“位、但这并未释放这些行。
-
将引脚 104 和 105 的 GPIO 多路复用器配置更改为其默认功能后、会释放 SDA 线路、但将它们切换回 I2C-CM 会再次使 SDA 保持低电平、从而确认外设是问题的根源。
-
在 I2C 外设上启用主模式并将抗干扰滤波器设置为 8 个时钟似乎可以防止我当前测试中出现问题、但我担心、如果最终产品中环境变得更大、这并不是一种稳健的解决方案。
启用主模式后、我可以监控 SDA/SCL 的繁忙位或状态、并实施看门狗作为权变措施、但不知道如何在应该的看门狗触发时复位外设。
附件是一条逻辑分析仪布线:
-
蓝色矩形突出显示了带有干扰的放大区域。
-
顶部迹线是数字采集、底部是模拟采集。
-
在干扰发生后、SDA 保持在低电平。 多个后续时钟边沿不会导致 CM(从器件)释放 SDA 线。

提前感谢
如果您需要更多信息或测量值、请告诉我。
此致
Agustin J. Gomez
