设备列举所要执行的工作之一,即是取得这些有关于设各的相关信息,即为USB描述符。那么什么是USB描述符呢?用户可以稍微想像一下,它就好像是USB外围设各的“履历表”或“身份证”一般,钜细靡遗地纪录着与外围设各相关的一切信息。因此,USB描述符掌 握了有关于设各的各种信息与相关的设置。
为了描述不同的数据,就须以不同类型的USB描述符来加以描述,如图1所示。虽然各个描述符都有不同的信息与数据,但所有的描述符都有一些共同的特性,也即是由如表1所列的格式所组成。其中,所有的Byte o是以字节为单位的描述符长度,而所有的Byte 1 则放置如表2和表3所列的描述符类型值,紧接着的其他字节,则随着不同的描述符而不同。如果该描述符的长度比规范上所定义的还要小,那么主机将会忽略。如果此大小又比规范所定义的还要大,那主机也会忽略所超出的字节,并在其回传的真正描述符长度的尾 端开始寻找下一个描述符。
图1 各种描述符的架构与类型
在图1的描述符中,设备描述符(device descriptor)、配置描述符(configurationdescriptor)、接口描述符(interface descriptor)以及端点描述符(endpoint descriptor)是必须具有的。而其他的描述符,如字符串描述符(strtng descriptor)、 数种不同的群组描述符(class descriptor)以及描述符(report descriptor)则可以根据不同的设备加以添加或删减。
表1 描述符的共同格式
表2 描述符类型值表一
表3 描述符类型值表二
各种描述符可以用如图2所示的描述符层来作更深动的叙述。上层的层是设各描述符。在设各描述符的bNumConfigurations 字段中,设置一个或多个下一层的配置描述符。在配置描述符的bNumlnterface字段中,设置一个或多个下一层的接口描述符。 在接口描述符的bNumEndpoints字段中,则设置一层的端点描述符。
因此,从设各描述符中,可以设置含有多少个配置描述符。而配置描述符,则可设置其包含了多少个接口描述符,当然从接口 描述符中,又可以再设置所含端点的数目。因此,在其中可以了解到仅有一个设各描述符而已,其余的描述符再依次设置。当然如图 2所示,每一层至少须设置一个描述符。
图2 USB描述符层图
而其中,USB设各仅能具有一个设各描述符。在设各描述符中涵盖了如设各所兼容的USB版本,用来加载适当驱动程序的VID/PID码 ,以及设各所能够具有的可能配置数目。这个配置数目能够用来表示有多少的配置描述符的分支将被遵循。在这配置描述符中设置了 许多的数值,例如,如果设各是总线供电,可设置所特定设计使用的电流量以及其所具有的配置数目。
当此设备在执行设各列举的程序时,主机会读取设各描述符,并且决定何种配置被使能。但每仅能有一个配置被使能。例如, 有一个设各可能具备高功率总线供电的配置,以及另一个是自我供电的配置方式·如果当此设各被接上具有主要的电源供应的主机后 ,设各驱动程序可以选择来使能这个高功率总线供电的设各。而此配置即可进一步地去使能此设各无须再连接至主要的电源供应器, 就可以获得电源。但是,如果此设各被连接至台式计算机,它也可被使能一种需要用户去接上电源供应点的第二种配置方式(自我供 电模式)。在这配置描述符中,不仅只限于设置电源的差异。每一种配置方式能够以同样的方式供电,以及流出相同的电流量,当然 也可具各不同的接口或端点的组合。然而,需注意的是,更改配置将会使在所有端点上的动作停止。虽然USB提供了这种便利性,可 是很少有设各具有超过一种配置。但对于如图3所举的复合式设各的例子就具有多种配置方式。
如果一个复合式设备具备了电话、视频会议OCD,以及传输数据的Modem功能,其所有设各可能的回报如图3所示的配置架构。因此 ,图4所示的是电话的配置,图5所示的是影像串流的配置,图6所示的是传输数据的配置,图7所示的是另一种传输数据(较高品质的语音信号)的配置。所以对于一个复合式的设备,就有需要多重的配置切换来满足各种功能需求。
设备口报所有可能的配置
图3 一个复合式设备可能回报的所有配置方式
图4 一个复合式设备的电话配置方式
如果用户具有一个包含了传真/扫描/打印机多功能(复合式设各)的事务机,那么其中第l个接口描述符就可用来描述传真机 设备的端点,第2个接口描述符就可用来描述打印机设各的端点,而第3个接口描述符就可用来描述扫描机设备的端点。那么在设备管理器的窗口下,就会呈现一个复合式设备的项目——USB Composite Device,女日图8所示。
影像串流
图5 一个复合式设备的影像串流配置方式
传输数据
图6 一个复合式设备的传输数据配置方式
传输数据(较高晶质的语音信号)
图7 一个复合式设备的高品质数据传输的配置方式
图8 复合式设备的显示
但须注意的是,不像配置描述符,接口描述符是没有被限制在同一时刻仅有一个被使能。也即是设各能够在同被使能一个或多个 接口描述符。接口描述符具有blnterfaceNumber与bAlternateSetting字段,前者可设置接口的数目,后者则允许接口能够在执行中 被加以更改设置。例如,有一个设各包含了2个接口,接口1与接口2。在接口1中,blnterlaceNumber设置为0,用来表示其为第1个接 口描述符,以及bAlternativeSetting(Alternative Setting,AS)为0。 此外,在接口2中,blnterfaceNum-ber设置为1,用来表 示其为第2个接口描述符,以及bAlternativeSetting为0(预设)。此时,用户能够使能另一个描述符,也将blnterfaceNumbe设置为 1来表示其为第2个接口。但这时候,会设置bAlternativeSetting为1(原先预设为0)来表示这个接口描述
符能够做切换的设置,并切至其他的接口描述符2。
当此配置被使能时,前2个具有bAlternativeSett ings等于0的接口描述符将被使用到。然而,在操作的时候,主机能够送出 SetInterface要求直接给切换设置(Alterna_tlve Setting,AS)1的接口1,以使能另一个接口描述符。而这2种配置的优点是,当 用户要更改与接口1相连接的端点设置时,若此时正通过接口0来传输数据,是不会影响到接口0的相关设置。
此外,每一个端点描述符用来设置传输的类型、方向、查询间格,以及每一个端点
大的封包大小值。但是用来作为控制传输的端点0是不会有其端点描述符的。
至于,在Windows的操作系统中,是如何观看到各种描述符的内容呢?用户可以利用USB网站www.usb.org中,所提供的测试工 具USBcomp.exe Ver 5.0版经解压缩所产生的HIDView.exe执行程序来加以测试。在这里,使用昆盈(Genius)USB鼠标来测试各项 结果。如图9所示,是利用其中的一个测试项目View Descriptor来测试的情况。至于,如何使用这个工具程序呢?稍后的HID章节中 ,会有详尽的介绍,在此,用户仅须知道其测试结果即可。
图9 通过HIDView.exe中的View Descriptors项目:冰测试备种描述符
当进人View Descriptor项目后,首先测试的是该鼠标设各的PID/VID码0x0458/0x0003。然后再依序以层(次目录)的方式,显示该设各的所有描述符。此外,还有一个测试项目Device Framework来测试各种描述符。
以下,将利用这两个测试项目来显示各种描述符,并加以介绍。
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。