为什么I2C总线的BUSY位会为一直为忙碌?

beck21   2009-10-29 19:17 楼主
如题所示,我这边I2C设置都没有问题,可是在用I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲,不知道什么原因,我那个I2C那边设置好了后,这个BUSY位一直都在忙碌当中,所以无法进行下去,不知道I2C总线的BUSY位一直为忙碌的原因有哪些阿?请各位高手指点一下,我好检查到底是那边有问题啊?,非常感谢!急!急!急!!!

回复评论 (12)

硬件没设计好?
点赞  2009-10-29 19:51
看看复位 是不是出问题了
点赞  2009-10-30 08:54
时序的问题应该是,好好研究一下时序吧
点赞  2009-10-30 08:58
跟内存有关么~~
点赞  2009-10-30 09:20
I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲...
不是纯标准的I2C吧。。。难道是我记错了。貌似I2C没有什么判断busy位。是芯片有特殊要求还是什么?
你可以加一个lock,进I2C通讯的时候lock用完了马上unlock。
具体lock和unlock的实现就按照进去独占出来完全释放i2c bus就可以了。
具体的可用下EnterCriticalSection和LeaveCriticalSection。
或者按照你IC的要求来定制对I2C总线的占用和释放。可能是用了没释放。

硬件上。。。。也可以检查下是否线接错了。。。。汗

个人建议仅供参考

Mercury
点赞  2009-10-30 09:48
其实,除了硬件是原因之外,软件因素不可忽视.
因为 I2C需要应答,所以,当你接收的时候,应答不能按时发出,对方接收不到,于是下次通讯你发死发不出。

现看你都开了什么中断吧,如果中断处理的时间比I2C   CLOCK还长,要小心了。
最好先关所有中断再处理
点赞  2009-10-30 09:56
可是在用I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲....
I2C没有busy位的,发送start信号,发送数据,接收方应答,就这三个过程。不知lz是模拟I2C,还是控制器的?
点赞  2009-10-30 10:15
就是因为上次通讯失步,使这次通讯一直没能完成。
后面的都使“忙”。忙着处理第一次失败的那各通讯,
点赞  2009-10-30 10:46
I2C没有什么BUSY位的,你这个BUSY位是CPU寄存器里的吧,楼主先把问题描述的详细一点
点赞  2009-10-30 10:47
如果是模拟的话,时序错误的可能性比较大
使用控制器的话,检查一下寄存器配置吧
点赞  2009-10-30 18:00
用示波器看时序,应该可以确定问题出在哪个步骤
点赞  2009-11-4 17:27
现在也遇到这个问题,就是S3C6410芯片中的I2C,首先也是要判断BUSY位的,那个BUSY位忙,MASTER就死了,还不知道怎样让它活过来
点赞  2010-5-27 16:15
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复