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.

[参考译文] AM3354:I2C 主机 NAK 问题

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/666587/am3354-i2c-master-nak-issue

器件型号:AM3354

您好!

我对 AM335x I2C 有疑问。

AM335x I2C 是主机、外部 RTC 作为 I2C 从机进行连接。
当 I2C 主设备是接收器时、我知道主设备将发送数据
接收完最后一个数据字节后的 NACK (当 DCOUNT 寄存器的值为1时)。
但在我客户的电路板上、有时 AM335x I2C 主设备会在最后一个数据字节接收阶段之前发送 NACK。
为什么 AM335x I2C 主设备在最后一个数据字节阶段之前发送 NACK?
可以考虑哪些因素?

此致、
G.F.

在意外的时间发送 NACK

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

    这是什么软件? Linux、RTOS、其他?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 G.F.:

    生成 NACK 的条件有多种:
    接收器无法接收或发送、因为它正在执行一些实时功能、并且未准备好开始与主器件通信。
    2.在传输过程中,接收器会收到它不理解的数据或命令。
    3.在传输过程中,接收器不能接收更多的数据字节。
    主接收器完成对数据的读取、并通过 NACK 向从器件指示此情况。
    您应该检查这些条件中的每一个。
    有关 I2C 总线的更多详细信息、请参阅:
    www.ti.com/.../slva704.pdf

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

    感谢你的答复。

    此问题来自我的客户、他们的操作系统是 WinCE7。

    我了解到生成 NACK 有多种条件。
    您附加到上述 POST 的条件1-3是否不是 I2C 从设备生成 NACK?
    我的理解是 I2C 主设备仅在条件4中生成 NACK、我错了吗?

    我的客户将 DCOUNT 设置为16、因此通常 AM335x I2C 主设备将接收16个字节
    从器件的数据。 但有时 NACK 会在最后一次接收数据之前生成。
    他们检查了 I2C_IRQSTATUS 寄存器的 ROVR 位域、该位域设置为零(正常运行)。
    没有溢出、因此我们不知道为什么 AM335x I2C 主设备无法接收所有数据。

    是否还有其他需要检查的地方?

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

    这个问题已经解决。
    我的客户在开始条件后更改了 DCOUNT 寄存器值。
    修复软件后、问题至今未出现。

    但我对 AM335x I2C 还有其他疑问。
    我将关闭此帖子、并为其他问题发布新帖子
    因为其他问题与此问题无关。

    此致、
    G.F.