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.

[参考译文] MSP432-RTOS:MSP432P401 I2C 主控制器在 SDA/SCL 上出现常见峰值后挂起

Guru**** 2531310 points
Other Parts Discussed in Thread: PCF8575

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1068516/msp432-rtos-msp432p401-i2c-master-hangs-after-common-spikes-on-sda-scl

部件号:MSP432-RTOS
“线程:PCF8575”中讨论的其它部件

大家好!

我在 POSIX/ TI-RTOS (SL SDK 3_30)中使用 I2C (100/400 KHz),与一些 I2C IO 扩展器 PCF8575无问题地通话。

驱动程序的用法类似于 I2 master 的 SDK 示例(非阻塞,无超时)。

 由逻辑分析器中的外部辐射干扰引起的(重现性),我同时看到了大约60ns 的峰值设置 SCL=SDA=0。

在此事件发生后,I2C 传输立即停止,我认为 MSP432驱动程序在未定义状态下挂起。

我尝试用陶瓷盖过滤尖峰信号,但这确实防止了问题的发生。

因此,我需要找到一个解决方法,以便在发生这些峰值事件后再次运行 I2C。

对此有一些想法:

如果 SW 无法检测到这种不规则状态,我是否有时间(通过 close()和 open()再次)重新启动 I2C 以中止这种状态?

-我不使用超时。超时是否会使驱动程序脱离这些状态?

任何想法都很受欢迎!

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

    你好,DJ

    您设置了什么故障时间? 是否保留默认值?

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

    是的,我最近看了一下,我使用了默认设置。

    当峰值大于50ns (我测量的是60ns ++)时,这种情况似乎很好。

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

    超时功能仅用于时钟长时间处于低位时。 我认为你们应该弄清楚故障来自何处,拉电或一些从属设备,我认为添加一个电容器会对信号线或电源线有帮助。

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

    你好,加里!

     通过一些 HW 补充,将故障最小化无疑是最好的选择。 我将在这里进行更多调查。

    但我想问自己,如果 有办法的话,通过一些软件变通办法来重新启动挂起的 USCI_B I2C?

    剩余的 MCU 仍 在工作。

    问: 是否有人建议重新初始化 I2C,重新启动运行时以使 USCI_B 再次进入工作状态?

    实际上,只有重置才有用...

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

    问题实际上是如何通过软件检测到这种问题引起的 I2C 挂起。 如果在某些挂起的情况下 SCL 可能轮询为低,则可以启用 SCL 低超时功能。 您也可以启用监视犬来监视此事件。