浏览人次:【5260】
USB协会于2000年推出USB 2.0规范,将USB的传输速度由Full speed的12 Mbps提高到High speed的480 Mbps,使得USB得以将传输速度大幅提升后,又于2001年底推出USB OTG的技术,提供USB设备间可以相连的规范。
USB OTG发展历程
由于USB在一开始便被定位在计算机与周边间相连接的一个接口,因此USB协会在制定USB的基本架构时选择了主从式的架构,将较困难及较复杂的工作都交给主机(Host)端,也就是计算机。因此相对来说,USB装置设计的复杂度就降低许多,厂商也就愿意也较容易设计USB接口的装置。再加上USB具有即插即用的特性,使得USB装置的便利性大幅提升。另外Microsoft的大力支持,将许多USB设备的驱动程序内建在系统中,让用户可以真正享受到即插即用的便利性。例如USB键盘及鼠标,不需要使用厂商所提供的驱动程序,就可以使用键盘及鼠标的基本功能。
基于以上的几个原因,有越来越多的接口设备采用USB作为和计算机链接的接口。而其中有部分的USB设备面临到传输速度不足的问题,于是USB协会继USB 1.1后又制定USB 2.0的规范,以弥补USB 1.1在传输速度上的不足及一些原先未设想到的缺陷。在USB 2.0的规范中新增了高速传输(High speed transfer)的定义,传输速率为480 Mbps,大幅度的提升USB的传输速度。在USB 2.0规范加入后,USB接口在计算机周边的应用上已经可以说是相当完备了。
在越来越多的USB装置出现后,渐渐有部分装置想要脱离计算机的管束互相链接,例如数字相机和打印机的链接。但是USB旧有的架构限制了USB装置间链接的可能性。在USB的架构中说明了,必须有一端要当主机,所以当两个USB装置碰在一起,没有任何一端可以做主,因此便没有办法链接。对此,USB协会又推出了USB OTG的规范来弥补这样子的缺陷。USB OTG是USB On The Go的缩写,在这里「Go」是棋盘的意思,取其意为在棋盘上任一条经线和纬线都可以找到相连的点。这也意味着,USB协会期待在USB OTG规范之下,任两个符合规范的OTG装置都可以互相链接,而不需要透过计算机。
USB OTG简介
USB OTG并不是一个独立于USB 2.0存在的规范,所有在USB OTG中未提到的事项都必须以USB 2.0的规范为准。因此USB OTG存在的目的仅在于提供一个方式,让两个USB装置得以链接。USB OTG 1.0中提到一个具备双重角色装置(Dual-role device)的概念。就是说一个OTG的装置,可以当主机,也可以当设备端。如此一来,当两个OTG装置遇上的时候,就可以由其中一方当作主机,另一方当作设备端。就可以完全符合USB对两个装置相连的需求了。除此之外,OTG的装置还必须具备以下的特性:
●有限的主机功能;
●当设备端时必须支持全速传输;
●当主机端时至少要支持全速的USB设备,但不强制要求支持高速或是低速设备;
●可链接设备的列表;
●必须告知用户传输的状态;
●至少能提供8mA的电源给设备端;
●支持SRP(Session request protocol);
●支持HNP(Host negotiation protocol);
●仅能有一个且唯一的一个Mini-AB插座。(目前USB协会正在研议这一项限制,未来可能会有改变。)
以下针对上述项目作进一步的解释。
可链接设备的列表
当OTG装置成为主机端时,并没有办法真的支持所有的USB装置,因此在道义上OTG装置必须将其所支持的设备列表列出,以利消费者选择可连接的设备。
不允许未告知用户的错误状态或是动作
当OTG装置在使用时,必须将目前状态让用户知道,尤其是以下三种状况:在OTG装置成为主机端时,链接的设备不支持;B-device开始SRP的动作;B-device完成SRP的动作后,A-device未响应。
电源供应
当OTG装置成为主机端时,至少必须供应8mA的电源给设备端。OTG装置成为设备端时则不需供应电源,但也不能从Vbus汲取超过8mA的电源。
SRP
为达到省电的目的,当OTG装置成为主机端时,可以将Vbus的电源切断,以节省电源。SRP则是提供一个机制让设备端告知主机端重新提供电源,并且恢复在USB线路上的相关活动(例如传送SOF或是IN token),以利设备端传输数据。
HNP
当两个OTG装置相链接时,由于两个装置都有当主机端的能力,所以会先由连接两个装置的缆线(Mini-A plug to Mini-B plug)决定哪一个装置(连接Mini-A plug的装置)在一开始的时候扮演主机(A-device)的角色,另一装置则是扮演设备端(B-device)的角色。当两个装置经由缆线结合在一起之后,若是想要互换角色,则必须经由HNP所定义的讯号沟通过之后,才可以互换角色。
接头及插座
USB 2.0规定可以使用的接头及插座包括:Standard-A接头(plug)及插座(receptacle);Standard-B接头及插座;Mini-B接头及插座。OTG 1.0新增加的接头及插座:Mini-A接头及插座;Mini-AB插座。
连接线
USB 2.0规定可以使用的连接线包括:Standard-A接头对Standard-B接头;Standard-A接头对Mini-B接头;连到装置的Standard-A接头连接线,例如鼠标上面附的连接线。OTG 1.0新增加的连接线有:Mini-A接头对Standard-B接头;Mini-A接头对mini-B接头;直接连到装置的Mini-A接头连接线。
接头外观
OTG 1.0详细规定每一种接头的大小及形状甚至是颜色,例如Mini-A接头的外观是椭圆形,颜色是白色;Mini-B接头的外观是长方形,颜色是黑色,以利用户辨识。
转接头(Cable adapters)
OTG 1.0规定可以使用的转接头包括:Mini-A 插座对Standard-A接头;Standard-A 插座对Mini-A接头。
Hubs
OTG装置可以支持Hub。因为OTG相当强调是一个点对点的连接,因此当一个OTG装置接上Hub后,Hub本身的功能可以正常工作。但若想要在Hub之下再接其他的装置,就可能会有问题了,因为这样一来就不再只是一个点对点的链接了。但是在OTG的规范中并未明确规定不可以这样做。
A-device vs. B-device
USB OTG并没有规范额外的通讯协议来让两个OTG装置相链接。OTG所规范的是当两个OTG装置相链接时,可以由其中一装置来当主机,另一装置当设备。这和原来的计算机对周边的链接方式是一样的,只是在OTG的概念提出之前,所有的装置只能够当成是设备端。
当两个OTG装置相链接时,在USB原有的架构中并没有提供这两个装置决定谁当主机端的方式。因此OTG便新增加了Mini-AB的插座及Mini-A、Mini-B接头,以利OTG装置决定要当作主机端或是设备端。新增加的Mini-AB插座可以允许使用Mini-A及Mini-B两种接头插入。在Mini-A及Mini-B接头中均新增一个讯号ID,在Mini-A接头中ID必须连到USB的地线(GND)上,而在Mini-B接头中则必须是断路。
所以若是Mini-A接头插入OTG装置,ID就会是低电位,此时这个OTG装置被称为A-device,而且在初始的时候必须成为主机端。若是Mini-B接头插入OTG装置,则该OTG装置被称为B-device,并且要设定成为设备端。因此两个OTG装置的链接必须透过Mini-A接头对Mini-B接头的连接线,以便在一连上的时候决定哪一边作为主机端。当链接建立以后,这两个OTG装置可以藉由HNP的协议来转换主机/设备的角色。
SRP(Session request protocol)
因为大多数的OTG装置都以轻巧可以随身携带为诉求,因此为了达到省电的目的,OTG装置的主机端可以将Vbus的电源切断,以节省电源。但是在USB原有的架构中,并不允许设备端主动提出任何的要求,因此OTG便定义了SRP的协议,提供设备端主动要求开始作数据的传送的能力。例如:OTG数字相机链接OTG打印机时,假设此时打印机为主机端,且进入省电模式并将Vbus的电源切断。此时若是用户想要将数字相机上照片印出来,数字相机就可以透过SRP向打印机提出要传数据的需求,就不需要再对打印机作操作了。打印机在响应了来自数字相机的需求后,就可以开始向数字相机要数据来打印了,但是在传送数据的过程中,一切还是由主机端(打印机)来控制。
SRP中的「Session」是指在Vbus上的电压超过有效电压值(Session valid threshold)的期间。对A-device来说VA_VBUS_VLD必须落在2.0~0.8V之间,B-device VB_VBUS_VLD则必须落在4.0~0.8V之间。一个Session的结束则是由设备端(并不一定是B-device)来辨识,当Vbus上的电压小于0.8V时,就可以视为一个Session的结束。当上一个Session结束后,设备端才有权利再向主机端要求重新开始另一个Session。当然主机端也握有主动开始一个新的Session的权利。
《图一 SRP sequence of events》 |
HNP(Host negotiation protocol)
考虑以下的情形,当两个OTG装置(装置一和装置二)相链接时,假设装置一不支持装置二,装置二可以支持装置一。
A-device B-device
状况一 装置一 装置二 -- 告知用户不支持装置二
状况二 装置二 装置一 -- 可以正常工作
因此当用户把线接上装置后,只有一种情形可以正常工作,这样子会增加使用上的麻烦。因此,USB OTG又新增加了HNP的协议,让主机端的角色可以在两个OTG装置间转换。如此一来,在状况一中虽然装置一不支持装置二,但是装置一可以经由以下的步骤将主机的角色转让给装置二,让装置二来主导数据的传输。
由A-device--B-device
步骤一:A-device传送SetFeature(b_hnp_enable)的命令(setup command)给B-device,告诉B-device将要成为主机端。
步骤二:A-device进入待命(Suspend)模式(和省电模式不同,并不把Vbus的电源切断,只是停止在总线上动作(如传送SOF))。如图一中的事件。
步骤三:当B-device侦测到进入待命模式以后(5ms),就可以将提升电阻关掉,进入主机模式。对A-device来说,这相当于是一个B-device断线的状态。所幸HNP是由A-device主导,因此可以由A-device来区别这是断线还是B-device进入等待A-device响应的状态
步骤四:A-device由主机模式进入设备端模式,并且将提升电阻打开(
由B-device--A-device
步骤五:B-device停止在总线上的动作,进入待命模式。如图一中的事件。并且设定为设备端,将提升电阻打开。如附图一中的事件。
步骤六:当A-device侦测到进入待命模式后,会进入主机模式。如图一中的事件。若是A-device并没有要传输数据的话,则可以进入省电模式,切断Vbus的电源供应。若是A-device还要传送数据的话,就可以在USB Bus Reset(如图一中的事件)后开始传送数据。
《图二 HNP sequence of events》 |
结语
USB OTG提供了一个让两个USB装置链接的可能性,但是同时也提高了OTG装置的在设计上的复杂度。原本要由计算机做的事情,现在都要落在当主机端的OTG装置身上。因此,为了要对应不同的设备,就需要不同的驱动程序。原本USB装置的制造商只要熟悉自己的产品就可以了,在加入OTG的概念后,就必须要对想要链接的设备有一定的了解。例如想做OTG数字相机来打印照片,除了数字相机的技术外,也需要了解打印机的设定及使用,而打印机的种类繁多,因此想要支持所有的打印机,可以说是一个遥不可及的梦想。所幸USB协会努力的推动各种不同装置的标准。例如:人性化接口装置(HID Class)、打印机装置(Printer Class)、影像装置(Still Image Class)、大量储存装置(Mass Storage Class)...等。如此便能够使用相同数据格式,相同传输方式来传输数据。藉由这些不同装置类别的规范,就有机会大大简化在OTG装置上对驱动程序的需求。OTG装置只要能够支持某一个类别,就可以支持符合该类别的所有设备。
(作者为巨盛电子项目经理)
|