一种Linux下USB设备主从切换实现
一种Linux下USB设备主从切换实现 摘 要 USB协议是严格的主从协议,通讯过程中必须有一个做Host,一个做Device。本文阐述了一种在Linux下实现USB Host和Device身份切换的方法。
【关键词】USB OTG Host Device
1 引言
USB协议是严格的主从协议,通讯过程中规定通讯双方必须有一个做Host(比如PC),一个做Device(比如U盘)。但是有些设备可能会希望同时具有两种身份,在某个时刻做Host,另外一个时刻做Device,于是USB IF官方制定了OTG协议,规定两个都支持OTG协议的USB设备可以动态地根据需要进行主从切换。但是真正支持OTG协议的设备并没有流行起来,原因应该有如下:
(1)OTG协议实现要复杂些,而实际应用需求不强,市面上真正支持OTG协议的设备也很难找到,单方面支持OTG协议是没有用的,因此各大厂商没有动力推出OTG设备。
(2)USB协议规定Host要给Device供电,而大部分USB设备都是便携设备,对另外一个USB设备供电能力不足。
既然真正支持OTG协议的设备几乎难觅,那么为什么目前市面上很多的音视频播放器或平板电脑都号称支持OTG呢?其实这些设备并没有真正实现OTG协议(包括HNP协议和SRP协议),而只是通过USB线上ID Pin的状态来确立自己究竟是做主设备还是做从设备,一旦身份确认,在通讯过程中是无法动态切换的,所以严格来说这只是一种伪OTG设备。本文将讨论的就是Linux下这种情况的一种具体实现方法。
2 Linux下主从切换方案设计
Linux下该方案总体设计思路如图1: