上一章文章说了USB设备描述符,今天我们看下USB的配置描述符。在上一篇文章中,详细地说明了描述符之间的关系,在本章节回顾一下:一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。
与设备描述符相比,USB配置描述符就显得少一些,只有9个字节,具体的详细内容如下表所示
偏移量/字节 | 域 | 大小/字节 | 说 明 |
0 | bLength | 1 | 该描述符的长度(9字节) |
1 | bDescriptorType | 1 | 描述符类型 |
2 | wTotalLength | 2 | 配置描述符集合总长度 |
4 | bNumInterfaces | 1 | 该配置所支持的接口数 |
5 | bConfigurationValue | 1 | 该配置的值 |
6 | iConfiguration | 1 | 描述该配置的字符串的索引值 |
7 | bmAttributes | 1 | 该设备的属性 |
8 | bMaxPower | 1 | 设备所需要的电流(单位为2mA) |
bLength:大小为1字节,表示该描述符的长度。标准的USB配置描述符的长度为9字节。
bDescriptorType:配置描述符的类型。
wTotalLength:表示整个配置描述符集合的总长度,包括配置描述符、接口描述符、端点描述符和类特殊描述符(HID类)。注意低字节在前。
bNumInterfaces:该配置描述符所支持的接口数量。功能单一设备只有一个,而复合设备则具有多个接口。
bConfigurationValue:表示该配置的值。通常一个USB设备可以支持多个配置,bConfigurationValue就是每个配置的标识。
iConfiguration:描述该配置的字符串的索引值。如果该值为0,则表示没有字符串。
bmAttributes:用来描述设备的一些特性。其中,D7是保留的,必须要设置为1。D6表示供电方式,D6=1时,表示设备自供电;D6=0时,表示设备时总线供电。D5表示是否支持远程唤醒,D5=1时,支持远程唤醒。D4~D0保留,设置为0。
bMaxPower:表示设备需要从总线获取的最大电流量,单位为2mA。如需要200mA的最大电流,则该字节的值为100.