USB配置描述符

本文讲述了USB主机在枚举设备时如何获取配置描述符,包括其字段解释和作用,如bLength、bDescriptorType、wTotalLength等,以及后续接口和端点描述符的重要性。
摘要由CSDN通过智能技术生成

配置描述符

我们的主机枚举过程中,是没有单独获取接口和端点描述符的,这是因为他们都是配置描述符的,当主机获取配置描述符时候,也就意味着会同时获取从属的接口,端点(及其他特定类描述符)。

 

8b558dca969a4863acd71d140e7e99de.png

713386431898458a86d9d9a37e71a0de.png

USB主机对于设备描述符的获取是有两次的,第一次只是获取如上图的8个字段,也就是前9个字节,这9个字节就是配置描述符信息(暂时还不包括接口与端点描述符的具体信息),

第一个字段(bLength)同样代表该描述符的长度,配置描述符固定为9字节,这和配置描述符不一样,该字段不代表Joystick_ConfigDescriptor数组的长度,因为我们配置描述符还包括了端点和接口(及其他特定类)描述符。

第二个字段(bDescriptorType)固定为0x02,表示配置描述符的类型

第三个字段(wTotalLength)表示配置描述符的长度,这时候他就是整个数组的长度了,包括了端点和接口(及其他特定类)描述符。它是双字节表示,但是注意他不是BCD码。

该数组一共34字节 

0c4ae203f80d49919d60a0a6f90d8a41.png

第四个字段(bNumInterfaces)表示接口数量,如果设备包含多个接口,并且这每个接口代表一个独立的功能,我们称为复合设备。

无论一个复合设备有多少接口,主机只会给设备分配一个地址,但是对于一些组合设备来说,每个功能(设备)都会分配一个地址。

第五个字段(bConfigurationValue)表示配置值。我们的USB设备可以有多个配置,这个配置值就是我们每个配置的标志。我们的主机在枚举过程中会读取设备所支持的所有配置描述符,最后才发送命令来选择一个配置,如果我们选择的配置值与该字段值一样,说明该值对应的配置被激活。

第六个字段(iConfiguration)表示描述该配置描述符的索引值。如果没有就设置为0.

第七个字段(bmAttributes)表示USB设备的配置特性,总共一个字节,八个数据位,一个或多个数据位代表一定的功能配置

9b029c807e8440718912f3e7cecb9572.png

最高位必须为1,这是规定的,没什么理由,低5位全为0,第六位 D5 表示设备是否支持远程唤醒

第七位 D6 表示USB设备的供电模式,1 就是自供电 它主要供电来源不是USB电源,而是单独配置了一个供电电源接口,0就不是自供电,就是可以USB供电,比如键盘,鼠标啥的。

第八个字段(MaxPower)表示从总线获取的电流 是以2MA为单位 

7ff0c8baeb15486d9ea81612bfbabf04.png

下节讲接口和端点描述符

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值