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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1523795/mspm0g3507-i2c-bus-busy

器件型号:MSPM0G3507

工具/软件:

大家好、我当前正在使用 MSPM0 G3507。i2c 驱动程序指示 i2c 总线繁忙、但寄存器窗口显示它处于空闲状态。 此外、SDA 和 SCL 线路的物理状态也是空闲状态。 但是、当我们释放运行时、API 调用会继续返回 BUSY 状态。 i2c 波特率为400kbs、并使用自动发送启动和停止的控制器传递函数。 在映像 i2cBusy 中、GPIO 切换应该是为了等待数据完全传输、但情况失败。 如果 i2c 是否为总线、则使用 MSR 寄存器中的 BUSY 位。 下面附加了代码 snipet。 在 while (DL_I2C_getControllerStatus (I2C0_INST)和)之前引入10us 的小延迟
DL_I2C_CONTROLLER_STATUS_BUSY_BUS)可解决该问题。 但需要了解为什么会发生这种情况。

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

    您好、

    总线忙指 I2C 总线忙、该位根据启动和停止条件发生变化、如果在 I2C 总线中检测到启动条件、则将设置该位 从图中可以看出、检查 I2C 状态时、发生了 I2C 启动。

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

    我还观察到、从开始事务到总线变得繁忙之间存在可测量的延迟。 最后、我等待一个 DONE 事件(RIS:RXDONE/TXDONE)、并在下一个事务之前检查 MSR:IDLE。

    [编辑:如果出现 NACK、RXDONE/RXDONE 似乎不会发生、因此我还会检查 MSR:ERR。]