EZ-USB FX3 USB配置信息文档
概要
在USB总线接口协议中, 规定了一些标准的USB描述符。对于USB设备来说,有些USB描述符是必须的,例如设备描述符,配置描述符, 字符串描述符,接口描述符和端点描述符。其余一些描述符并非必须,只有在特定USB设备中使用, 例如设备限定描述符和其他速率配置描述符用于高速USB设备, OTG设备描述符用于USB OTG外设, 而超高速端点伴侣描述符用于超高速USB设备等等。 因此我们有必要了解其对应的描述符信息。
描述符类型 | 英文 | 值 | 是否必须 |
---|---|---|---|
设备描述符 | Device | 1 | 是 |
配置描述符 | Configuration | 2 | 是 |
字符串描述符 | String | 3 | 是 |
接口描述符 | Interface | 4 | 是 |
端点描述符 | Endpoint | 5 | 是 |
设备限定符 | Device Qualifier | 6 | 否 |
其他速率配置描述符 | Other Speed Configuration | 7 | 否 |
接口功率描述符 | Interface Power | 8 | 否 |
OTG设备描述符 | OTG | 9 | 否 |
调试描述符 | DEBUG | 10 | 否 |
接口相关描述符 | Interface Association | 11 | 否 |
BOS描述符 | Binary Device Object Store(BOS) | 15 | 否 |
设备能力描述符 | Device Capability | 16 | 否 |
超高速端点伴侣描述符 | Superspeed USB Endpoint Companion | 48 | 否 |
USB 描述符其实就是一个数据集合,用来表征 USB 设备某一方面的功能。 USB 协议中严格规定了每一种描述符的数据格式。各个 USB 描述符均由一系列具有固定排列顺序的字段构成。通常来说, bLength
为第一个字段,表示该描述符的长度; bDescriptorType
为第二个字段,表示该描述符的类型。在描述符的定义中,往往采用特定的前缀字符来表示该字符的类型和长度,包括如下几类:
- 前缀字符 b:表示一个字节(8b);
- 前缀字符 w:表示一个字(16b);
- 前缀字符 bm:表示按位寻址;
- 前缀字符 bcd:表示采用二进制编码的 10 进制数;
- 前缀字符 i:表示索引值;
- 前缀字符 id:表示标识码。
USB 描述符是深入学习 USB 开发所必须首要掌握的。
设备描述符
USB 设备描述符是每个 USB 设备所必需包含的,并且一个 USB 设备只能有一个设备描 述符。 USB 设备描述符用于表示 USB 设备的总体信息,包括 USB 规范版本号、产品 ID、供应商 ID、设备版本号等信息。 USB 设备描述符中的信息对于整个设备是完全有效的,而无关配置和接口的数量。
USB 设备描述符由 14 个字段按照固定的顺序组成,该描述符的总长度固定为 18 个字节。USB 设备描述符各个字段的格式,如表所示。
字段名 | 长度/字节 | 地址偏移量 | 说明 |
---|---|---|---|
bLength | 1 | 0 | 描述符的长度,固定值12H字节 |
bDescriptorType | 1 | 1 | 描述符的类型:设备描述符=01H |
bcdUSB | 2 | 2 | USB规范版本号(采用BCD码) |
bDeviceClass | 1 | 4 | USB类代码 |
bDeviceSubClass | 1 | 5 | USB子类代码 |
bDeviceProtocol | 1 | 6 | 协议代码 |
bMaxPackerSize0 | 1 | 7 | 端点0支持最大数据包的长度 |
idVendor | 2 | 8 | 供应商ID |
idProduct | 2 | 10 | 产品ID |
bcdDevice | 2 | 12 | 设备版本号(采用BCD码) |
iManufacturer | 1 | 14 | 供应商字符串描述符的索引值 |
iProduct | 1 | 15 | 产品字符串描述符的索引值 |
iSerialNumber | 1 | 16 | 设备序列号字符串描述符的索引值 |
bNumConfigurations | 1 | 17 | 该设备支持的配置数 |
1.bLength 字段
bLength 字段用于表示 USB 设备描述符的长度,长度占用 1 个字节,地址偏移量为 0。 对于 USB 设备描述符来说, bLength 字段的值固定为 18,也就是 12H。
2.bDescriptorType 字段
bDescriptorType 字段用于表示 USB 描述符的类型值,长度占用 1 个字节,地址偏移量为1。对于 USB 设备描述符来说, bDescriptorType 字段的值固定为 01H。
3.bcdUSB 字段
bcdUSB 字段用于表示该 USB 设备所遵循的 USB 规范版本号,长度占用 2 个字节,地 址偏移量为 2。 bcdUSB 字段以 BCD 码的形式表示,其格式为 0xAABC,这里各个符号的含义如下:
- AA:主版本号。
- B:次版本号。
- C:子次版本号。
例如,对于高速 USB 设备来说,其版本为 USB 2.0,对应的 bcdUSB 字段设置为 0200H。
4.bDeviceClass 字段
bDeviceClass 字段用于表示该 USB 设备所属的标准设备类,长度占用 1 个字节,地址偏 移量为 4。 bDeviceClass 字段的值代表了不同的设备类:
- bDeviceClass 字段值在 01~FEH 之间的时候,表示该设备为 USB 协议中预定义的某个标准设备类,例如 03H 表示 HID 设备类。
- bDeviceClass 字段为 0 时,表示 USB 设备包含多个接口,各个接口互相独立,分别属于不同的设备类。此时,需要在 USB 固件接口描述符中进一步定义。
- bDeviceClass 字段为 FFH 时,表示由用户自定义该设备类的类型。
5.bDeviceSubClass 字段
bDeviceSubClass 字段用于表示 USB 设备所属的标准设备子类,长度占用 1 个字节,地 址偏移量为 5。 bDeviceSubClass 字段主要用于对 USB 设备类进行了更加细致的定义,其值随bDeviceClass 字段的不同而有所区别:
- 当 bDeviceClass 字段值在 01~FEH 之间的时候, bDeviceSubClass 字段表示标准设备类的子类。例如对于前面的 HID 设备类,只有一个子类代码 01H。而对于显示设备类(04H),子类代码 01H 表示 CRT 显示器、 02H 表示平面显示器、 03H 表示 3D显示器。
- 当 bDeviceClass 字段值为 0 时, bDeviceSubClass 字段也必须为 0;
- 当bDeviceClass字段值为FFH 时, bDeviceSubClass 字段必须由用户自定义设备子类。
6. bDeviceProtocol 字段
bDeviceProtocol 字段用于表示 USB 设备所采用的设备类协议,长度占用 1 个字节,地址偏移量为 6。 bDeviceProtocol 字段的值和 bDeviceClass 及 bDeviceSubClass 的值有关。
- 如果该 USB 设备属于某个设备类和设备子类,则应该在 bDeviceProtocol 字段继续指名所采用的设备类协议。
- 当 bDeviceProtocol 字段为 0 时,表示不使用任何设备类协议。
- 当 bDeviceProtocol 字段为 FFH 时,表示设备类协议由用户自定义。
7. bMaxPackerSize0 字段
bMaxPackerSize0 字段用于表示在 USB 设备中,端点 0 所支持最大数据包的长度,长度 占用 1 个字节,地址偏移量为 7。 bMaxPackerSize0 字段以字节为单位,对于不同速率的设备 而不同:
- 对于低速 USB 设备, bMaxPackerSize0=8。
- 对于全速 USB 设备, bMaxPackerSize0=8、 16、 32 或 64。
- 对于高速 USB 设备, bMaxPackerSize0=64。
- 对于超速 USB 设备, bMaxPackerSize0=512。
8. idVendor 字段
idVendor 字段用于表示 USB 设备的供应商 ID,长度占用 2 个字节,地址偏移量为 8。 USB-IF 组织中规定,每种 USB 设备都必须包含一个供应商 ID,这样可以使主机为其寻找和加载合适的驱动程序。
9. idProduct 字段
idProduct 字段用于表示 USB 设备的产品 ID,长度占用 2 个字节,地址偏移量为 10。 idProduct 字段由设备供应商提供,用于表示某个供应商的特定 USB 设备。在 USB 设备上电的时候,该字段可以帮助 USB 主机选择合适的驱动程序。
10. bcdDevice 字段
bcdDevice 字段用于表示 USB 设备的版本号,长度占用 2 个字节,地址偏移量为 12。 bcdDevice 字段以 BCD 码的形式表示,一般来说该字段由设备供应商指定。在 USB 设备上电的时候,该字段可以帮助 USB 主机选择合适的驱动程序。
11. iManufacturer 字段
iManufacturer 字段用于表示供应商字符串描述符的索引值,长度占用 1 个字节,地址偏 移量为 14。 iManufacturer 字段所指向的具体字符串内容在后面字符串描述符中定义。 iManufacturer 字段为 0,表示没有供应商字符串。
12. iProduct 字段
iProduct 字段用于表示产品字符串描述符的索引值,长度占用 1 个字节,地址偏移量为 15。 iProduct 字段所指向的具体字符串内容在后面字符串描述符中定义。 iProduct 字段为 0,表示没有产品字符串。
13. iSerialNumber 字段
iSerialNumber 字段用于表示设备序列号字符串描述符的索引值,长度占用 1 个字节,地 址偏移量为 16。 iSerialNumber 字段所指向的具体字符串内容在后面字符串描述符中定义。iSerialNumber 字段为 0,表示没有设备序列号字符串。
14. bNumConfigurations 字段
bNumConfigurations 字段用于表示该 USB 设备所支持的配置数,长度占用 1 个字节,地 址偏移量为 17。如果 USB 设备仅有一个配置,则 bNumConfigurations=1,具有多个配置时该值可以大于 1。
配置描述符
在 USB 总线接口协议中, USB 配置描述符描述了 USB 设备的配置信息,包括接口数量、功耗等信息。每个 USB 设备都必须有一个配置描述符。另外,一个 USB 设备还可以有多个配置,但是每次传输过程仅使用其中的一个配置信息来完成。
USB 配置描述符由 8 个字段按照固定的顺序组成,该描述符的总长度固定为 9 个字节。USB 配置描述符各个字段的格式,如表 所示。
字段名 | 长度/字节 | 地址偏移量 | 说明 |
---|---|---|---|
bLength | 1 | 0 | 描述符的长度,固定值09H字节 |
bDescriptorType | 1 | 1 | 描述符的类型:配置描述符=02H |
wTotalLength | 2 | 2 | 配置信息的总长度 |
bNumInterfaces | 1 | 4 | 该配置所支持的接口数 |
bConfigurationValue | 1 | 5 | 配置值 |
iConfiguration | 1 | 6 | 字符串描述符的索引值 |
bmAttributes | 1 | 7 | 配置特性 |
bMaxPower | 1 | 8 | 所需要的最大总线电流(2mA为单位) |
下面详细说明 USB 配置描述符各个字段的具体含义:
1. bLength 字段
bLength 字段用于表示 USB 配置描述符的长度,长度占用 1 个字节,地址偏移量为 0。对于 USB 配置描述符来说, bLength 字段的值固定为 9,也就是 09H。
2. bDescriptorType 字段
bDescriptorType 字段用于表示 USB 描述符的类型值,长度占用 1 个字节,地址偏移量为1。对于 USB 配置描述符来说, bDescriptorType 字段的值固定为 02H。
3. wTotalLength 字段
wTotalLength 字段用于表示配置信息的总长度,长度占用 2 个字节,地址偏移量为 2。 wTotalLength 字段所设置的数值必须包括配置描述符、接口描述符和端点描述符长度的总和。
4. bNumInterfaces 字段
bNumInterfaces 字段用于表示配置所支持的接口数,长度占用 1 个字节,地址偏移量为 4。 一般来说, USB 设备的接口数大于等于 1,因此其最小值为 1。
5. bConfigurationValue 字段
bConfigurationValue 字段用于表示 USB 设备的配置值,长度占用 1 个字节,地址偏移量为 5。
6. iConfiguration 字段
iConfiguration 字段用于指出配置字符串描述符的索引值,长度占用 1 个字节,地址偏移量为 6。 iConfiguration 字段所包含的具体字符串内容在后面字符串描述符中定义。如果没有配置字符串, iConfiguration 字段可以置为 0。
7. bmAttributes 字段
bmAttributes 字段用于表示 USB 设备的配置特性,长度占用 1 个字节,地址偏移量为 7。bmAttributes 字段是按位寻址的,各个位的含义如下:
- D0~D4:保留值,一般置为 0。
- D5:设置为 1 表示支持远程唤醒功能,否则不支持。
- D6:设置为 1 表示自供电,否则不支持。
- D7:设置为 1 表示总线供电,否则不支持。
8. bMaxPower 字段
bMaxPower 字段用于表示 USB 设备运行时,所需要消耗的总线电流,长度占用 1 个字节,地址偏移量为 8。 bMaxPower 字段所设置数值的单位以 2mA 为基准。需要注意的是,不同的版本支持的最大电流不同, bMaxPower 字段可以设置的值也不同。
- 高速 USB 2.0 设备可以从 USB 总线上获得最大的电流为 500mA,因此 bMaxPower字段的最大值可以设置为 250。
- 超速 USB 3.0 设备可以从 USB 总线上获得最大的电流为 900mA,因此 bMaxPower字段的最大值可以设置为 450。
字符串描述符
USB 字符串描述符用于保存一些供应商名称、产品序列号等文本信息。在 USB 总线接口协议中, USB 字符串描述符并不是必须的,设计者可以根据需要设置、增加或者减少。
USB 字符串描述符由 3 个字段按照固定的顺序组成,该描述符的总长度不是固定的,其长度随字符串的数量和信息的长度而变化。 USB 字符串描述符各个字段的格式,如表所示。
字段名 | 长度/字节 | 地址偏移量 | 说明 |
---|---|---|---|
bLength | 1 | 0 | 描述符的长度(N+2字节) |
bDescriptorType | 1 | 1 | 描述符的类型:字符串描述符=03H |
bString | N | 2 | 字符串 |
下面详细说明 USB 字符串描述符各个字段的具体含义:
1. bLength 字段
bLength 字段用于表示 USB 字符串描述符的长度,长度占用 1 个字节,地址偏移量为 0。 对于 USB 字符串描述符来说, bLength 字段的值不固定。如果所列字符串的长度为 N,那么 bLength 字符需要设置为 N+2。
2. bDescriptorType 字段
bDescriptorType 字段用于表示 USB 字符串描述符的类型值,长度占用 1 个字节,地址偏 移量为 1。对于 USB 字符串描述符来说, bDescriptorType 字段的值固定为 03H。
3. bString 字段
bString 字段是存储的字符串,长度不固定,地址偏移量为 2。 bString 字段采用 UNICODE 编码来存储各个字符。
注意: USB 字符串描述符可以包含多个。
接口描述符
USB 接口描述符是每个 USB 设备所必需包含的,接口描述符用来表示在 USB 设备中各个接口的特性,包括接口的端点个数、所属的设备类和子类等。在 USB 总线接口协议中,所谓“接口”就是一个 USB 端点的集合。通过 USB 接口,可以完成 USB 设备的特定功能,例如数据输入、输出等等。
USB 接口描述符由 9 个字段按照固定的顺序组成,该描述符的总长度固定为 9 个字节。USB 接口描述符各个字段的格式,如表所示。
字段名 | 长度/字节 | 地址偏移量 | 说明 |
---|---|---|---|
bLength | 1 | 0 | 描述符的长度(09H字节) |
bDescriptorType | 1 | 1 | 描述符的类型:接口描述符=04H |
bInterfaceNumber | 1 | 2 | 接口号 |
bAlterateSetting | 1 | 3 | 可替换设置值 |
bNumEndpoints | 1 | 4 | 端点0以外的端点数 |
bInterfaceClass | 1 | 5 | 类代码 |
bInterfaceSubClass | 1 | 6 | 子类代码 |
bInterfaceProtocol | 1 | 7 | 协议代码 |
iInterface | 1 | 8 | 字符串描述符的索引值 |
下面详细说明 USB 接口描述符各个字段的具体含义
1. bLength 字段
bLength 字段用于表示 USB 接口描述符的长度,长度占用 1 个字节,地址偏移量为 0。对于 USB 接口描述符来说, bLength 字段的值固定为 9,也就是 09H。
2. bDescriptorType 字段
bDescriptorType 字段用于表示 USB 描述符的类型值,长度占用 1 个字节,地址偏移量为1。对于 USB 接口描述符来说, bDescriptorType 字段的值固定为 04H。
3. bInterfaceNumber 字段
bInterfaceNumber 字段用于表示接口的接口号,长度占用 1 个字节,地址偏移量为 2。
4. bAlterateSetting 字段
bAlterateSetting 字段用于表示接口的可替换设置值,长度占用 1 个字节,地址偏移量为3。
5. bNumEndpoints 字段
bNumEndpoints 字段用于表示接口所使用的端口数,长度占用 1 个字节,地址偏移量为4。这里需要注意, bNumEndpoints 字段所设置的数值是除端点 0 以外的所有端点总数。
6. bInterfaceClass 字段
bInterfaceClass 字段用于表示接口所属的设备类,长度占用 1 个字节,地址偏移量为 5。 bInterfaceClass 字段的取值含义如下:
- 当 bInterfaceClass 字段为 01~FEH 时,表示该接口属于 USB 定义的某个设备类。
- 当 bInterfaceClass 字段为 FFH 时,表示该设备类是供应商自定义的。
7. bInterfaceSubClass 字段
bInterfaceSubClass 字段用于表示接口所属的 USB 设备子类,长度占用 1 个字节,地址偏移量为 6。 bInterfaceSubClass 字段的值与 bInterfaceClass 字段的值相关。
- 当 bInterfaceClass 字段为 0 时, bInterfaceSubClass 字段必须为 0。
- 如果 bInterfaceClass 字段为 01~FEH 之间, bInterfaceSubClass 字段需进一步表示设备子类。
- 如果 bInterfaceClass 字段为 FFH 时,则需要由供应商自定义设备子类。
8. bInterfaceProtocol 字段
bInterfaceProtocol 字段用于表示接口所采用的 USB 设备类协议,长度占用 1 个字节,地址偏移量为 7。 bInterfaceProtocol 字段的值和 bInterfaceClass 及 bInterfaceSubClass 的值有关。
- 当 bInterfaceProtocol 字段为 0 时,表示不使用任何设备类协议。
- 当 bInterfaceProtocol 字段为 01~FEH 时,表示该 USB 设备属于某个设备类和设备子类,则应该继续指名所采用的设备类协议。
- 当 bInterfaceProtocol 字段为 FFH 时,则需要由供应商自定义设备类协议。
9. iInterface 字段
iInterface 字段用于指出接口字符串描述符的索引值,长度占用 1 个字节,地址偏移量为8。 iInterface 字段所设置具体字符串的内容在后面字符串描述符中定义。如果没有接口字符串,可以置为 0。
端点描述符
USB 端点描述符是每个 USB 设备所必需包含的, USB 端点是 USB 数据传输的通道。USB 端点描述符表示了 USB 设备端点的特性,包括其所支持的传输类型、传输方向等信息。在 USB 总线接口协议中规定,端点 0 没有端点描述符,其余每一个端点都必须包含一个端点描述符。
USB 端点描述符由 6 个字段按照固定的顺序组成,该描述符的总长度固定为 7 个字节。USB 端点描述符各个字段的格式,如表所示
字段名 | 长度/字节 | 地址偏移量 | 说明 |
---|---|---|---|
bLength | 1 | 0 | 描述符的长度(07H字节) |
bDescriptorType | 1 | 1 | 描述符的类型:端点描述符=05H |
bEndpointAddress | 1 | 2 | 端点号、传输方向 |
bmAttributes | 1 | 3 | 端点特性 |
wMaxPacketSize | 2 | 4 | 最大数据包长度 |
bInterval | 1 | 6 | 访问间隔 |
1. bLength 字段
bLength 字段用于表示 USB 端点描述符的长度,长度占用 1 个字节,地址偏移量为 0。对于 USB 端点描述符来说,bLength 字段的值固定为 7,也就是 07H。
2. bDescriptorType 字段
bDescriptorType 字段用于表示 USB 描述符的类型值,长度占用 1 个字节,地址偏移量为1。对于 USB 端点描述符来说,bDescriptorType 字段的值固定为 05H。
3. bEndpointAddress 字段
bEndpointAddress 字段用于表示端点的端点号以及端点的数据传输方向,长度占用 1 个字节,地址偏移量为 2。bEndpointAddress 字段采用按位寻址的方式,各位的含义如下:
- D7 位表示端点的数据传输方向, 0 表示 OUT 数据传输, 1 表示 IN 数据传输。
- D3~D0 位表示端点号,例如 001B 表示端点 1、 010B 表示端点 2 等。
- 其余位均保留,必须置 0。
4. bmAttributes 字段
bmAttributes 字段用于表示端点的特性,长度占用 1 个字节,地址偏移量为 3。bmAttributes字段采用按位寻址的方式,各位的含义如下:
- D1~D0 位表示端点的数据传输类型, 00B 表示控制传输、 01B 表示同步传输、 10B表示块传输、 11B 表示中断传输。
- D3~D2 位进一步描述了不同的传输类型,例如如果是同步传输,这两位表示同步类型, 00B 表示非同步、 01B 表示异步、 10B 表示自适应、 11B 表示同步。
- D5~D4 位表示端点的用法类型, 00B 表示数据端点、 01B 表示显示反馈端点、 10B表示隐式反馈端点、 11B 保留。
- 其余位保留。
5. wMaxPacketSize 字段
wMaxPacketSize 字段用于表示端点所支持最大数据包的长度,长度占用 2 个字节,地址偏移量为 4。 wMaxPacketSize 字段采用按位寻址的方式,各位的含义如下:
- D10~D0 位表示数据包长度。
- D12~D11 位指出每小帧最多传输的事务处理数。
- 其余位均保留,必须设置 0。
6. bInterval 字段
bInterval 字段用于指定端点数据传输的访问间隔,长度占用 1 个字节,地址偏移量为 6。对于不同的端点类型, bInterval 字段的取值可以参阅 USB 相关协议。例如:
- 对于低速中断端点,取值范围为 10 ~ 255,对应的访问间隔为 10ms ~ 255ms。
- 对于全速中断端点,取值范围为 1 ~ 255,对应的访问间隔为 1ms ~ 255ms。
设备限定符
USB 限定描述符用以指出另一传输速率下该设备的总体信息,其并非必须的,常用于多种速率传输时使用。例如,在高速 USB 2.0 系统中,如果 USB 设备既需要采用高速传输又需要全速传输,则其必须支持设备限定描述符。
USB 设备描述符由 9 个字段按照固定的顺序组成,该描述符的总长度固定为 10 个字节。USB 设备描述符各个字段的格式,如表所示。
字段名 | 长度/字节 | 地址偏移量 | 说明 |
---|---|---|---|
bLength | 1 | 0 | 描述符的长度(0AH字节) |
bDescriptorType | 1 | 1 | 描述符的类型:设备限定描述符=06H |
bcdUSB | 2 | 2 | USB规范版本号(采用BCD码) |
bDeviceClass | 1 | 4 | 类代码 |
bDeviceSubClass | 1 | 5 | 子类代码 |
bDeviceProtocol | 1 | 6 | 协议代码 |
bMaxPackerSize0 | 1 | 7 | 端点0所支持最大数据包的长度 |
bNumConfigurations | 1 | 8 | 所支持的配置数 |
bReserved | 1 | 9 | 保留 |
下面详细说明 USB 设备限定描述符各个字段的具体含义:
1. bLength 字段
bLength 字段用于表示 USB 设备限定描述符的长度,长度占用 1 个字节,地址偏移量为0。对于 USB 设备限定描述符来说, bLength 字段的值固定为 10,也就是 0AH。
2. bDescriptorType 字段
bDescriptorType 字段用于表示 USB 设备限定描述符的类型值,长度占用 1 个字节,地址偏移量为 1。对于 USB 设备限定描述符来说, bDescriptorType 字段的值固定为 06H。
3. bcdUSB 字段
bcdUSB 字段用于表示 USB 设备及其描述符所遵循的 USB 规范版本号,长度占用 2 个字节,地址偏移量为 2。 bcdUSB 字段采用 BCD 码的形式表示。由于需要在高速 USB 传输场合使用,因此 bcdUSB 字段的值必须在版本 2.0 以上。
4. bDeviceClass 字段
bDeviceClass 字段用于表示该 USB 设备所属的标准设备类,长度占用 1 个字节,地址偏移量为 4。 bDeviceClass 字段的值代表了不同的设备类:
- bDeviceClass 字段值在 01~FEH 之间的时候,表示该设备为 USB 协议中预定义的某个标准设备类,例如 03H 表示 HID 设备类。
- bDeviceClass 字段为 0 时,表示 USB 设备包含多个接口,各个接口互相独立,分别属于不同的设备类。此时,需要在 USB 固件接口描述符中进一步定义。
- bDeviceClass 字段为 FFH 时,表示由用户自定义该设备类的类型。
5. bDeviceSubClass 字段
bDeviceSubClass 字段用于表示 USB 设备所属的标准设备子类,长度占用 1 个字节,地址偏移量为 5。 bDeviceSubClass 字段主要用于对 USB 设备类进行了更加细致的定义,其值随bDeviceClass 字段的不同而有所区别:
- 当 bDeviceClass 字段值在 01~FEH 之间的时候, bDeviceSubClass 字段表示标准设备类的子类。例如对于前面的 HID 设备类,只有一个子类代码 01H。而对于显示设备类(04H),子类代码 01H 表示 CRT 显示器、 02H 表示平面显示器、03H 表示 3D显示器。
- 当 bDeviceClass 字段值为 0 时, bDeviceSubClass 字段也必须为 0;
- 当bDeviceClass字段值为FFH 时, bDeviceSubClass 字段必须由用户自定义设备子类。
6. bDeviceProtocol 字段
bDeviceProtocol 字段用于表示 USB 设备所采用的设备类协议,长度占用 1 个字节,地址偏移量为 6。 bDeviceProtocol 字段的值和 bDeviceClass 及 bDeviceSubClass 的值有关。
- 如果该 USB 设备属于某个设备类和设备子类,则应该在 bDeviceProtocol 字段继续指名所采用的设备类协议。
- 当 bDeviceProtocol 字段为 0 时,表示不使用任何设备类协议。
- 当 bDeviceProtocol 字段为 FFH 时,表示设备类协议由用户自定义。
7. bMaxPackerSize0 字段
bMaxPackerSize0 字段用于表示在 USB 设备中,端点 0 所支持最大数据包的长度,长度占用 1 个字节,地址偏移量为 7。 bMaxPackerSize0 字段以字节为单位,对于不同速率的设备而不同:
- 对于低速 USB 设备, bMaxPackerSize0=8。
- 对于全速 USB 设备, bMaxPackerSize0=8、 16、 32 或 64。
- 对于高速 USB 设备, bMaxPackerSize0=64。
- 对于超速 USB 设备, bMaxPackerSize0=512。
8. bNumConfigurations 字段
bNumConfigurations 字段用于表示 USB 设备另一个速率所支持的配置数,长度占用 1 个字节,地址偏移量为 8。
9. bReserved 字段
bReserved 字段为保留项,必须置 0,其长度占用 1 个字节,地址偏移量为 9。