4.2 配置描述符

配置描述符中包括了描述符的长度(属于此描述符的所有接口描述符和端点描述符的长度的和)、供电方式(自供电/总线供电)、最大耗电量等。

如果主机发出 USB 标准命令 Get_Descriptor 要求得到设备的某个配置描述符,那么除了此配置描述符以外,此配置包含的所有接口描述符与端点描述符都将提供给 USB 主机。

USB 配置描述符的结构

偏移量 大小 描述
0 bLength 1 数字 此描述符的字节数长度。 ★
1 bDescriptorType 1 常量 配置描述符类型(此处为 0x02)。
2 wTotalLength 2 数字 此配置信息的总字节数(包括配置、接口、端点和设备类及厂商定义的描述符)。★
4 bNumInterfaces 1 数字 此配置所支持的接口个数。★
5 bConfigurationValue 1 数字 在后续 SetConfiguration() 请求中用此参数此配置。 ★
6 iConfiguration 1 索引 描述此配置的字串描述表索引。
7 bmAttributes 1 位图 配置特性:
• D7: 保留(设为一)
• D6: 自给电源 ★
• D5: 远程唤醒
• D4..0: 保留(设为一)
注:既用总线电源又有自给电源的设备会在 MaxPower 域指出需要从总线取的电量,并设置 D6 为一。
8 MaxPower 1 mA 在此配置下的总线电源耗费量,以 2mA 为一个单位。

示例:一种硬盘的配置描述符

字段 描述符值(十六进制)
bLength 0x09
bDescriptorType 0x02
wTotalLength 0x01F
bNumInterfaces 0x01
bConfigurationValue 0x01
iConfiguration 0x00
bmAttributes 0x0C
MaxPower 0x32

关键说明:

  1. bmAttributes 位图

    • D6 (自供电):若设备支持自供电,需设为 1,并通过 GetStatus(DEVICE) 获取实际电源模式。
    • D5 (远程唤醒):支持远程唤醒功能时设为 1
  2. MaxPower

    • 计算方式:值 × 2mA。例如 0x32(50)表示最大耗电为 100mA
  3. 配置选择

    • 主机通过 bConfigurationValue 的值(如 0x01)在 SetConfiguration 请求中激活该配置。
  4. 多配置支持

    • 若设备有多个配置描述符,主机需依次读取并通过 SetConfiguration 切换。
  5. bLength 和 wTotalLength 的关系
    当主机请求 配置描述符 时,所有相关的 接口描述符 和 端点描述符 都会被返回,所以有可能此时你虽然查询的是 配置描述符,但是USB可能一次性返回了:配置描述符+接口描述符+端点描述符。