I2C总线死锁

[复制链接]
 楼主| eworker 发表于 2007-7-24 07:58 | 显示全部楼层 |阅读模式
机架背板上用C8051F005做上位机,插件上用ADUC812做下位机,机架的背板和插件通过I2C总线连接,物理连接方式类似于内存条插到主板上的金手指连接方式,

问题:
对插件反复热插拔,I2C总线中的SDA或SCL会被锁定在低电平,跟踪C8051F005相应状态寄存器,发现I2C总线的总处于忙状态,热复位C8051F005(包括看门狗和RESET)都不行,只有断电重新上电才可恢复.

求助各位网友,请不吝赐教!
liuq 发表于 2007-7-24 08:05 | 显示全部楼层

只需发送不多于8个的附加SCL脉冲就可以解锁

 楼主| eworker 发表于 2007-7-24 08:19 | 显示全部楼层

回楼上

具体到C8051F,代码该如何写?

另外,试过当判断到I2C超时后,强行发SETB STO,但似乎没有作用.
xwj 发表于 2007-7-24 08:21 | 显示全部楼层

去翻旧贴,之前讨论过的

yewuyi 发表于 2007-7-24 08:24 | 显示全部楼层

2楼错解把?

应该是9个SCL……
 楼主| eworker 发表于 2007-7-24 08:34 | 显示全部楼层

好象跟旧贴情况不一致

旧贴讲的是从器件(下位机)把总线锁死,主机连续发9个SCL复位从器件,现在的问题是主器件(上位机)的I2C总线控制器(姑且这样称呼)操作没有反映,具体到C8051F,就是SETB STA进入不了中断,因为是硬件方式,只有发SETB STA一个方法.
 楼主| eworker 发表于 2007-7-24 08:49 | 显示全部楼层

另外

如果不用C8051F的硬件I2C工作方式,改用口线模拟方式,则问题解决.

还是求助!
 楼主| eworker 发表于 2007-7-24 12:51 | 显示全部楼层
gtw 发表于 2007-7-24 12:56 | 显示全部楼层

有没有把sck锁死?

 楼主| eworker 发表于 2007-7-24 13:05 | 显示全部楼层

实际测量结果

SDA为高,SCL为低
gxs64 发表于 2007-7-24 13:12 | 显示全部楼层

re

难道你的板子上没加控制热插拨器件?
 楼主| eworker 发表于 2007-7-24 13:16 | 显示全部楼层

加了

加了,LTC4301,不管用
 楼主| eworker 发表于 2007-7-24 14:22 | 显示全部楼层
 楼主| eworker 发表于 2007-7-24 16:29 | 显示全部楼层

白天大侠们都不活动?

loading888 发表于 2007-7-24 17:46 | 显示全部楼层

是的

bh_wang 发表于 2007-7-24 19:44 | 显示全部楼层
bh_wang 发表于 2007-7-24 19:44 | 显示全部楼层

RE:

1. 关闭从器件电源
2. RSTSRC |= 0x10;
liuq 发表于 2007-7-24 20:00 | 显示全部楼层

回5楼:应该是不多于8个SCL

理由是I2C的从设备在主接收模式的情况下,接收到第一个(或以上)的SCL脉冲信号并且相应输出SDA=0才会发生锁死现象(当然是对I2C协议不了解了)。
 楼主| eworker 发表于 2007-7-24 22:13 | 显示全部楼层

TO bh_wang

从器件电源没法关的,机架背板上插了很多插件,没发关.
 楼主| eworker 发表于 2007-7-25 00:27 | 显示全部楼层

睡觉了,顶一下!

您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

176

帖子

0

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

29

主题

176

帖子

0

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