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.

[参考译文] TM4C1294NCPDT:TM4C1294NPDT:I2C 主从机遇到 SDA 拉低异常、未来无法正常使用

Guru**** 2608495 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1425553/tm4c1294ncpdt-tm4c1294npdt-i2c-master-slave-machine-experiences-sda-pull-low-abnormality-and-cannot-be-used-normally-in-the-future

器件型号:TM4C1294NCPDT

工具与软件:

背景:
在当前项目中、我使用了 I2C 模块、同时使用了 I2C 主机和 I2C 从机。
2.项目中使用了两个 I2C 模块(均具有主/从功能)
3.为了方便测试,两个 I2C 模块对接,一个作为主模块,另一个作为从模块进行测试
4.正常通信没有问题、持续降低 CLK 或 SDA 也没有问题。


例外:
1.人为制造异常,不断接触 SDA,并尝试约10-30次,很可能 I2C 从机设置为异常,SDA 此时保持低电平。 从器件的 MCS 状态通常为0x60
电流处理:

    1.查看数据表、说您想发送停止条件

    2.尝试发送 STOP、多次尝试均未能解决该异常
    3.关闭从器件 AF GPIO 映射(电平变为高电平),尝试发送停止,然后打开和关闭从器件 AF GPIO 映射。 多次传输后、可以联系它并恢复正常


2.人为制造异常,不断接触 SCK 与 GND ,尝试约20-50,可能会导致 I2C 从机或主机进入异常,
  a)从器件的从器件 MCS 状态为0x60 (SDA 目前保持低电平)。 按照上述步骤处理异常、但无法消除该异常。 只有重新启动 MCU 才能消除该问题
  b)主监控器 MCS 状态为0x60/0x70 (SDA 目前保持低电平)、按照上述异常处理可以消除异常并恢复正常运行
  c) 主器件 MCS  状态为0x41 (此时 SDA SCK 电平为高电平)、无法再次发送数据。 根据上述处理、无法消除异常、只有重新启动 MCU 才能消除异常

关于 a)&b)问题、根据数据表中的说明、它指出可以复位 I2C 模块。 但是、如果我只是简单地关闭然后打开  I2C 外设、则不起作用。 Re 初始化也无效。
请帮助您识别和处理问题以及如何正确复位单个 I2C 外设

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

    您好!

     我认为问题是、主器件和从器件彼此失去同步。  当你人为地在总线上产生噪声时、它可能已经为从器件产生了额外的时钟边沿。 在这种情况下、从器件认为它已接收 N+1个时钟、而主器件仅发送了 N 个时钟。 这种同步丢失通常不能通过在主器件侧发出复位来进行恢复、因为主器件不知道从器件错误地接收了比发送更多的时钟。 您可以重置主器件和从器件、而不仅仅是其中一个器件。 另一种 解决方案是使用 SCL 作为数字 I/O、然后在从器件释放 SDA 之前将它设置为低电平/高电平位。 下面是一些可能对您有所帮助的 I2C 信息。 此外、 检查 SCL 和 SDA 线路。 如果从器件将 SDA 保持在低电平、使从器件脱离此状态的唯一方法是通过 SCL 上的边沿。 由于 I2C 模块将其视为掌管总线的不同主器件、因此它不会尝试驱动 SCL。 位拆裂是我唯一知道的解决方案。 复位此模块或主器件超时不会改变从器件的状态。  

    https://www.ti.com/lit/an/slva704/slva704.pdf

    https://www.ti.com/lit/an/slyt770/slyt770.pdf