首页 > 代码库 > 详述USB OTG发展及协议标准
详述USB OTG发展及协议标准
USB On-The-Go 扩大了USB 的应用领域,将USB 从传统的PC 与外设通讯的模式,扩展到移动电子和嵌入式领域中,抛开主机PC,实现通常的外设与外设之间点对点(Point to Point)的数据传输模式。
1 什么是USB On-The-Go
我们先来回顾一下通用串行总线(Universal Serial Bus,简称为USB)发展的历史:
i)1994 年11 月,以Intel 为首的7 家公司(Intel、Compaq、Microsoft、IBM、DEC、Northern Telecom 和NEC)推出了USB 协议的第一个草案,USB 作为一种新型的串行总线,揭开了新一轮的USB 总线的革命,但这时,USB 并不为计算机技术人员所熟知;
ii)1996 年2 月,USB 协议规范1.0 版本发布,版权属于Compaq、Intel、Microsoft和NEC 等4 家公司,并同意任何人可免费使用。自此,USB 开始逐渐被广大技术人员和用户所认可,并逐渐开始成为PC 主板上的标准接口;
iii)1998 年10 月,USB 1.1 版本发布,集中修订了USB 1.0 中的问题,并进一步突出了USB 的优势。到目前,USB 1.1 仍是开发USB 低速(1.5Mbps,Low-Speed)和全速(12Mbps,Full-Speed)设备的标准版本。USB 的低功耗、速度高、成本低、支持即插即用和维护方便等优势更加稳定,USB 开始成为鼠标、键盘、游戏杆、打印机、光驱、硬盘、显示器和数码相机等几乎各种PC 外设与PC 连接的标准协议之一。各种USB 的外设产品如雨后春笋般出现,如USB Flash 读卡器、USB 移动硬盘、USB 数码相机、USB 键盘等,几乎所有的PC 外设都有相应的USB 接口的产品。一时间,USB 成为了最为流行的PC 接口标准,嵌入式软硬件工程师也将USB 应用到自己的设计之中;
iv)2000 年4 月,Compaq、HP、Intel、Lucent、Microsoft、NEC 和Philips 等7 家公司联合发布USB 2.0 协议规范版本。新版本最大的变化就是将USB 的总线速度一下子提高到了480Mbps,即开始支持高速设备(High-Speed)。由此,USB 翻开了新的一页,彻底打破了USB 应用在视频等高速传输领域中的速度瓶颈,大大扩展了USB 应用领域。从低速的鼠标、键盘,到全速的硬盘,再到高速的视频传输,USB 几乎无所不能,可以应用到任何一种PC 外设中。USB 取代串口、并口等传统PC 接口只是个时间问题了。
从问世,到协议规范2.0 版本,USB 不断在自我完善,走向成熟。从普通计算机用户,计算机工程师,到硬件芯片生产厂商,都已经完全认可了USB。厂商对于USB 的硬件和软件支持的也越来越完备,现在开发一个USB 外设产品,所需要投入的成本和时间大大降低了,几年前是没有办法做到这一点的。但是,随着USB 应用领域的逐渐扩大,人们对于USB的期望也越来越高,希望USB 能应用在各种计算机领域中,尤其是在移动通讯领域中,希望能通过PDA 等移动设备来直接和USB 外设通信,使得USB 能应用在没有PC 的领域中。非PC 应用领域? 这正是USB 一个致命的弱点。USB 的拓扑结构中居于核心地位的是Host,任何一次USB 的数据传输都必须由Host 来发起和控制,所有的USB 外设都只能和Host 建立连接,任何两个外设之间或是两个Host 之间无法直接通信。而目前,大量的扮演Host 角色的是个人电脑PC。因此,“如何将USB 应用到嵌入式领域?如何实现USB 点对点的通讯?”等问题,开始进入了USB 开发者的讨论议程。正是在这种新的需求之下,USB On-The-Go 应运而生。2001 年12 月,USB On-The-Go 版本协议1.0 正式发布(简写为OTG 1.0)。
USB On-The-Go,顾名思义,是USB 应用在便携式移动设备领域中,因此,我们姑且将其翻译为“便携式USB”(或者“移动USB”),简记成USB OTG。OTG 1.0 作为USB 2.0的补充协议,基本上符合USB 2.0 规范。但是,有所不同的是符合USB OTG 的设备完全抛开了PC,既可以作为Host,也可以作为外设,而与另一个OTG 设备直接实现点对点(Pear to Pear)通讯。因此,这类OTG 设备也被成为是双角色设备(Dual-Role Device,简称为DRD),并能够根据接入设备的特性和数据传输过程中的情况,自动切换为Host 或是外设。例如,一个OTG 数码相机可以直接与OTG 打印机相连,打印图片;两个OTG MP3 播放器可以之间连在一起,实现音乐文件的共享。。。需要注意的是,USB OTG 设备保留了作为普通USB 2.0 外设的功能,可以作为外设直接连接到PC Host 上。
2 USB OTG 设备的功能
USB OTG 定义了两种设备类型:双角色设备DRD 和单外部设备(Peripheral-OnlyDevice,简称为POD)。DRD 具备Host 和外设的两种功能,POD 基本与外设功能近似,因此,我们这里着重讨论DRD。
要成为一个USB Host,必须具有存储外设驱动程序、提供足够的USB 端口电流和A型Host 插座的能力。而其所要实现的基本功能包括3 部分:
i) 管理和控制总线,包括提供USB 端口电源管理;
ii)检测外设的接入和断开,枚举(Enumerate)设备;
iii)初始化总线上所有的数据包传输等活动。
同样,USB 外设也具有特定的功能:
i) 响应USB Host 的命令,执行又Host 发起的发送设备描述符、传送数据等活动;
ii) 远程唤醒处于挂起(Suspend)状态的主机;
iii) 提供自供电(Self-Powered)电源(如果所需电流大于总线能提供的限额,选此项)。
DRD 具有USB Host 和外设的双重功能,但是,正因为具有了双重的角色任务,DRD又必须有切换角色等新的任务和功能,因此,我们可以用(1)式来简单的定义OTG DRD的功能:
DRD = Host + Peripheral + OtherLL(1)
由(1)式可知,完整的USB OTG DRD 还必须具有除了通常的Host 和外设之外的一些功能,当然DRD 的Host 功能是有限的,不要求完全实现PC Host 的功能,不过,这正符合了嵌入式领域中对USB 灵活性和便携性的要求:
i)作为外设,支持12Mbps 的全速模式(或者是480Mbps 的高速模式);
ii)作为Host,也支持全速模式(或者是低速和高速模式);
iii)产生目标外设列表(Targeted Peripheral List,简写为TPL);
iv)会话请求协议(Session Request Protocol,简写为SRP);
v)主机交流协议(Host Negotiation Protocol,简写为HNP);
vi)有且仅有1 个Mini-AB 插座;
vii)至少为总线提供8mA 的电流;
viii)能及时将总线活动状态通知给设备用户。
3 USB OTG 体系的软件描述
3.1 OTG 配置描述符
在OTG 系统处于枚举过程时,A 设备就会发送GetDescriptor 命令给B 设备(开始处于外设状态的设备),要求B 设备发送OTG 配置描述符。配置描述符包括3 个字节,分别是bLength、bDescriptorType 和bmAttributes。
3.2 会话请求协议(Session Request Protocol,简写为SRP)
SRP 用于B 设备向A 设备请求建立会话和使用总线。
一般,OTG 系统中的A 设备采用的是电池供电,因为这些设备是便携式和可移动的,这就决定了,OTG 系统电源管理是非常重要的一个专题。因此,为了节省OTG 系统的电源开支,OTG 2.0 规定A 设备在没有总线活动的时候,可以关掉VBus 上的电源。这样,当一个B 设备连接到A 设备上之后,就要初始化SRP,并发送给A 设备,请求A 设备在VBus上提供电流支持,进而进行通信。OTG 中,DRD 可以作为A 设备,也可以作为B 设备,因此,DRD 必须支持初始化SRP 和响应SRP;POD 只能作B 设备,所以,只能初始化SRP。SRP 中,B 设备有两种方式可以向A 设备发送请求,要求建立SRP:一种是数据线脉冲(Data-Line Pulsing),一种是VBus 脉冲(VBus Pulsing)。具体的脉冲方法在OTG 2.0 中有详细的说明。任何一个A 设备只要求能响应一种SRP 方式,而B 设备必须能初始化两种SRP方式。这样,当B 设备先初始化一种SRP,而A 设备无法响应是,则B 设备就要用另一种SRP 方式。
3.3 主机交流协议(Host Negotiation Protocol,简写为HNP)
HNP 用于初始B 设备与初始A 设备之间切换Host 角色。
OTG DRD 具有Mini AB 型插座,因此,DRD 既可作为Host,也可以作为外设。而在某一个OTG 连接中,这个DRD 到底是作Host(即A 设备),还是作外设(即B 设备),则要根据接入的另一个OTG 设备来定。如果,接入的是OTG POD,那么,毫无疑问,这个DRD 肯定是作A 设备。但,如果接入的是另一个DRD,那么这两个DRD 之间,就可以HNP来随时切换Host 角色。
一次完整的HNP 流程是这样的:B 设备希望控制总线,成为Host;在A 设备发送了SetFeature 命令后,B 设备就可以来请求控制总线;A 设备挂起总线,通知B 设备可以控制总线;B 设备发送信号,断开与A 设备的连接;A 设备启动D+信号线上的上拉电阻,将D+置高;这样,A 设备就开始作为外设,放弃了总线的控制权,B 设备成为了Host;在B设备完成了对总线的控制,就需要上拉其上的D+电阻,放弃总线控制权。当然,这一系列的HNP 活动,不仅仅是通过信号线上的电平变化来实现的。电平变化只是一种标志,真正内部对总线的控制权的变化,则要通过软件来实现。
3.4 OTG 的软件结构
OTG 的软件结构包括3 部分:
i) OTG 系统硬件驱动:包括SRP 和HNP;
ii) OTG 系统外设软件:实现标准的USB 类,来实现特定的USB 外设功能;
iii)OTG 系统Host 软件:包括Host 驱动程序、操作系统支持软件、支持外设的类库。
详述USB OTG发展及协议标准