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.

[参考译文] MSPM0G3507:确认清除 I2C 总线的方法

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1588669/mspm0g3507-confirmation-on-method-to-clear-i2c-bus

器件型号: MSPM0G3507

您好:

我有几个关于使用 MSPM0 作为控制器来清除 I2C 总线的快速问题。  

问: 有哪些内置方法可用于清除 I2C 总线? 在 SDA 保持低电平时是否有发送 9 个时钟脉冲的命令、或者是否采用建议的方式通过 SW 复位清除 I2C 总线? (如果 SCL 保持低电平,我知道需要复位。)

问:  在目标器件挂起的情况下、控制器 I2C 外设软件复位是否可以解决该问题、或者目标器件上是否需要硬件复位? 需要使用上一个问题中的 9 时钟脉冲复位方法的原因是为了处理目标端的问题。

我阅读了 TRM 的 I2C 第 24 章、只能找到有关软件复位 I2C 外设或执行硬件复位的内容。 因此、这些似乎是唯一的方法、但我非常希望得到确认和/或见解。  

 

谢谢!

Michael

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

    Q1:据我所知、没有办法要求 I2C 单元(或 DriverLib)执行“9 时钟技巧“。 也不能通过 I2C 单元直接操作 SCL 引脚。 您必须将 SCL 的 IOMUX 切换到 PF = 1 (GPIO) 并使用 GPIO 寄存器翻转引脚。

    问题 2:如果是目标端挂起总线、重置控制器端 I2C 单元不会(通常情况下)清除它。 如果 9 个时钟的技巧没有清除条件、您需要重置目标器件。

    在大多数情况下、确定哪一方实际上造成了故障并不容易。 只重置两侧可能最高效:(a) 尝试 9 个时钟的技巧;如果不起作用 (b) 重置目标器件和控制器 I2C 单元。