IIC总线的应答信号问题
关于应答信号有两处不清楚,查看资料说法也是矛盾的,想找高手确认一下:1,应答信号SDA是在SCL=1期间变化为0的,还是在SCL=0期间变化为0的。2,读操作的应答信号和...
关于应答信号有两处不清楚,查看资料说法也是矛盾的,想找高手确认一下: 1,应答信号SDA是在SCL=1期间变化为0的,还是在SCL=0期间变化为0的。 2,读操作的应答信号和写操作的应答信号发送方是否一样? 我在一个地方看到说:写的时候是从机往主机发应答信号,读的时候是主机往从机发应答信号。如果是这样的话读和写对应答信号的处理应该是不一样的,写的时候是检测应答信号,而读的时候是发送应答信号。可是我在一个程序上看见它对读和写的应答信号处理用的是一个函数,都是在检测应答信号。 这两个问题对我困惑非常大,望高手解答。
展开
1个回答
展开全部
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的电平状态才知道从机是否已经正确地接收了主机发送的数据。
2、写应答和读应答肯定有所区别的。写应答是在你读从机数据期间,当你接收到一个数据时,可以应答的(想继续通信就应答),就将SDA复位(拉低),不想应答(想结束通信时)就置位(SDA=1)。读应答则在主机写数据给从机期间,每当从机接收到一个数据就会应答一下(将数据SDA线拉低),主机将不断检测SDA线的电平,主机就是凭SDA的电平状态才知道从机是否已经正确地接收了主机发送的数据。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询