TIwilliam hill官网
直播中

周雯葭

7年用户 152经验值
私信 关注
[问答]

【求助】AM3352 USB0 设置 HOST,OTG ID能用软件方式设置成低电平吗?

用软件方式将USB0强制设置为HOST工作模式,代码修改如下:
static struct omap_mu***_board_data mu***_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 u*** rndis升级;
2、在Linux操作系统下,USB0作为HOST,能访问U盘。

现在调试发现:
1、当将USB0 OTG ID管脚接地,可以正常访问U盘。
在没插入U盘的情况下:
root@am335x-evm:~# cat /proc/driver/mu***_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/mu***_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帮忙指导一下,谢谢。

回帖(1)

周雯葭

2018-6-4 10:48:25
根据《AM335x Sitara™ Processors Technical Reference Manual.pdf》描述,USB控制器通过设置USB0MODE寄存器实现软件控制OTG ID的电平,选择A Ddevice或B Device
The USB controller assumes the role of a host when the USBx_ID pin state is grounded or USB Mode
Register[iddig=bit8] is cleared to 0 (provided that iddig_mux, which is bit7 of USBnMODE is also set to 1)
by the user application prior to the controller goes into session. When the USB controller go into session,
application/firmware sets the DEVCTL[SESSION] bit to 1, it will assume the role of a host.
具体修改代码如下:
ti81xx_mu***_set_mode函数,增加下面代码:
if (mu***_mode == MUSB_HOST) [
regval = mu***_readl(reg_base, USB_MODE_REG);
regval &= ~USBMODE_USBID_HIGH;
if (u***id_sw_ctrl && cpu_is_ti816x())
regval |= USBMODE_USBID_MUXSEL;
if(mu***->id == 0)
[
regval = 0x080; //IDDIG=0,IDDIG_MUX=1 增加代码,配置为A Device
]
通过上面配置,可以识别U盘,并可以操作。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分