在使用am3352的USB接口时遇到了一个很奇怪的问题,我将am3352的两个USB接口(USB0、USB1)都配置为了host,USB1接口连接一个4G模块,上电启动时,am3352能识别USB1接口上的4G模块,但每次都会打印ti81xx_interrupt 1145: VBUS error workaround (delay coming)提示。我们用示波器抓取了下4G模块热插拔时USB1_DRVVBUS(蓝色线)和USB1_VBUS(黄色)引脚的电平变化,如下图所示:
USB1接口上没有接任何设备时,USB1_DRVVBUS(蓝色线)和USB1_VBUS(黄色)都为高电平,当此时把4G模块插上时,USB1_VBUS上的电压会立即下降,这个我理解的是可能是由于4G模块连上时瞬间需要一个大电流,此时造成了USB1_VBUS上的电平拉低了,这个时候USB host会出现一个VBUS中断,也就是会打印ti81xx_interrupt 1145: VBUS error workaround (delay coming)提示,这个不知道理解的对不对?
另外,我们在做USB的极限测试时,当我连续多次热插拔4G模块后,有两种会出现USB接口无法识别4G模块的情况,当出现无法识别4G模块时,我们用示波器测量USB1_DRVVBUS和USB1_VBUS的电平,发现两者都为高,这个时候只有重新热插拔一次4G模块,USB接口才能识别4G模块;另一种情况就是USB1_DRVVBUS和USB1_VBUS的电平用示波器测得都是低电平,这个时候无论你怎么热插拔4G模块,USB接口都不会识别,只有断电重启或复位系统后才能够识别。连续热插拔为什么会出现这两种奇怪的现象呢?有没有解决的方法?
Jian Zhou:
首先请确认下USB OTG做Host时的原理图设计部分:
http://processors.wiki.ti.com/index.php/AM335x_Schematic_Checklist#USB
science:
回复 Jian Zhou:
谢谢您的回复,按照您给的链接,我比对了下我们的电路设计,我们的原理图设计没有问题。我现在的想法是遇到上面的问题可不可以用软件的方法让usb控制器复位重启,怎么设置才能实现在用户态控制usb控制器重启呢?谢谢!
Jian Zhou:
回复 science:
USB做为HOST的时候,应该是USB_VBUS_DRV控制USB_VBUS的enable,在不接USB外设的时候,应该是USB_VBUS为低电平才对。
看你的描述,不接USB外设,USB_VBUS为5V电平,这个应该是有问题的。
science:
回复 Jian Zhou:
我又确认了下确实是没接USB外设的时候,USB_VBUS和USB_VBUS_DRV都为高电平,我们的电路设计是这样的:
USB0_VBUS和USB1_VBUS是USB_VBUS,使能引脚USB0_DRVVBUS和USB1_DRVVBUS都连接了下拉电阻,在没插入USB外设时,测得U26芯片的1和4引脚都为高电平,5和8引脚也为高电平。按照您说的应该为低电平才对,这个硬件电路有没有问题?要是软件的原因的话,我修改软件的哪部分能够实现低电平呢?另外,软件部分修改哪部分可以实现usb控制器的复位?谢谢。