为什么I2C总线的BUSY位会为一直为忙碌?
如题所示,我这边I2C设置都没有问题,可是在用I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲,不知道什么原因,我那个I2C那边设置好了后,这个BUSY位一直都在忙碌当中,所以无法进行下去,不知道I2C总线的BUSY位一直为忙碌的原因有哪些阿?请各位高手指点一下,我好检查到底是那边有问题啊?,非常感谢!急!急!急!!!
[解决办法]
硬件没设计好?
[解决办法]
看看复位 是不是出问题了
[解决办法]
时序的问题应该是,好好研究一下时序吧
[解决办法]
跟内存有关么~~
[解决办法]
I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲...
不是纯标准的I2C吧。。。难道是我记错了。貌似I2C没有什么判断busy位。是芯片有特殊要求还是什么?
你可以加一个lock,进I2C通讯的时候lock用完了马上unlock。
具体lock和unlock的实现就按照进去独占出来完全释放i2c bus就可以了。
具体的可用下EnterCriticalSection和LeaveCriticalSection。
或者按照你IC的要求来定制对I2C总线的占用和释放。可能是用了没释放。
硬件上。。。。也可以检查下是否线接错了。。。。汗
个人建议仅供参考
Mercury
[解决办法]
其实,除了硬件是原因之外,软件因素不可忽视.
因为 I2C需要应答,所以,当你接收的时候,应答不能按时发出,对方接收不到,于是下次通讯你发死发不出。
现看你都开了什么中断吧,如果中断处理的时间比I2C CLOCK还长,要小心了。
最好先关所有中断再处理
[解决办法]
可是在用I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲....
I2C没有busy位的,发送start信号,发送数据,接收方应答,就这三个过程。不知lz是模拟I2C,还是控制器的?
[解决办法]
就是因为上次通讯失步,使这次通讯一直没能完成。
后面的都使“忙”。忙着处理第一次失败的那各通讯,
[解决办法]
I2C没有什么BUSY位的,你这个BUSY位是CPU寄存器里的吧,楼主先把问题描述的详细一点
[解决办法]
如果是模拟的话,时序错误的可能性比较大
使用控制器的话,检查一下寄存器配置吧
[解决办法]
用示波器看时序,应该可以确定问题出在哪个步骤