I2C的应答和非应答怎么理解呢

[复制链接]
8334|31
 楼主| zhangyi3312 发表于 2016-1-9 16:23 | 显示全部楼层 |阅读模式
看I2C协议的时候,有应答和非应答的说法,两者怎么理解呢?
wodelqbz 发表于 2016-1-9 18:50 | 显示全部楼层
应答是从机对主机做出的反应,有的做出反应,有的没有反应
几时再见 发表于 2016-1-11 08:14 | 显示全部楼层
wodelqbz 发表于 2016-1-9 18:50
应答是从机对主机做出的反应,有的做出反应,有的没有反应

标准的协议,应该是有应答的吧,没应答也是可以的么?
pkuzhx 发表于 2016-1-11 10:20 | 显示全部楼层
几时再见 发表于 2016-1-11 08:14
标准的协议,应该是有应答的吧,没应答也是可以的么?

主机呼叫从机,或者向从机写数据,从机都要产生应答。如果无应答,主机就会stop(也有可能死等,看你怎么写,忘了i2c标准协议是怎么规定的了)
主机从从机读数据时,主机也要应答。否则亦然。
gaoxiansheng 发表于 2016-1-11 21:58 | 显示全部楼层
wodelqbz 发表于 2016-1-9 18:50
应答是从机对主机做出的反应,有的做出反应,有的没有反应

应答信号是当前从器件发出的,而非应答信号是由当前主器件发出
kokofei 发表于 2016-1-12 19:06 | 显示全部楼层
pkuzhx 发表于 2016-1-11 10:20
主机呼叫从机,或者向从机写数据,从机都要产生应答。如果无应答,主机就会stop(也有可能死等,看你怎么 ...

意思是,主机和从机,都可能产生应答信号,对吧?
liutongda 发表于 2016-1-12 22:41 | 显示全部楼层
两者的来源是不同的,只不过都用一个数据线而已
pkuzhx 发表于 2016-1-13 08:44 | 显示全部楼层
kokofei 发表于 2016-1-12 19:06
意思是,主机和从机,都可能产生应答信号,对吧?

enginezhong 发表于 2016-1-13 20:26 | 显示全部楼层
应答:是一个低电平信号。
非应答:是一个高电平信号,也许,叫做应答非更合适。
dongbaohui 发表于 2016-1-15 09:34 | 显示全部楼层
应答信号在第9个时钟上出现,接收器输出低电平为应答信号,输出高电平则为非应答信号,怎么叫两者来源不同呢?
新人求带 发表于 2016-1-16 21:43 | 显示全部楼层
dongbaohui 发表于 2016-1-15 09:34
应答信号在第9个时钟上出现,接收器输出低电平为应答信号,输出高电平则为非应答信号,怎么叫两者来源不同 ...

一个是主器件发出的,一个是从器件发出的,所以来源不同
rmbass 发表于 2016-1-17 21:32 | 显示全部楼层
当主控器接收数据时接收到最后一个数据字节后,必须给被控器发送一个非应答位,使被控器发送器释放数据线,以便主控制。这就是非应答信号。
datouyuan 发表于 2016-1-18 15:10 | 显示全部楼层
只有12楼描述正确.
I2C的应答和非应答应该是主器件发给从器件的(只会在读操作中出现).
主器件连续读取从器件时:
主器件发应答(电平0)表示还要读取,从器件发下一个数据.
主器件发非应答(电平1)表示不要读取,从器件要释放总线.

从器件发给主器件的应答只会是电平0,没有应答和非应答的区别.
Classover 发表于 2016-1-22 15:27 | 显示全部楼层
datouyuan 发表于 2016-1-18 15:10
只有12楼描述正确.
I2C的应答和非应答应该是主器件发给从器件的(只会在读操作中出现).
主器件连续读取从器 ...

赞一个。讲解的很详细。这个懂了。:lol
kokofei 发表于 2016-1-23 22:09 | 显示全部楼层

看看13楼的说法,貌似又冲突了
pkuzhx 发表于 2016-1-25 09:06 | 显示全部楼层
kokofei 发表于 2016-1-23 22:09
看看13楼的说法,貌似又冲突了

没什么冲突的,主机向从机写数据时,从机不会产生非应答,只会应答。
就是说每发送完一个字节后,第九个SCL周期还是存在的,但是从机只会应答,不会产生非应答。应答/非应答这道选择题还在那里,只是从机没得选,他只能选A.应答。
13楼说的是“没有应答和非应答的区别”,并不是“没有应答”。让他选一次但强制他选A和压根就不给他选是不一样的,8个SCL和9个SCL是不一样的。
pkuzhx 发表于 2016-1-25 09:29 | 显示全部楼层
pkuzhx 发表于 2016-1-25 09:06
没什么冲突的,主机向从机写数据时,从机不会产生非应答,只会应答。
就是说每发送完一个字节后,第九个S ...

另外从机不产生非应答本就是不严格的,如果从器件是传感器一类的基本可以认为是正确的。
但是,例如两个MCU互相通信的系统中,从机MCU正在执行一些实时函数,不能接收数据,它也可以对主机的写要求产生非应答的。
yesherecn 发表于 2016-1-25 14:59 | 显示全部楼层
首先你要搞清楚I2C主机和I2C从机,作为主机,当主机需要读取数据时,先要先向从机写从机地址,(从机收到后会发送应答信号),主机现在要切换的接收状态,是否 收到从机的应答信号(低电平);如果收到应答信号,就可以开始读写数据了,如果是主机读,主机读到数据后,要向从机发送应答信号,可以继续读。。。。如果是主机写,写完后需要检测是否接收到从机的应答信号,收到应答信号才能进行下一步。。。
非应答是在没有握手成功或者发送的数据错误时发送的信号,要求重发或者终止。。
lgnativs 发表于 2016-1-25 15:16 | 显示全部楼层
只有一个数据线,既要写,又要读,所以就用一个数据周期+一个应答周期来交互了,一方发数据,另一方就要发应答表明接收OK.
MTCN2013 发表于 2016-1-28 22:05 | 显示全部楼层
楼上解释的通俗易懂,主要还是因为只有一个数据线的原因了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

117

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部