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键鼠似乎是不能用的。