i2c 协议 NACK 歧义

i2c protocol NACK ambiguity

我有一个关于 I2C 协议的问题。我在维基百科页面上找到了这个。

"如果发送器看到 1 位 (NACK),它会了解到:

1) 从站无法接受数据。 2)没有这样的奴隶 3)命令不理解 4) 无法接受更多数据。"

第一点和第四点似乎相互矛盾。 场景是: 我正在尝试在微控制器之间进行通信,因此,一个将充当主机,另一个 slave.I 正在从主机传输 10 个字节,而从机在我的实现中只能接收 5 个字节。

所以我的问题是根据 i2c 协议,slave 应该在什么时候发送 NACK? 1) 收到第 5 个字节后。 2) 收到第6个字节后。

这是个很好的问题。我查看了实际的 I2C 规范 (http://www.nxp.com/documents/user_manual/UM10204.pdf),它为 NACK 列出的条件之一是 "During the transfer, the receiver cannot receive any more data bytes"。但是,我看到的从主机发送的每段代码都将接收到的 NACK 视为错误。

我的经验是,从属设备不会 NACK 过多的字节:它们要么在内部回绕,要么默默地丢弃额外的数据。

我的感觉是,如果你确实希望 NACK 多余的数据,你应该 NACK 第 6 个字节(你期望的是 5)。

请注意,这与主机接收数据的情况不同,主机接收数据需要在 STOP 之前对最后一个字节进行 NACK。这在规范的单独行项目中进行了描述:"A master-receiver must signal the end of the transfer to the slave transmitter".

所有这些信息都在规范的第 3.1.6 节中。