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.

[参考译文] TMS320F28022:I2C 是否需要在每次传输后复位模块?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/586470/tms320f28022-i2c-is-it-necessary-to-reset-the-module-after-every-transfer

器件型号:TMS320F28022

f28022 I2C 问题。

我遵循了中的提示

http://processors.wiki.ti.com/index.php/I2C_Tips

我在示例代码中看到、作者通过清除 ICMDR_IRS 不时地重置 I2C 模块。

主要是为了清除 nacks、但有一次他在传输开始时将模块复位。

我的应用有两个只连接到 Piccolo 的从器件、而 UP 是唯一的主器件。

有时、总线似乎会挂起、因为我会发送一个停止、然后等待停止在 MDR 中消失、但它从未停止。 没有总线时钟、BB 被置位。

很明显、这是一个这样的缺陷、我仍在跟踪它、但是...

我应该等待一段时间、然后在一段时间后、重置模块并重新启动、或者是否有其他方法可以清除这种情况?

本文讨论了如何将引脚置于 GPIO 模式并多次切换时钟、以清除从器件之一的卡滞 ACK。 我理解这一理论、但实际上、这种情况发生的频率如何?

文献 SPRUFZ9D Piccolo I2C 模块第5.4节指出、我应该在设置 ICMDR_IRS 之后等待一段时间、以便 BB 标志与实际总线相匹配。

由于我是唯一的主器件、是否需要等待?

任何想法都很有帮助。

谢谢、

标记。

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

    在做了更多研究之后、我注意到上述文章中有一个部分提到了在读取最后一个字节之前需要设置 ICMDR_STP。

    当我从 I2C 读取一个字节、然后在该字节之后发送 STOP 时、模块会卡住。

    暂停这个问题、直至我调查这个问题。 我必须仔细考虑我的通信协议。

    标记。

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

    感谢您的更新。 如果您在不到30天的时间内再次回答此问题、您可能可以在此处继续讨论。 如果该主题帖超过30天而没有活动、您可能需要启动新主题帖、以确保我们看到您的帖子。