[PIC®/AVR®/dsPIC®产品] I2C 锁死问题

[复制链接]
3296|7
 楼主| amw2738 发表于 2013-11-8 23:08 | 显示全部楼层 |阅读模式
我现在有一项目用到了I2C,我的MCU做主动,读取客户的一个从动I2C。
正常工作读取都没问题,长期老化后,从动I2C的 SDA 为始终为低电平,SCL 为高电平,锁死。
减小上拉电阻,老化的时间会长点才锁死。
现在有两个问题;
1、I2C什么情况会出现这种情况(SDA为始终为低电平,SCL为高电平);
2、如果出现这种情况,主机有没有办法,复位从机的I2C,或解锁。

NE5532 发表于 2013-11-9 09:14 | 显示全部楼层
按协议,从机报忙,只能拉SCL,不能拉SDA,所以考虑是不是从机当了。
yewuyi 发表于 2013-11-11 11:24 | 显示全部楼层
1、在IIC通信过程中如果出现了主机复位等现象,如果此时正好SDA被从机拉低,则主机复位完成后,此时就会出现这种锁死IIC总线的现象。
2、在IIC的SDA被从机锁定后的解决办法很简单:在主机上电后,连续最多发送9个SCL脉冲翻转后,则从机就会释放SDA总线。
3、至于为什么会释放,为什么说最多连续发送9个,而不是必须9个脉冲,这些你应该去看IIC协议中的相关内容。
4、很多年前,在老版本的BBS里面,我有一份帖子详细讨论了这个问题,你可以尝试看看能不能找到。

评分

参与人数 1威望 +1 收起 理由
amw2738 + 1 很给力!

查看全部评分

XIEYUANBIN 发表于 2013-11-11 20:31 | 显示全部楼层
本帖最后由 XIEYUANBIN 于 2013-11-11 20:32 编辑

楼上正解,一般是从机在发送数据时主机复位或者SCL信号丢失、受串扰所致,解决的办法就是楼上所说连续发送SCL让从机把后面的数据发送完成即可。
QQ1239948776 发表于 2013-11-13 18:28 | 显示全部楼层

1、在IIC通信过程中如果出现了主机复位等现象,如果此时正好SDA被从机拉低,则主机复位完成后,此时就会出现这种锁死IIC总线的现象。
2、在IIC的SDA被从机锁定后的解决办法很简单:在主机上电后,连续最多发送9个SCL脉冲翻转后,则从机就会释放SDA总线。
3、至于为什么会释放,为什么说最多连续发送9个,而不是必须9个脉冲,这些你应该去看IIC协议中的相关内容。
wangch_sh 发表于 2013-11-13 20:09 | 显示全部楼层
学习了。
 楼主| amw2738 发表于 2013-11-13 21:43 | 显示全部楼层
运用3楼的方法可以救活从机 的I2C,谢了
现在又出现了新情况,我有四个从机。如果是4个从机都当了,可以用9个脉冲救活。
可以只有一个从机当了,这里的SDA,SCL都为高,主机与其它从机的通信又正常。这又是什么情况?
yewuyi 发表于 2013-11-14 08:13 | 显示全部楼层
amw2738 发表于 2013-11-13 21:43
运用3楼的方法可以救活从机 的I2C,谢了
现在又出现了新情况,我有四个从机。如果是4个从机都当了,可以用9 ...

请认真想想你这个提问。

任意一个从机锁定SDA为低,则此时不管主机或其它的SDA输出为什么,此时都会被锁定在低电平上,所以根本不存在你所说的情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

1

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