ti81xx_interrupt 1146: VBUS error workaround (delay coming)产生原因分析

来源:互联网 发布:isp图像处理编程 编辑:程序博客网 时间:2024/05/01 20:20

这几天用开发板来采集声音信号,接了一个24为的采集卡。开发板是TI的AM335X,运行内核是3.2版。整个系统用小米移动电源供电(因为要把整个系统拿到室外)。但是在使用过程中,系统老是出问题,提示代码就是标题:

ti81xx_interrupt 1146: VBUS error workaround (delay coming)

其实在启动过程中也报出了这个问题,但是可以正常启动使用。只不过在使用过程中,经常时不时的又报出这个问题,虽然没有导致系统挂掉,但是也使得系统无法正常使用。网上查了一下,VBUS是USB的供电电源,这个问题应该是由USB供电电源出问题导致的。考虑到在室内用电源适配器供电使用正常,且整个系统确实要的电流比较大,于是怀疑移动电源供电能力不足。接着换了一块供电能力强一点的移动电源,没有再报错了!

回去查了继续针对这个问题查了一下资料。找到下面这个TI论坛的帖子,里面分析的很详细!其中讲到的VBUS电压下降的原因应该就是我这次碰到问题的原因。帖子链接如下:

http://e2e.ti.com/support/arm/sitara_arm/f/791/p/299887/1047546

其中有一段分析如下图:


这意思是,当一个USB设备插入时,电流会短时突然增大( in-rush current),这就会导致VBUS电压低于4.4V(USB使用的5V电压的最低下限)。而MUSB 控制器回检测到这个异常,并且产生一个中断(VBUSERROR interrupt),接着驱动便去解决这个异常。

我们所看到的持续出现的over-current message其实是驱动在处理异常过程中的一个bug,貌似因为一旦over-current发生,其中某个计数器(recover retry counter)一直没能得到复位。又因为从硬件上来看, VBUSERROR问题是可以解决的(想办法避免因为in-rush current导致VBUS下降过多),所以内核社区一直没有从软件上去修复这个bug。

为了避免in-rush current导致这种问题,USB规范规定USB主机的VBUS上必须接一个至少120uF的电容(估计是缓解in-rush current造成的VBUS电压下降)。并且还规定USB设备的VBUS端必须有最大不超过10uF的电容。所以,如果某个USB设备插入时出现这类问题,可以试试别的USB设备。如果两边都有电容,并且某个特定USB口接入设备时总是出问题,很可能是该USB口不符合规范。若不同的USB设备插上去,出现了同样的问题,可能板子有其他的问题。

回过头看我的问题,很有可能是移动电源的供电能力不足,导致电压不稳,从而时不时的使VBUS电压低于4.4V,最终导致报错。

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

转载请注明出处:

CSDN作者:Andoubi

连接:http://blog.csdn.net/andoubi/article/details/52989034


0 0