发新帖我要提问
12
返回列表
打印

I2C总线死锁

[复制链接]
楼主: eworker
手机看帖
扫描二维码
随时随地手机跟帖
21
hotpower| | 2007-7-25 00:33 | 只看该作者 回帖奖励 |倒序浏览

我在AVR遇到过SCL=0从机锁死的情况

这是主机发一万个SCL也无用~~~

没办法我只有把主机的设置从I2C模块变为一般的IO模式再变为I2C主机模式
就解锁了.

实在是倒塌呀~~~

使用特权

评论回复
22
lucidmask| | 2007-7-25 08:55 | 只看该作者

re

关键是什么原因把其锁死的?

使用特权

评论回复
23
liuq| | 2007-7-25 17:32 | 只看该作者

对于一个完整的I2C程序,起码应该具有三个标志

就是NoACK(无应答),Busy(器件忙)和BusFault(总线错误)。
1.当STA+SLA+R/W后,如果9th BIT=1,则置位NoACK,表示被寻址的I2C器件不存在。
2.当正处于访问一个I2C设备的过程中,程序应置位Busy。即STA和STO之间Busy=1.
3.如果初始化I2C(释放总线)后,SDA=0和(或)SCL=0,程序应置位BusFault。
根据以上三个条件合理控制程序的流程,才是一个完整的I2C程序。
当出现BusFault标志时,如果只有SDA=0,问题可能出现在主接收模式下的从发送数据等于0,这是可以通过附加SCL脉冲解决。如果不能解锁,应检查其它原因;如果只有SCL=0,应检查总线是否是多主系统。
当然以上条件是建立在硬件设计没有错误,器件没有损坏前提下进行的。

使用特权

评论回复
24
yewuyi| | 2007-8-1 11:21 | 只看该作者

不管是AVR还是MOTO还是PIC……

当发生SCL被从机挂死后都需要先关掉IIC,切换到普通IO方式,然后再切换回去,都是这样的拉……


确实比较倒塌了……

使用特权

评论回复
25
pian_zhou| | 2007-8-1 15:06 | 只看该作者

肯定是你的程序有问题

主机和从机都存在可能。
我以前用C8051也发生过这种现象,后来改改程序,就再没发生过了。
仔细检查一下程序。先确定是主机有问题,还是从机有问题

使用特权

评论回复
26
eWorker| | 2011-5-10 16:26 | 只看该作者
今天又看到了多年前的帖子。后来将上位机硬件I2C方式改为软件口线模拟方式,好了点,但热插拔依旧会导致C8051F005死锁,就只好把C8051F005换掉了。

使用特权

评论回复
27
lorkey_email| | 2011-5-10 23:24 | 只看该作者
IIC发生锁死是因为你没对IIC限时进行处理, 限定读取数据时间, 进行出错处理; 那I2C是不会锁死的。
最多就是当次数据丢失而以.

使用特权

评论回复
28
eWorker| | 2011-5-11 06:48 | 只看该作者
其实问题是C8051F005死机或死锁,I2C只是一个表面现象。

使用特权

评论回复
29
hotpower| | 2011-5-11 08:15 | 只看该作者
晕,四年前的帖子。程序用状态机思想编程好些。

使用特权

评论回复
30
Linda_008| | 2011-5-11 08:39 | 只看该作者
初学者,看不明白!
还是要顶一下

使用特权

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

本版积分规则