网站大量收购独家精品文档,联系QQ:2885784924

一种Linux下USB设备主从切换实现.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一种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: 首先,该方案在内核空间实现一个名为umonitor.ko的驱动程序,该驱动负责侦测USB接口上的变化,判断是否有USB连线,以及是做主设备还是从设备等核心检测工作。如果判断目前是做USB Host,则发出“A_IN”的UEVENT消息;如果判断是做USB Device,则发出“B_IN”的UEVENT消息。 用户空间会有一个名为Umonitord的进程来监听内核的UEVENT消息,如果收到“A_IN”消息,则加载USB Host Controller驱动。USB Host Controller驱动因控制器不同而不一样,比如有ehci驱动或xhci驱动等,上图统一命名为uhc.ko。 同样的,如果Umonitord收到“B_IN”消息,则加载USB Device Controller驱动,该驱动在上图中命名为udc.ko。驱动一旦加载,就执行硬件初始化,并向内核注册,进一步触发进入到设备的枚举通讯流程。 当USB线拔出时,umonitor.ko驱动同样会检测到USB口上的变化(Vbus或ID pin的状态变化),并进而发出“A_OUT”或“B_OUT”消息,由用户空间的Umonitord进程接收到后执行卸载对应驱动的操作。 3 USB Monitor驱动检测流程 前面讲到umonitor.ko驱动完成了核心的插拔判断和主从身份识别的工作,图2是其具体实现流程: 首先如果一个USB设备要实现Host和Device两种身份,它必须在设备接口上采用5 Pin (包括ID pin)的USB接口,而不能采用无ID pin的4 Pin接口(比如PC上常见的Standard A口)。 需要实现主从切换的USB设备,一般会采用5 Pin的mini-AB型插座。图3中左边是USB设备作Host时需要采用的连线,右边是做Device时需要采用的连线(如连接PC)。没有插入连接线时,ID pin默认处于上拉状态,电平状态为1,当做Host时,连接线的ID pin会下拉到地,电平状态为0;当做Device的时候,连接线的ID pin会维持上拉,电平状态为1。主从判断流程中,最关键的一步就是先通过ID pin的状态来确立USB设备的主从判断路径。 当ID pin状态为0时,Vbus上5V供电,此时如果有USB设备插入,会把Dp或Dm Pin执行上拉操作,检测程序通过Dp和Dm上的电平状态判断到有USB设备插入,确立Host身份,发出A_IN消息。 当ID pin状态为1时,Vbus上先断开5V供电,此时如果有通过USB线连接到USB主机端或充电器,Vbus上会依然处于有电状态,检测程序判断确立Device身份,发出B_IN消息。 A_IN消息发出后,USB控制器正式进入Host工作角色,此时如果发生拔线,则ID pin状态会跳变为1,umonitor.ko驱动检测到后发出A_OUT消息,进入下一次检测循环。同样地,B_IN消息发出后,USB控制器进入Device工作角色,此时发生拔

您可能关注的文档

文档评论(0)

docman126 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:7042123103000003

1亿VIP精品文档

相关文档