USB host、usb device、USB OTG的判断
USB host、usb device、USB OTG的判断
经典博客
文章 | 链接 |
---|---|
OTG数据线与普通USB数据线有什么区别? | https://www.jb51.net/shouji/332556.html |
USB OTG简介、与普通USB线的区别 | https://blog.csdn.net/mao0514/article/details/46345861 |
linux usb驱动——host与device电路 | https://www.cnblogs.com/mahj/p/8480085.html |
开机自动打开USB调试模式和配置android为USB OTA模式 | https://blog.csdn.net/longkg/article/details/8626271 |
USB HOST与 USB OTG的区别及工作原理 | https://blog.csdn.net/rainbowbirds_aes/article/details/86557077 |
RK平台下USB_OTG提供的接口和返回的状态 | https://blog.csdn.net/wangubuntu/article/details/17723793 |
USB Host、USB Device和USB otg的理论简析 | https://blog.csdn.net/DIYfashaoyou/article/details/49895111 |
概念
host、device
usb协议中,设备连接是主从模式,具体定义自行了解usb协议,比较直观的认识,如下:
USB Host是指驱动过后,板子就可以连接USB接口连接的器件,读取和装载数据了。
USB Device是指驱动过后,板子可以当做一个USB移动设备,通过USB连接到电脑上,类似U盘
OTG
手机只有一个外接usb口,为了方便用户使用,如otg上插上一条可以支持U盘插入的线,手机就可以直接访问U盘的内容,不需要经过PC,手机给外设供电。若手机连上PC,PC上的usb口基本为host端,为方便使用,手机端作为device端比较方便合理。因此手机端的usb支持host、device模式的自动切换。OTG即是增加了host、device协商机制的usb口。
识别
host、device
host、device的电路设计不同,定义好角色后不可以转变。如果需要转变,就是下面介绍的OTG。
分别的电路图见上面博客介绍。在实际使用中,若无客制化需求,在linux开发中,驱动都是已经有的。
各自的角色在设备上电后,根据电路自行执行确定的角色驱动。
OTG
otg数据线设计比普通的usb数据线多了一条ID线。OTG连接如下:
OTG口就是手机端的充电口,usb口接入PC后连接U盘。
usb口接上设备后,在otg口端检测ID脚的电平高低,OTG决定作为host或device端。若id脚为低电平作为host端,对外供电;若id脚悬空,则作为device端。详见博文《https://blog.csdn.net/mao0514/article/details/46345861》。
实际开发中遇到的问题
rk3288平台与linux设备,两个设备连接,android端打开rndis。换了一个设备后,一样的连接,发现rndis开关为灰色,也即没有rndis设备被识别到。为什么?
硬件把另外一端的usb连接线的DET脚电平拉高供电,就能正常使用。
分析OTG的定义,此处otg端作为了device端。从android设备命令查看:
cat /sys/bus/platform/drivers/usb20_otg/force_usb_mode
值为2,确实被作为device端了。这时通过命令
echo 1 > /sys/bus/platform/drivers/usb20_otg/force_usb_mode
把otg口设置为host端,rndis也无法识别,说明对端就是host端,host与host端是不能通信的。
总结
usb协议只能是host与device间通信。若不能通信,两端都是device或都是host。非OTG口是不能动态设置usb口为host端或者device端,一个确定的开发板,usb的角色由设计电路决定。按照usb协议定义的电气标准,通用usb驱动会自动适配usb驱动。
更多推荐
所有评论(0)