标题: 硬件I2C通信中从机是如何知道数据结束可发送NACK [打印本页]

作者: yxyxyxyx    时间: 2022-9-20 13:08
标题: 硬件I2C通信中从机是如何知道数据结束可发送NACK
在IIC通信中,主机每发一个数据,从机就会回一个ACK,最后一个数据就好发NACK,然后主机发送STOP信号,但是从机接收数据时时怎么知道时最后一个数据,在接收最后一个数据之后就发NACK
作者: 188610329    时间: 2022-9-20 14:27
理解有误,标准的IIC通讯来讲。
主机发送数据给从机,从机接受成功 发 ACK, 接收失败发 NAK,  控制权在主机,主机发送停止信号了,从机就知道发送结束了。

主机从从机接受数据,接收完一个,主机发出ACK, 让从机发下一个, 当主机发出 NAK 就是让从机不要发了,最后一个了。

当然,如果是某些特殊芯片,用的是双线通讯,协议时序类似IIC, 但是从头到尾没说自己是IIC协议的。比如某驱动芯片,他BUF被写满后发送 NAK 也是有的,其实和 IIC 通讯接受失败的意思类似,都是不要再发了。再发就出错了的意思。
作者: Y_G_G    时间: 2022-9-21 01:34
IIC应答系统非常的简单

主机写入数据的时候,应答信号由从机给出,表示从机已经正确接收到一个8位的数据
如果从机没有应答信号,就表示从机没有正确的接收到数据,主机自己决定接下来要干嘛

主机读取数据的时候,应答信号由主机给出,表示主机已经读取到一个8位的数据,从机会在下一个时钟会继续输出数据
如果主机没有给出应答符号,就表示不再读取数据,从机不再输出数据

看一下IIC的时序图就知道了,如果不会看时序图,那就先学会看时序图
作者: coody_sz    时间: 2022-9-21 11:18
IIC通讯总是由接收数据方(主机从机均是)发送ACK和NACK,区别是从机在接收错误时才发NACK,但主机是可以主动发NACK表示读取结束,从机接收数据是不知道结束的,由主机发STOP结束。
作者: yzwzfyz    时间: 2022-9-21 16:30
用双方约定的通讯协议来确认。
例如:约定连续数据发送间隔时间为10ms。那么超过10ms就可以认定:上一个收到的数据,就是最后一个。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1