用软件方式将USB0强制设置为HOST工作模式,代码修改如下:
static struct omap_musb_board_data musb_board_data = {
.interface_type = MUSB_INTERFACE_ULPI,
/*
* mode[0:3] = USB0PORT's mode
* mode[4:7] = USB1PORT's mode
* AM335X beta EVM has USB0 in OTG mode and USB1 in host mode.
*/
/*.mode = (MUSB_HOST << 4) | MUSB_OTG,*/
.mode = (MUSB_HOST << 4) | MUSB_HOST,
.power = 500,
.instances = 1,
};
由于硬件限制,boot room启动时, 支持USB RNDIS模式升级,及USB0 OTG ID硬件必须为悬空。
现在硬件没有将USB0 的OTG ID引出到EVK板,没法通过插入U盘的方式,将OTG ID管脚连接到地。
现在需求:
1、USB0 OTG ID悬空,能实现Boot room usb rndis升级;
2、在Linux操作系统下,USB0作为HOST,能访问U盘。
现在调试发现:
1、当将USB0 OTG ID管脚接地,可以正常访问U盘。
在没插入U盘的情况下:
root@am335x-evm:~# cat /proc/driver/musb_hdrc.0
Status: MHDRC, Mode=Host (Power=e0, DevCtl=19) #####USB0 工作在A device模式下
OTG state: a_idle; inactive
Options: ?dma?, otg (peripheral+host), [eps=16]
Peripheral address: 00
Root port status: 00000100
CPPI: txcr=0 txsrc=0 txena=0; rxcr=0 rxsrc=280de80 rxena=0
2、如果USB0 OTG ID管脚接地,不识别访问U盘。
在没插入U盘的情况下:
root@am335x-evm:~# cat /proc/driver/musb_hdrc.0
Status: MHDRC, Mode=Host (Power=e0, DevCtl=99) ###USB0 工作在B Device下;
OTG state: a_idle; inactive
Options: ?dma?, otg (peripheral+host), [eps=16]
Peripheral address: 00
Root port status: 00000100
CPPI: txcr=0 txsrc=0 txena=0; rxcr发表=0 rxsrc=280de80 rxena=0
3、如果USB0 OTG ID悬空,强行通过命令,将USB0改为A device,发现立即变回B device;
感觉USB 控制器有firmware在一直监控OTG ID。
请问有没有软件方法,设置OTG ID 接地状态,这样,我就可以不需要修改硬件,将USB0 OTG ID管脚拉到EVK底板上。
请求FAE帮忙指导一下,谢谢。
Jian Zhou:
请问有参考过USB原理图设计的规范么:
http://processors.wiki.ti.com/index.php/AM335x_Schematic_Checklist#USB
Yaoming Qin:
首先有点,ID脚不应该是悬空的,而是应该接到USB接插件的ID脚上的。
在linux中,您最开始提到的修改的方法,可以把usb固定在host模式下,这个修改,对于rndis烧写没有影响。