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切换。
 
- 若设备有多个配置描述符,主机需依次读取并通过 
- bLength 和 wTotalLength 的关系 
 当主机请求 配置描述符 时,所有相关的 接口描述符 和 端点描述符 都会被返回,所以有可能此时你虽然查询的是 配置描述符,但是USB可能一次性返回了:配置描述符+接口描述符+端点描述符。
 我的书签
 我的书签
                                 添加书签
 添加书签 移除书签
 移除书签