打印
[PIC®/AVR®/dsPIC®产品]

I2C 锁死问题

[复制链接]
2764|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让从机把后面的数据发送完成即可。

使用特权

评论回复
5
QQ1239948776| | 2013-11-13 18:28 | 只看该作者

1、在IIC通信过程中如果出现了主机复位等现象,如果此时正好SDA被从机拉低,则主机复位完成后,此时就会出现这种锁死IIC总线的现象。
2、在IIC的SDA被从机锁定后的解决办法很简单:在主机上电后,连续最多发送9个SCL脉冲翻转后,则从机就会释放SDA总线。
3、至于为什么会释放,为什么说最多连续发送9个,而不是必须9个脉冲,这些你应该去看IIC协议中的相关内容。

使用特权

评论回复
6
wangch_sh| | 2013-11-13 20:09 | 只看该作者
学习了。

使用特权

评论回复
7
amw2738|  楼主 | 2013-11-13 21:43 | 只看该作者
运用3楼的方法可以救活从机 的I2C,谢了
现在又出现了新情况,我有四个从机。如果是4个从机都当了,可以用9个脉冲救活。
可以只有一个从机当了,这里的SDA,SCL都为高,主机与其它从机的通信又正常。这又是什么情况?

使用特权

评论回复
8
yewuyi| | 2013-11-14 08:13 | 只看该作者
amw2738 发表于 2013-11-13 21:43
运用3楼的方法可以救活从机 的I2C,谢了
现在又出现了新情况,我有四个从机。如果是4个从机都当了,可以用9 ...

请认真想想你这个提问。

任意一个从机锁定SDA为低,则此时不管主机或其它的SDA输出为什么,此时都会被锁定在低电平上,所以根本不存在你所说的情况。

使用特权

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

本版积分规则

1

主题

4

帖子

1

粉丝