我对I2C协议有疑问。我在维基百科页面上找到了这个。
"如果发射机看到1位(NACK),它会得知:
1)从站无法接受数据。 2)没有这样的奴隶 3)命令不明白 4)无法接受更多数据。"
第一点和第四点似乎相互矛盾。 场景是: 我试图在微控制器之间进行通信,因此,一个将充当主设备而另一个充当从设备。我正在从主设备发送10个字节,从设备在我的实现中只能接收5个字节。
所以我的问题是根据i2c协议何时应该发送NACK? 1)收到第5个字节后。 2)收到第6个字节后。
答案 0 :(得分:3)
这是一个非常好的问题。我已经回顾了实际的I2C规范(http://www.nxp.com/documents/user_manual/UM10204.pdf),它为NACK列出的条件之一是#34;在传输期间,接收器不能再接收任何数据字节"。但是,我从主设备发送的每段代码都认为收到的NACK是错误的。
我的经验是,从设备没有NACK过多的字节:它们要么在内部环绕,要么静默地丢弃额外的数据。
我的感觉是,如果你确实希望NACK过多的数据,你应该NACK第6个字节(你期望5)。
请注意,这是与主接收数据不同的情况,其中需要在STOP之前NACK最后一个字节。这在规范中的sepate项目中进行了描述:"主接收器必须发信号通知传输到从发送器的结束"。
所有这些信息都在说明书的第3.1.6节中。