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

mly0904 2009-10-29 07:17:42
如题所示,我这边I2C设置都没有问题,可是在用I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲,不知道什么原因,我那个I2C那边设置好了后,这个BUSY位一直都在忙碌当中,所以无法进行下去,不知道I2C总线的BUSY位一直为忙碌的原因有哪些阿?请各位高手指点一下,我好检查到底是那边有问题啊?,非常感谢!急!急!急!!!
...全文
3382 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuxinxinggg 2011-12-29
  • 打赏
  • 举报
回复
i2c bus still busy 差不多一样的问题,研究中
shellgo 2010-07-23
  • 打赏
  • 举报
回复
现在大家怎么解决的啊?
jerrytung 2010-05-27
  • 打赏
  • 举报
回复
现在也遇到这个问题,就是S3C6410芯片中的I2C,首先也是要判断BUSY位的,那个BUSY位忙,MASTER就死了,还不知道怎样让它活过来
xilangyue 2009-11-04
  • 打赏
  • 举报
回复
用示波器看时序,应该可以确定问题出在哪个步骤
sherlock_lai 2009-10-30
  • 打赏
  • 举报
回复
I2C没有什么BUSY位的,你这个BUSY位是CPU寄存器里的吧,楼主先把问题描述的详细一点
gelu1040 2009-10-30
  • 打赏
  • 举报
回复
就是因为上次通讯失步,使这次通讯一直没能完成。
后面的都使“忙”。忙着处理第一次失败的那各通讯,
JNU_kinke 2009-10-30
  • 打赏
  • 举报
回复
可是在用I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲....
I2C没有busy位的,发送start信号,发送数据,接收方应答,就这三个过程。不知lz是模拟I2C,还是控制器的?
gelu1040 2009-10-30
  • 打赏
  • 举报
回复
其实,除了硬件是原因之外,软件因素不可忽视.
因为 I2C需要应答,所以,当你接收的时候,应答不能按时发出,对方接收不到,于是下次通讯你发死发不出。

现看你都开了什么中断吧,如果中断处理的时间比I2C CLOCK还长,要小心了。
最好先关所有中断再处理
xumercury 2009-10-30
  • 打赏
  • 举报
回复
I2C去读寄存器或者写入值时,首先会先去判断BUSY位是否空闲...
不是纯标准的I2C吧。。。难道是我记错了。貌似I2C没有什么判断busy位。是芯片有特殊要求还是什么?
你可以加一个lock,进I2C通讯的时候lock用完了马上unlock。
具体lock和unlock的实现就按照进去独占出来完全释放i2c bus就可以了。
具体的可用下EnterCriticalSection和LeaveCriticalSection。
或者按照你IC的要求来定制对I2C总线的占用和释放。可能是用了没释放。

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

个人建议仅供参考

Mercury
ProgrammerNO1 2009-10-30
  • 打赏
  • 举报
回复
跟内存有关么~~
xilangyue 2009-10-30
  • 打赏
  • 举报
回复
时序的问题应该是,好好研究一下时序吧
宇帆 2009-10-30
  • 打赏
  • 举报
回复
看看复位 是不是出问题了
guopeixin 2009-10-30
  • 打赏
  • 举报
回复
如果是模拟的话,时序错误的可能性比较大
使用控制器的话,检查一下寄存器配置吧
xqhrs232 2009-10-29
  • 打赏
  • 举报
回复
硬件没设计好?

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧