USB设备的属性通过一组描述符来反映它们,这些描述符是具有一定格式的数据结构,主机软件可通过GET_DESCRIPTOR请求获取这些描述符。每一个描述符的第一个字节表明本描述符的长度,其后是一个字节的描述符类型信息。如果描述符之中的长度域值少于本说明的定义,此描述符被认为非法,不能被主机接收;如果返回的描述符中的长度域值大于本说明定义,则过长部分被忽略。USB设备描述符类型如表所示:
USB设备描述符类型
类型 说明
设备 描述整个设备
配置 描述设备的一个配置
接口 描述配置中的一个接口
端点 描述接口中的一个端点
串 一个Unicode串,该串用自然语言描述设备、配置、接口和端点
设备描述符是表征对该设备及所有设备配置起全程作用的信息。在设备枚举时,主机使用GET_DESCRIPTOR控制指令直接从设备端点0读取该描述符。一个USB设备只能有一个设备描述符。
设备描述符
偏移量 字段名称 字段大小 字段 值说明
0 bLength 1B 数字 描述符的大小=12H
1 bDescriptorType 1B 常数 设备描述符类型=01H
2 bcdUSB 2B BCD USB规划发布号
4 bDeviceClass 1B 类型 类型代码
5 bDeviceSubClass 1B 子类型 子类型代码
6 bDeviceProtocol 1B 协议 协议代码
7 bMaxPacketSize0 1B 数字 端点0最大分组大小
8 idVendor 2B ID 供应商ID
10 idProduct 2B ID 产品ID
12 bcdDevice 2B BCD 设备出厂编号
14 iManuafacturer 1B 索引 厂商字符串索引
15 iProduct 1B 索引 产品字符串索引
16 iSeriaNumber 1B 索引 设备序列号字符串索引
17 bNumconfiguration 1B 索引 可能的配置数
配置描述符用于表征设备能实现的各种配置方式。表给出了设备配置描述符的数据结构。每个设备有一个或多个配置描述符,每个配置描述符给出了此配置下的接口数,每个接口可独立操作。当主机发出请求获取配置描述符时,所有相关接口与端点的描述符都被返回。一个USB设备有一个或多个配置,每个配置能有一个或多个接口。而每个接口又有0个或多个端点。一个端点不会在一个配置下的接口之间共享,除非端点被同一个接口的不同设置使用。在不同配置下的端点,可无此限制。一个配置设置好后,设备可支持对配置的有限调整,如果一个接口有备选设置,在配置好后可选择不同的设置。
配置描述符
偏移 字段名称 字段大小 字段值 说明
0 bLength 1B 数字 描述符大小=09H
1 bDescriptor 1B 常数 配置描述符类型=02H
2 wTotalLength 2B 数字 返回整个数据的长度,
包括该配置所返回的所有描述符(配置、接口、端点和类型或供应商)的联合长度
4 bNumInterfaces 1B 数字 配置所支持的接口参数
5 bConfiguration 1B 数字 作为Set Configuration的一个
参数选择配置
6 iConfiguration 1B 数字 用于描述该配置字符串描述符
的索引
7 bmAttributes 1B 位图 配置特性
D7:总线供电
D6:自供电
D5:远程唤醒
D4…0:保留(复位为0)
8 MaxPower 1B mA 当设备完全可操作时,在这种特
定配置下,总线供电的USB设
备的最大消耗电流(以2mA为
单位)
接口描述符用于表征设备提供的接口功能,每个配置有一个或多个接口描述符。接口描述符总是作为配置描述符的一部分被返回,如果一个配置支持不止一个接口,端点的描述符会跟在接口描述符后被返回。接口描述符不可直接用SET_DESCRIPTOR和GET_DESCRIPTOR请求访问。如果一个接口包含备选设置,则端点或它们的特性在设备配置后可以改变。一个接口的默认配置总是可选设置。SET_INTERFACE与GET_INTERFACE请求用来选择与返回选择了的接口设置。可选的接口设置部分的设备配置能在其它接口进行操作的情况下改变。如果一个配置对于它的一个或多个接口有备选设置,每一设置包括一个独立接口描述符和相关端点。如果一个设备只支持单个接口,并且此接口有两个可选设置,配置描述符返回以后会紧跟着返回bInterfaceNumber与bAlternateSetting域皆为。的第一个设置的接口描述符及相关的端点描述符,而随后是另一个设置接口描述符与端点描述符。第二个接口描述符的bInterfaceNumber域也应为。,但bAltenratesetting域应为1。如果一个接口仅使用端点0,则接口描述符以后就不再返回端点描述符,并且此接口表示的是一个请求接口,它使用连在端点0上的默认通道。在这种情况下bNumbeEnrdprtinis域应设置成0。表给出了接口描述符的数据结构。
接口描述符
偏移 字段名称 大小 取值 说明
0 bLength 1 数字 描述符大小=09H
1 bDescriptorType l 常数 接口描述符类型=04H
2 bInterfaceNumber l 数字 接口编号
3 bAlternateSetting l 数字 为上一个选择可供替换的设置
4 bNumEndpoint l 数字 使用的端点数目(端点0除外)
5 blnterfaceClass l 类型 类型代码
6 bInterfaceSubClassl 子类 子类型代码
7 bInterfaceProtocol 1 协议 协议代码
8 lInterface 1 索引 字符串描述符的索引
端点描述符用于主机决定每个端点的带宽需求。每个接口下的端点都有自己的描述符,每个端点的描述符总是作为配置描述符的一部分返回的,端点0不属于任何接口,且无描述符。表描述了端点描述符的结构:
端点描述符
偏移 字段名称 大小 取值 说明
0 bLength l 数字 描述符大小=07H
1 bDescriptorType l 常数 接口描述符类型=05H
2 bEndPointAddress l 端点 USB设备端点地址:
Bti.0…3::端点号
Bi4…6:保留,复位为0
Bti7:方向,0:OUI,1: IN对于控制
端点可忽略
3 bmAttributes 1 位图 端点属性
Bit0…1
00控制01同步02批量03中断
4 wMaxPacketSize 2 数字 接收或发送的最大信息包的大小
5 bInterval 1 数字 轮询传送端点的时间间隔
串描述符是可有可无的。如果一个设备无串描述符,所有其它描述符中有关串描述符的索引必须为0。