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 |
关键说明:
bmAttributes
位图:- D6 (自供电):若设备支持自供电,需设为
1
,并通过GetStatus(DEVICE)
获取实际电源模式。 - D5 (远程唤醒):支持远程唤醒功能时设为
1
。
- D6 (自供电):若设备支持自供电,需设为
MaxPower
:- 计算方式:值 × 2mA。例如
0x32
(50)表示最大耗电为100mA
。
- 计算方式:值 × 2mA。例如
配置选择:
- 主机通过
bConfigurationValue
的值(如0x01
)在SetConfiguration
请求中激活该配置。
- 主机通过
多配置支持:
- 若设备有多个配置描述符,主机需依次读取并通过
SetConfiguration
切换。
- 若设备有多个配置描述符,主机需依次读取并通过