龙源期刊网 http://www.qikan.com.cn
一种Linux下USB设备主从切换的实现
作者:侯景昆
来源:《电子技术与软件工程》2013年第22期
摘 要 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:
首先,该方案在内核空间实现一个名为umonitor.ko的驱动程序,该驱动负责侦测USB接口上的变化,判断是否有USB连线,以及是做主设备还是从设备等核心检测工作。如果判断目前是做USB Host,则发出“A_IN”的UEVENT消息;如果判断是做USB Device,则发出“B_IN”的UEVENT消息。