Something About USB On-The-Go-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

Something About USB On-The-Go

简介: USB On-The-Go是什么     USB接口的设备现在是随处可见了,打印机、相机、手机、MP3等几乎目前能想到的消费类电子设备都具有USB接口。USB传输速率快,接口简单、支持热插拔的特性,使其在诸多接口中脱颖而出,大有统一天下之势。

USB On-The-Go是什么

    USB接口的设备现在是随处可见了,打印机、相机、手机、MP3等几乎目前能想到的消费类电子设备都具有USB接口。USB传输速率快,接口简单、支持热插拔的特性,使其在诸多接口中脱颖而出,大有统一天下之势。但传统的USB协议(USB2.0)限制了在这庞大的设备群中必须有一个HOST作为主子,通常是PC。两个外设之间的数据交换必须通过这个主子中转才能完成,效率较低,不大方便。随着嵌入式设备的爆炸式增长,两个USB设备之间直接进行数据交换的需求越来越强烈,USB On-The-Go就应运而生了。一些手机、PDA和移动设备的厂商在USB2.0的基础上合作开发了USB On-The-Go(OTG)。USB OTG首先解决了USB设备之间点对点的数据交换问题,摆脱了附庸于USB HOST的繁琐。举例来说,有了USB OTG,数码相机可以直接将照片通过打印机打印出来,而不必先将照片拷贝到PC上,再由PC控制打印机打印。

    USB OTG还有以下几个特性:

n         接口更小巧,有效减小了电子产品的体积

n         既能充当HOST又能用做Device,即DRD(Dual-role-devices)

n         OTG设备依然可以连接到PC上用做普通的外设,即POD(Peripheral-Only Device)

n         功耗更低,以延长采用电池供电的USB设备的待机时间

USB OTG接口

    传统的USB设备分为A和B两种。A接口的设备提供电源VBus,用做主子。B接口的设备在通讯过程中作为外设。无论是A接口、B接口还是各自的Mini接口,虽然外形有些差别,但使用的引脚都遵循以下定义:

    1脚:VCC电源

    2脚:D-差分负极

    3脚:D+差分正极

    4脚:GND接地

USB OTG增加了一个ID引脚,它的接口(Mini-AB)定义如下:

1脚:VBus

2脚:D-

3脚:D+

4脚:ID

5脚:GND

USB OTG通过ID信号线来识别是Mini A还是Mini B插头。为了使用方便,不同的接插件颜色不一样:Mini A采用白色,Mini B采用黑色,Mini AB采用灰色。

USB OTG协议简述

USB OTG中引入了两个新的协议, SRP(Session Request Protocol)和HNP(Host Negotiation Protocol),即会话请求协议和主机交流协议。

    SRP用于B设备向A设备请求建立会话和使用总线。OTG系统中的A设备一般采用电池供电,因此,OTG系统电源管理是非常重要的。为了节省OTG系统的功耗,OTG规定A设备在没有总线活动的时候,可以关掉VBus上的电源。这样,当一个B设备连接到A设备上之后,就要初始化SRP,并发送给A设备,请求A设备在VBus上提供电流支持,进而进行通信。OTG中,DRD既可作为A设备,也可作为B设备,因此DRD必须支持初始化SRP和响应SRP,POD只能作B设备,所以只能初始化SRP。B设备有两种方式向A设备发送请求,要求建立SRP:数据线脉冲(Data-Line Pulsing),一种是VBus脉冲(VBus Pulsing)。任何一个A设备只要求能响应一种SRP方式,而B设备必须能初始化两种SRP方式。这样就能保证,当B设备线初始化一种SRP,A设备无法响应时,B设备能用另一种SRP方式。

    HNP用于两个OTG设备互连时角色切换。为了实现HNP,A设备必须首先允许B设备通过OTG最新定义的Set_Feature命令来控制总线。一旦该请求被A设备接受,B设备就可以对总线进行控制。如果A设备想给B设备一个机会来控制总线,它将中止对总线的操作,将总线挂起。接着B设备就将D+拉低来终止以前的连接。接着,A设备激活位于D+处的上拉寄存器,完成这个转换。此后,B设备就将作为主控设备使用,而A设备将作为外围设备使用。同样,B设备也可以通过将总线挂起并激活D+上拉寄存器,A设备探测到总线上的变化后,清除D+上拉寄存器并重新作为主控设备使用。简而言之,两个OTG设备互连时,可以通过HNP协议协商主从地位。

WinCE下USB OTG驱动概述

    USB OTG的软件结构包括3部分:

u       OTG控制器的驱动:包括SRP和HNP

u       OTG的外设驱动:实现标准的USB类,来实现特定的USB外设功能

u       OTG系统HOST驱动:包括HOST驱动、操作系统支持软件和支持外设的类库。

    对于移植这一部分的驱动来说,需要注意ID侦测信号、VBUS的控制信号,这两个信号一般连接到MCU的GPIO上,根据硬件修改,而SRP和HNP一般由厂商完成,无需修改。我在调试这一部分时碰到的主要问题是,插入U盘后,OTG驱动检测到U盘插入,并提供了VBUS的供电,但却马上停止通信,无法正常使用U盘,后来经过进一步调试发现是MCU的OTG_VBUS的供电不足5V导致,不能用时的电压为4.6V左右,连接到5V后就没有问题了,目前USB OTG支持U盘,USB键鼠似乎是不能用的。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章
最新文章
相关文章