基于USB3.0的设备自定义请求实现方法
2013-04-29陈锴
陈锴
摘要: 该文主要讨论了一种新方法,实现了主机通过一种新的自定义设备请求,获取存储于USB3.0设备固件中详细的UI信息。从而可使OEM/IHV厂商不必再随其生产的USB3.0设备分发任何特定的安装媒体。
关键词: USB3.0;设备自定义;固件;UI;设备请求
中图分类号:TP31 文献标识码:A 文章编号:1009-3044(2013)07-1648-03
1 背景
USB(Universal Serial Bus)即通用串行总线,是一种灵活,快速的总线接口。USB技术的出现让IT产业的接口产生了巨大的革命。其主要特征是低成本,同步,高速,双向,高速,可即时连接,是对当今计算机体系结构的一种工业标准扩展,因此支持USB的设备现在已经十分广泛。主机通过USB总线对设备的操作,完成对其连接,配置,使用和断开等功能。随着硬件设备的不断发展进步,更高的传输速度和更大的带宽越来越被人们所重视,由此各界对USB 3.0的需求也愈来愈高。2008年11月发行的USB 3.0通用串行总线( Universal Serial Bus)是最新规范,该规范由英特尔等大公司发起,其最高传输速度可达5 Gb/ s,并且兼容USB 2. 0 及以下接口标准。
2 设备请求介绍
设备请求是USB3.0的重要组成部分。设备的信息和功能都存在它的设备描述符(descriptor)中,要想得到这些信息,或是修改这些信息,就要对描述符进行读写操作,完成这些读写的行为称为设备请求。
设备请求包括标准请求、设备类请求和厂商自定义请求。
1) 标准请求:USB3.0协议定义了一系列所有USB3.0设备都必须支持的请求。它们用于配置一个设备、控制USB接口的状态,还有其他特征。
2) 设备类请求:每个USB3.0设备类都可以定义类的特定请求,除了集线器设备之外,这些请求由设备类的协议说明文档定义,它们并不包含在USB3.0协议的主体部分。
3) 厂商自定义请求:一个USB3.0设备可以支持设备厂商自定义的请求,这些请求和设备厂商对设备的具体实现相关。厂商自定义的请求只有设备和主机端对应的设备驱动程序知道。
所有的设备在设备的缺省控制通道处对主机的请求发出响应。这些请求是通过使用控制传输来发送的,请求及请求的参数通过Setup阶段的数据包发向设备,主机负责设置Setup数据包内的每个域的值,每个Setup包有8个字节,见表1。
3 设备自定义请求的实现
高层主机的应用程序和操作系统厂商,会根据实际应用需要对设备定义一些特定的设备请求与响应。而底层的硬件制造商(OEMs)和独立硬件商(IHVs),即设备生产和发行方,会对主机软件和操作系统的这些额外的自定义设备请求提供支持。虽然USB3.0协议主体中规范了多种类型的设备请求,但并没有对上述的主机自定义请求进行详细说明。
一般情况下设备安装过程为: USB3.0设备与主机连接后,用户需要安装OEM/IHV提供的光盘或应用程序。安装程序通常包括设备特定的设置和资源,如下所示:
A.设备驱动
B.用户界面(UI),包含图标,字体,图片,标志,帮助页面,通用资源定位符(URL)。
C.详细的说明,设置和资源定位信息文件。
在安装过程中,操作系统通过设备提供的USB标准类和子类信息码,来判断此设备是否为通用设备,或可用默认驱动来控制此设备。通常情况下大部分USB3.0设备都可使用系统默认驱动控制,所以用户就可不必再安装OEM/IHV提供驱动。
随着USB3.0设备大范围的普及,OEM/IHV厂商们更希望操作系统能够自行加载设备某些自定义信息(如,图标,字体,图片,标志,帮助页面,通用资源定位符(URL)),这样即使用户不用安裝任何额外的程序或驱动,操作系统也能为设备提供恰当的UI和信息。如果解决了这个问题,将大大简化了设备安装过程,提高了设备的易用性。同样,也降低了OEM/IHV厂商的成本。
本文根据这个问题,提出一种解决方案。即把设备自定义的UI信息存储于USB3.0设备固件中。当主机与设备通信时,设备响应主机的请求,把设备的UI,配置信息传输给主机。设备使用系统默认驱动时,不用安装厂商提供的任何文件,也能完成对设备的正确配置。
如图1示例系统,设备自定义的设置和资源信息都存储于固件中。操作系统或应用程序可以通过主机自定义请求读取这些信息,从而为用户提供恰当的UI和设备信息。
系统由主机与设备组成,两部分通过USB总线相连。主机一般为PC或其他类型计算机。主机中具有一个或多个处理器,存储设备(如内存,硬盘等)。操作系统如(Windows)和各种应用程序会存储于硬盘和内存中,通过处理器运行。主机中还包含操作系统所支持的USB驱动和端口。主机与设备的通信过程为:高层的应用程序对操作系统的系统服务进行操作, 然后由系统服务配置低层的通信细节后完成通信,最后把设备返回的信息反馈给应用程序。
图1中的设备可以是硬盘,闪存,数码相机,鼠标等等。设备中也包含了一个或多个处理器,各种类型的存储器和USB总线端口。其中存储器存储了控制设备与主机通信的控制逻辑,并可由处理器运算后执行。
设备通过USB总线,对主机的请求发出响应。这些请求是通过使用控制传输来发送的,请求及请求的参数通过Setup包发向设备。设备接收到Setup数据包后,响应主机返回数据。
图1设备中定义了一种新的设备自定义描述符-扩展属性描述符。描述符中存储着设备自定义的UI信息。这些UI信息的格式是由操作系统厂商所定义的。OEM/IHV厂商依据规范格式可把UI信息(如:图标,字体,标志,URL等)写入扩展属性描述符,并存储于设备存储器,即固件中。
此系统可以实现:设备使用前,主机发送自定义请求给设备,命令返回相应的設备自定义UI信息,然后设备响应主机请求返回数据。最后主机根据设备返回的UI信息配置操作系统,提供相应的UI及组件。
举例说明:普通数码摄像机和PC相连后,Windows系统通常只会识别为逻辑磁盘设备(只显示默认卷标),且只提供磁盘存储设备的UI。但是,如果设备加入了扩展属性描述符,而且经过主机自定义请求后获得此描述符,操作系统就可以根据描述符中的数据获得有关数码相机的详细信息。这些信息可使Windows为数码相机提供更加恰当的标识(如,卷标显示Digital Camera)和相机相关的UI,而不仅仅只当成磁盘存储设备。
本文所提出的方法,即为各式USB3.0设备定义了可嵌入在USB3.0标准协议中,一种新的设备请求-主机自定义设备请求。此主机自定义设备请求可由操作系统厂商或应用程序规范,设备厂商能够从底层支持这些请求。
置如下:
持主机的自定义请求,从而不会进行下一步操作。反之验证无误,则主机识别出设备支持自定义设备请求。读取bVendorCode域中的设备自定义请求码。随后,主机根据此设备自定义请求码,配置下一阶段的主机自定义请求。主机自定义请求中各个域的含义和数值,不再遵循与表1中的标准设备请求的规范。其实际含义由系统厂商所自定义。
从而接下来的主机控制传输中各个域值设置成:
bmRequestType=1100001,表示此次请求是设备到主机,厂商自定义,接受者为设备的请求类型。
bRequest=bVendorCode域中相应的值,指明主机所要读取的设备自定义描述符。
wValue和wIndex域中根据不同请求含义不同。
wLength域表示有多少字节的数据返回。
由此,对主机自定义请求配置完毕后,通过USB3.0总线发送到设备,随后设备响应主机自定义请求,返回设备固件中所存储的自定义描述符。如图1所搭建系统中的扩展属性描述表。从而操作系统获取描述表中有关此设备的UI信息。
4 小结
对比于传统的USB3.0设备使用前,用户必须使用OEM/IHV厂商为USB3.0设备所提供的特定安装程序,才能提供恰当的UI信息而言。该文所论述的方法在兼容USB3.0协议基础上。通过实现一种新的主机自定义设备请求,直接从USB3.0设备中获取其自定义的UI信息配置操作系统或程序。从而OEM/IHV厂商,只需在USB3.0设备中加入对应于主机自定义设备请求的自定义描述符,就可使用户无需安装任何文件,系统也能为其提供相应的UI,提高了USB3.0设备的灵活性,易用性。为OEM/IHV厂商提供了方便,降低了成本。
参考文献:
[1] Intel,Microsoft,NEC,Universal Serial Bus Specification 3.0.2008-11.
[2] Suguru Ishii.Peripheral Device And Method Of Connecting Peripheral Device With Host Device,United States Patent Application,2011.
[3] Moore,Terrill M. Usb Hub Supporting Unequal Numbers Of High-Speed And Super-Speed Ports, United States Patent Application,2011.
[4] ADERSON Don .USB系统体系,2007.