我们经常使用USB接口 连接U盘或移动硬盘等。但是,知道USB HOST和USB OTG的却不多,现在分享一下这方面的知识,便于以后用到这些设备时知道它们的区别和使用方法。USB设备分为HOST(主设备)和SLAVE(从设备),只有当一台HOST与一台SLAVE连接时才能实现数据的传输。USB HOST是指主机,USB OTG设备既能做主机,又能做设备。OTG技术就是实现在没有Host的情况下,实现从设备间的数据传送。
当OTG插到电脑上时,OTG的角色就是连接电脑的device(读卡器),也就是SLAVE(从设备);当USB/SD device插到OTG上,OTG的角色就是HOST(主机)。有些手机也经常用到OTG功能。
当设备上的USB HOST接口不够用的时候,能把USB OTG接口当HOST用吗?答案是可以的,但需要修改软件,这里拿TQ335X_coreBv1开发板为例,将OTG接口修改为host接口功能。
1.修改源码板级信息文件:arch/arm/mach-omap2/board-tq335x_coreb_v1.c
2.搜索335x初始化函数:跟踪am335x_evm_init()函数
3.在函数内找到USB初始化:usb_musb_init(&musb_board_data);
4.再搜索追踪“musb_board_data”:
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, .power = 500, .instances = 1, };成员mode内,低4位代表USB0的模式,高4位代表USB1的模式,这里代表默认USB0做OTG模式,USB1做HOST模式;如果需要将USB0修改成HOST模式则修改mode成员即可:.mode = (MUSB_HOST << 4) |MUSB_HOST