Arduino I2C从发射机NACK(又名变长应答)
I2C从机向主机传输时是否允许NACK 从规范(2.1)来看,从机在传输数据(即从机向主机发送数据)时,似乎无法实际向主机发送NACK。 我搜遍了网,在这里找不到任何帮助 为什么??我正在AVR Atmega8中实现一个I2C主设备。我想涵盖所有用例。我有一个用户注意到,当I2C从设备在SLA+R模式下发送NACK时,主设备会忽略它 据我所知,启动SLA+R的主设备是唯一允许NACK数据包的一方。从机必须在主时钟上继续发送数据包。 然而,Arduino wire库中的一个片段暗示从机可以向主机发送NACK。Arduino I2C从发射机NACK(又名变长应答),arduino,i2c,atmega,slave,Arduino,I2c,Atmega,Slave,I2C从机向主机传输时是否允许NACK 从规范(2.1)来看,从机在传输数据(即从机向主机发送数据)时,似乎无法实际向主机发送NACK。 我搜遍了网,在这里找不到任何帮助 为什么??我正在AVR Atmega8中实现一个I2C主设备。我想涵盖所有用例。我有一个用户注意到,当I2C从设备在SLA+R模式下发送NACK时,主设备会忽略它 据我所知,启动SLA+R的主设备是唯一允许NACK数据包的一方。从机必须在主时钟上继续发送数据包。 然而,Arduino wire库中的一个片段暗示从机可以向主机发
你是对的,奴隶无法发送NACK。I2C旨在制造廉价的从设备,并将尽可能多/所有的逻辑放入主设备。所以,在大多数情况下,主机应该知道数据包的长度。如果数据确实是可变的,则必须创建更高级别的协议,并将数据包长度作为报头的一部分进行传输。例如,DDC以第3字节传输数据包大小,主机应使用此信息
请注意,使用任何高级协议都需要将确定消息长度的逻辑嵌入到主I2C函数中。这意味着,最常用的例程,如read(adr、buffer、size),它发出start、read然后stop,不能使用,因为它们读取的字节数正好是“size”。。超级明星!我真的很感谢有时间来记录这一点