TI中文支持网
TI专业的中文技术问题搜集分享网站

关于 I2C 总线出现 bus busy 的问题

AM4378的开发板,在I2C1 总线上加了一个I2C从设备MPU6050,但是通信一段时间就会产生“Arbitration lost”仲裁丢失错误,然户系统就会一直出现  " timeout waiting for bus ready " 这个错误。

芯片手册上说出现仲裁丢失错误有两种情况,一种是真正的仲裁丢失,另一种是"when the I2C attempts to start a transfer while BB (bus busy) is 1.",我I2C总线上只有一个主设备,因此应该是第二种情况。但是I2C在传输的时候已经判断了当前总线为空闲,为什么还会出现这种现象呢?  并且 bus busy 位被置1后,软件复位和软件重启均无法清除,只有断电重启才能清除该标志位。

为什么会出现这种情况?有人之前遇到过么?

Steven Liu1:

I2C的硬件设计上做了上拉了吗?

Heng Jiang:

回复 Steven Liu1:

接了2.2K的上拉电阻

Heng Jiang:

回复 Heng Jiang:

刚刚用示波器量了一下,发现SDA线一直处于低电平,软件复位无法恢复,只有断电重启后才能变成高电平。

Shine:

回复 Heng Jiang:

请问是否是下面的情况引起的?http://processors.wiki.ti.com/index.php/I2C_Tips#Using_I2C_in_a_Multi-Threaded_Context

Heng Jiang:

回复 Shine:

谢谢,应该就是IIC文档里面所说的问题,并且也给出了解决方案。

但是文档里面说当你在传输的过程中,IIC模块复位会出现这样的问题,但是我并没有复位啊,而且IIC的一次传输是有互斥锁的保护,不会出现多线程同时使用IIC问题,那么为什么IIC模块会复位呢?

我的板卡上有两个IIC,IIC0刚刚测试是不会出现这样的现象的,IIC1会出现,难道是硬件有BUG么?

谢谢您的文档!

yongqing wang:

回复 Heng Jiang:

重现一下这个问题,看看复位信号

Heng Jiang:

回复 yongqing wang:

请问复位信号怎么查看? 是否和上图有关?

Jian Zhou:

回复 Heng Jiang:

可以通过写寄存器复位,你的I2C总线上只连了这么一个设备么?其他设备有没有类似问题?

赞(0)
未经允许不得转载:TI中文支持网 » 关于 I2C 总线出现 bus busy 的问题
分享到: 更多 (0)