AM335x USB 调试的经验小结
Yaoming
硬件调试
• 首先,将USB设备放到PC等设备上以确认该设备本身是否正常。
• 可以根据AM335x 的Schematics Check list进行第一步的检查:
– /index.php/AM335x_Schematic_Checklist#USB
• TI FAE 的经验总结:
– /question_answer/dsp_arm/sitara_arm/f/25/t/471
99.aspx
• 其他方法:
– 检查vbus是否上电,排除掉电源设计的问题。
– 查看ID脚是否配置正确。
– 串一个USB HUB到靠近AM335x侧,再进行测试。
• 一次可以初步判断是否是由于信号完整性的原因造成信号不稳定。
– Babble Event,一般为信号完整性问题,可以先用HUB进行调试,也可以通
过软件对USB降速(从USB 2.0 降到USB 1.1)进行调试。如果要从根本上
解决,一遍需要重新layout。
软件调试 -- Linux/Android/Starterware
一般调试流程:
– 首先,用最新的SDK进行调试,看是否问题已经解决。
– 获取USB driver的全部log
• 在Linux/Android中,可以在终端输入dmesg获取。
• 在Starterware中,没有log机制,所以是没有的,可以用JTAG 进行在线调试,可以
参考我以前的总结。
Log机制是进行初步判断问题再哪里的基本步骤。
– 判断是否是Babble Event。如果有,如前所述,需要硬件级的调试,或者绕
过去。
• 对于Linux,可以直接到dmesg 中查看是否有。
• 对于Starterware,需要连上JTAG,进行调试,是否状态为
USB_EVENT_BABBLE_ERROR。
• 主要的绕过方法:
– 可以尝试将USB 2.0降速到USB 1.1。
– 用PIO mode代替DMA mode。
– 用USB 总线分析仪进行调试。
• 这个方法主要是获取USB协议的实现情况的时序图,然后将其交个相应的专家进行
分析调试。
USB 2.0 降速到1.1的方法
• 在Linux/Android中:
– 在kernel/drivers/usb/musb/musb_core.c中
musb_writeb(regs, MUSB_POWER, MUSB_POWER_ISOUPDATE
| MUSB_POWER_SOFTCONN
- | MUSB_POWER_HSENAB
+ /*| MUSB_POWER_HSENAB */
/* ENSUSPEND wedges tusb */
/* | MUSB_POWER_ENSUSPEND */
);
• 在Starterware中:
– 可以参考/index.php/StarterWare_USB中:
Note: The MSC Host class is by default configured for Hi-Speed DMA transfer
mode. For Full-Speed mode, define 'USB_MODE_FULLSPEED' in 'Drivers',
'USBLib' and 'Application' make files.
USB DMA/PIO 模式切换的方法
• 对于Linux/Android
– 可在menuconfig中配置,可参考
/index.php/Usbgeneralpage