配置描述符
我们的主机枚举过程中,是没有单独获取接口和端点描述符的,这是因为他们都是配置描述符的,当主机获取配置描述符时候,也就意味着会同时获取从属的接口,端点(及其他特定类描述符)。
USB主机对于设备描述符的获取是有两次的,第一次只是获取如上图的8个字段,也就是前9个字节,这9个字节就是配置描述符信息(暂时还不包括接口与端点描述符的具体信息),
第一个字段(bLength)同样代表该描述符的长度,配置描述符固定为9字节,这和配置描述符不一样,该字段不代表Joystick_ConfigDescriptor数组的长度,因为我们配置描述符还包括了端点和接口(及其他特定类)描述符。
第二个字段(bDescriptorType)固定为0x02,表示配置描述符的类型
第三个字段(wTotalLength)表示配置描述符的长度,这时候他就是整个数组的长度了,包括了端点和接口(及其他特定类)描述符。它是双字节表示,但是注意他不是BCD码。
该数组一共34字节
第四个字段(bNumInterfaces)表示接口数量,如果设备包含多个接口,并且这每个接口代表一个独立的功能,我们称为复合设备。
无论一个复合设备有多少接口,主机只会给设备分配一个地址,但是对于一些组合设备来说,每个功能(设备)都会分配一个地址。
第五个字段(bConfigurationValue)表示配置值。我们的USB设备可以有多个配置,这个配置值就是我们每个配置的标志。我们的主机在枚举过程中会读取设备所支持的所有配置描述符,最后才发送命令来选择一个配置,如果我们选择的配置值与该字段值一样,说明该值对应的配置被激活。
第六个字段(iConfiguration)表示描述该配置描述符的索引值。如果没有就设置为0.
第七个字段(bmAttributes)表示USB设备的配置特性,总共一个字节,八个数据位,一个或多个数据位代表一定的功能配置
最高位必须为1,这是规定的,没什么理由,低5位全为0,第六位 D5 表示设备是否支持远程唤醒
第七位 D6 表示USB设备的供电模式,1 就是自供电 它主要供电来源不是USB电源,而是单独配置了一个供电电源接口,0就不是自供电,就是可以USB供电,比如键盘,鼠标啥的。
第八个字段(MaxPower)表示从总线获取的电流 是以2MA为单位
下节讲接口和端点描述符
标签:USB,配置,接口,描述符,端点,设备 From: https://blog.csdn.net/Z1799369927/article/details/136773060