den*_*ace 5 microcontroller i2c
我有一个关于 I2C 协议的问题。我在维基百科页面上找到了这个。
“如果发送器看到 1 位 (NACK),它就会了解到:
1) 从机无法接受数据。2) 没有这样的从站 3) 无法理解命令 4) 无法接受更多数据。”
第一点和第四点似乎是相互矛盾的。场景是:我正在尝试在微控制器之间进行通信,因此,一个将充当主控制器,另一个将充当从控制器。我从主控制器传输 10 个字节,而从控制器在我的实现中只能接收 5 个字节。
所以我的问题是根据 i2c 协议从机何时应该发送 NACK?1) 收到第5个字节后。2) 收到第6个字节后。
这个问题问得好。我已经查看了实际的 I2C 规范(http://www.nxp.com/documents/user_manual/UM10204.pdf),其中列出的 NACK 条件之一是“在传输期间,接收器无法接收更多数据字节” ”。然而,我见过的从主机发送的每一段代码都将收到的 NACK 视为错误。
我的经验是,从属设备不会 NACK 过多的字节:它们要么在内部回绕,要么默默地丢弃额外的数据。
我的感觉是,如果您确实希望 NACK 多余的数据,则应该 NACK 第 6 个字节(您期望的是 5 个字节)。
请注意,这与主机接收数据的情况不同,后者需要在 STOP 之前 NACK 最后一个字节。这在规范中的单独行项中进行了描述:“主接收器必须向从发射器发出传输结束信号”。
所有这些信息都在规范的第 3.1.6 节中。