找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1872|回复: 4
收起左侧

硬件I2C通信中从机是如何知道数据结束可发送NACK

[复制链接]
ID:1043477 发表于 2022-9-20 13:08 | 显示全部楼层 |阅读模式
在IIC通信中,主机每发一个数据,从机就会回一个ACK,最后一个数据就好发NACK,然后主机发送STOP信号,但是从机接收数据时时怎么知道时最后一个数据,在接收最后一个数据之后就发NACK
回复

使用道具 举报

ID:624769 发表于 2022-9-20 14:27 | 显示全部楼层
理解有误,标准的IIC通讯来讲。
主机发送数据给从机,从机接受成功 发 ACK, 接收失败发 NAK,  控制权在主机,主机发送停止信号了,从机就知道发送结束了。

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

当然,如果是某些特殊芯片,用的是双线通讯,协议时序类似IIC, 但是从头到尾没说自己是IIC协议的。比如某驱动芯片,他BUF被写满后发送 NAK 也是有的,其实和 IIC 通讯接受失败的意思类似,都是不要再发了。再发就出错了的意思。
回复

使用道具 举报

ID:401564 发表于 2022-9-21 01:34 | 显示全部楼层
IIC应答系统非常的简单

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

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

看一下IIC的时序图就知道了,如果不会看时序图,那就先学会看时序图
回复

使用道具 举报

ID:1034262 发表于 2022-9-21 11:18 | 显示全部楼层
IIC通讯总是由接收数据方(主机从机均是)发送ACK和NACK,区别是从机在接收错误时才发NACK,但主机是可以主动发NACK表示读取结束,从机接收数据是不知道结束的,由主机发STOP结束。
回复

使用道具 举报

ID:123289 发表于 2022-9-21 16:30 | 显示全部楼层
用双方约定的通讯协议来确认。
例如:约定连续数据发送间隔时间为10ms。那么超过10ms就可以认定:上一个收到的数据,就是最后一个。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表