打印

I2C总线死锁

[复制链接]
6771|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 | 只看该作者

去翻旧贴,之前讨论过的

使用特权

评论回复
5
yewuyi| | 2007-7-24 08:24 | 只看该作者

2楼错解把?

应该是9个SCL……

使用特权

评论回复
6
eworker|  楼主 | 2007-7-24 08:34 | 只看该作者

好象跟旧贴情况不一致

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

使用特权

评论回复
7
eworker|  楼主 | 2007-7-24 08:49 | 只看该作者

另外

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

还是求助!

使用特权

评论回复
8
eworker|  楼主 | 2007-7-24 12:51 | 只看该作者

up

使用特权

评论回复
9
gtw| | 2007-7-24 12:56 | 只看该作者

有没有把sck锁死?

使用特权

评论回复
10
eworker|  楼主 | 2007-7-24 13:05 | 只看该作者

实际测量结果

SDA为高,SCL为低

使用特权

评论回复
11
gxs64| | 2007-7-24 13:12 | 只看该作者

re

难道你的板子上没加控制热插拨器件?

使用特权

评论回复
12
eworker|  楼主 | 2007-7-24 13:16 | 只看该作者

加了

加了,LTC4301,不管用

使用特权

评论回复
13
eworker|  楼主 | 2007-7-24 14:22 | 只看该作者

UP

使用特权

评论回复
14
eworker|  楼主 | 2007-7-24 16:29 | 只看该作者

白天大侠们都不活动?

使用特权

评论回复
15
loading888| | 2007-7-24 17:46 | 只看该作者

是的

使用特权

评论回复
16
bh_wang| | 2007-7-24 19:44 | 只看该作者

RE:

使用特权

评论回复
17
bh_wang| | 2007-7-24 19:44 | 只看该作者

RE:

1. 关闭从器件电源
2. RSTSRC |= 0x10;

使用特权

评论回复
18
liuq| | 2007-7-24 20:00 | 只看该作者

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

理由是I2C的从设备在主接收模式的情况下,接收到第一个(或以上)的SCL脉冲信号并且相应输出SDA=0才会发生锁死现象(当然是对I2C协议不了解了)。

使用特权

评论回复
19
eworker|  楼主 | 2007-7-24 22:13 | 只看该作者

TO bh_wang

从器件电源没法关的,机架背板上插了很多插件,没发关.

使用特权

评论回复
20
eworker|  楼主 | 2007-7-25 00:27 | 只看该作者

睡觉了,顶一下!

使用特权

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

本版积分规则

29

主题

176

帖子

0

粉丝