IIC总线的应答信号问题

关于应答信号有两处不清楚,查看资料说法也是矛盾的,想找高手确认一下:1,应答信号SDA是在SCL=1期间变化为0的,还是在SCL=0期间变化为0的。2,读操作的应答信号和... 关于应答信号有两处不清楚,查看资料说法也是矛盾的,想找高手确认一下:
1,应答信号SDA是在SCL=1期间变化为0的,还是在SCL=0期间变化为0的。
2,读操作的应答信号和写操作的应答信号发送方是否一样?
我在一个地方看到说:写的时候是从机往主机发应答信号,读的时候是主机往从机发应答信号。如果是这样的话读和写对应答信号的处理应该是不一样的,写的时候是检测应答信号,而读的时候是发送应答信号。可是我在一个程序上看见它对读和写的应答信号处理用的是一个函数,都是在检测应答信号。
这两个问题对我困惑非常大,望高手解答。
展开
 我来答
zam527
推荐于2017-11-28 · TA获得超过137个赞
知道答主
回答量:2
采纳率:0%
帮助的人:3万
展开全部
1、首先IIC通信要分清主机与从机的关系,在主机对从机进行写操作时,一般是在传送完一个数据之后单片机就进入检测应答信号状态:先将两个脚置位SDA=1;SCL=1;然后在一定时间内不断检测SDA脚的电平状态,比如说你弄个循环for(i=255;i>0;i--){..;if(...)break;...}进行不断判断,当SDA的电平为低时就跳出循环,说明此时从机已经ACK,就可说明是I2C器件拉低;如果为高时,则一直判断完整个循环,到最后还为高时,就说明没有应答。
2、写应答和读应答肯定有所区别的。写应答是在你读从机数据期间,当你接收到一个数据时,可以应答的(想继续通信就应答),就将SDA复位(拉低),不想应答(想结束通信时)就置位(SDA=1)。读应答则在主机写数据给从机期间,每当从机接收到一个数据就会应答一下(将数据SDA线拉低),主机将不断检测SDA线的电平,主机就是凭SDA的电平状态才知道从机是否已经正确地接收了主机发送的数据。
行千里路1
2011-02-23
知道答主
回答量:5
采纳率:0%
帮助的人:8414
展开全部
下面的回答分别对应着上面的问题:
1.SCL=1期间变化的。SCL=1期间,如果有应答,拉为底,单片机检测到应答信号,如果本来就是低,那怎么知道应答后总线上的0是I2C器件拉低的呢。
2.这是两个独立的过程。
检测应答信号是为了看看从机是否准备好工作了。当然这个工作包括发送或者接受

参考资料: C

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
pieryon
2018-08-03 · 知道合伙人数码行家
pieryon
知道合伙人数码行家
采纳数:14410 获赞数:166877
获取软件设计师高级职称 万达金融最佳创新奖

向TA提问 私信TA
展开全部
应答是电平置为高,相当于握手信号。
主机默认有应该机制,默认就可以,不需要显式调用。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式