打印

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

[复制链接]
7232|31
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhangyi3312|  楼主 | 2016-1-9 16:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
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标准协议是怎么规定的了)
主机从从机读数据时,主机也要应答。否则亦然。

使用特权

评论回复
5
gaoxiansheng| | 2016-1-11 21:58 | 只看该作者
wodelqbz 发表于 2016-1-9 18:50
应答是从机对主机做出的反应,有的做出反应,有的没有反应

应答信号是当前从器件发出的,而非应答信号是由当前主器件发出

使用特权

评论回复
6
kokofei| | 2016-1-12 19:06 | 只看该作者
pkuzhx 发表于 2016-1-11 10:20
主机呼叫从机,或者向从机写数据,从机都要产生应答。如果无应答,主机就会stop(也有可能死等,看你怎么 ...

意思是,主机和从机,都可能产生应答信号,对吧?

使用特权

评论回复
7
liutongda| | 2016-1-12 22:41 | 只看该作者
两者的来源是不同的,只不过都用一个数据线而已

使用特权

评论回复
8
pkuzhx| | 2016-1-13 08:44 | 只看该作者
kokofei 发表于 2016-1-12 19:06
意思是,主机和从机,都可能产生应答信号,对吧?

使用特权

评论回复
9
enginezhong| | 2016-1-13 20:26 | 只看该作者
应答:是一个低电平信号。
非应答:是一个高电平信号,也许,叫做应答非更合适。

使用特权

评论回复
10
dongbaohui| | 2016-1-15 09:34 | 只看该作者
应答信号在第9个时钟上出现,接收器输出低电平为应答信号,输出高电平则为非应答信号,怎么叫两者来源不同呢?

使用特权

评论回复
11
新人求带| | 2016-1-16 21:43 | 只看该作者
dongbaohui 发表于 2016-1-15 09:34
应答信号在第9个时钟上出现,接收器输出低电平为应答信号,输出高电平则为非应答信号,怎么叫两者来源不同 ...

一个是主器件发出的,一个是从器件发出的,所以来源不同

使用特权

评论回复
12
rmbass| | 2016-1-17 21:32 | 只看该作者
当主控器接收数据时接收到最后一个数据字节后,必须给被控器发送一个非应答位,使被控器发送器释放数据线,以便主控制。这就是非应答信号。

使用特权

评论回复
13
datouyuan| | 2016-1-18 15:10 | 只看该作者
只有12楼描述正确.
I2C的应答和非应答应该是主器件发给从器件的(只会在读操作中出现).
主器件连续读取从器件时:
主器件发应答(电平0)表示还要读取,从器件发下一个数据.
主器件发非应答(电平1)表示不要读取,从器件要释放总线.

从器件发给主器件的应答只会是电平0,没有应答和非应答的区别.

使用特权

评论回复
14
Classover| | 2016-1-22 15:27 | 只看该作者
datouyuan 发表于 2016-1-18 15:10
只有12楼描述正确.
I2C的应答和非应答应该是主器件发给从器件的(只会在读操作中出现).
主器件连续读取从器 ...

赞一个。讲解的很详细。这个懂了。:lol

使用特权

评论回复
15
kokofei| | 2016-1-23 22:09 | 只看该作者

看看13楼的说法,貌似又冲突了

使用特权

评论回复
16
pkuzhx| | 2016-1-25 09:06 | 只看该作者
kokofei 发表于 2016-1-23 22:09
看看13楼的说法,貌似又冲突了

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

使用特权

评论回复
17
pkuzhx| | 2016-1-25 09:29 | 只看该作者
pkuzhx 发表于 2016-1-25 09:06
没什么冲突的,主机向从机写数据时,从机不会产生非应答,只会应答。
就是说每发送完一个字节后,第九个S ...

另外从机不产生非应答本就是不严格的,如果从器件是传感器一类的基本可以认为是正确的。
但是,例如两个MCU互相通信的系统中,从机MCU正在执行一些实时函数,不能接收数据,它也可以对主机的写要求产生非应答的。

使用特权

评论回复
18
yesherecn| | 2016-1-25 14:59 | 只看该作者
首先你要搞清楚I2C主机和I2C从机,作为主机,当主机需要读取数据时,先要先向从机写从机地址,(从机收到后会发送应答信号),主机现在要切换的接收状态,是否 收到从机的应答信号(低电平);如果收到应答信号,就可以开始读写数据了,如果是主机读,主机读到数据后,要向从机发送应答信号,可以继续读。。。。如果是主机写,写完后需要检测是否接收到从机的应答信号,收到应答信号才能进行下一步。。。
非应答是在没有握手成功或者发送的数据错误时发送的信号,要求重发或者终止。。

使用特权

评论回复
19
lgnativs| | 2016-1-25 15:16 | 只看该作者
只有一个数据线,既要写,又要读,所以就用一个数据周期+一个应答周期来交互了,一方发数据,另一方就要发应答表明接收OK.

使用特权

评论回复
20
MTCN2013| | 2016-1-28 22:05 | 只看该作者
楼上解释的通俗易懂,主要还是因为只有一个数据线的原因了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

18

主题

117

帖子

0

粉丝