1、Device Qualifier描述符
也不知道Qualifier这个词怎么翻译,网上有叫设备限定描述符的,我觉得有点牵强,还是叫他Qualifier吧。如果设备既支持高速usb也支持全速usb,那么就必须支持Qualifier描述符,这个描述符描述了在高速状态下的参数,比如当前是usb在全速模式,主机向设备获取Qualifier描述符是为了获取设备在高速状态时的参数,具体见下面的分析。如果设备只支持全速usb,那么在收到主机请求Qualifier描述符时,直接返回STALL即可。
有个猜测我没有测试:
如果全速设备的设备描述符中的usb版本号低于2.0,那么设备是不会收到Qualifier描述符请求。
bLength:
描述符长度
bDescriptorType:
描述符类型,这里是0x06
bcdUSB:
USB规范版本号,0x0200即V2.00,至少是2.0
bDeviceClass:
类别码,不做介绍了,见设备描述符
bDeviceSubClass:
子码,不做介绍了,见设备描述符
bDeviceProtocol:
协议,不做介绍了,见设备描述符
bMaxPacketSize0:
其它速度下的端点0大小,也就是高速模式下的端点0大小
bNumConfigurations:
其它速度下的配置数量,也就是高速模式下的配置数量。
bReserved:
保留,设置为0
注意,Qualifier描述符没有字符串索引,字符串是和设备描述符共用的。
2、Other_Speed_Configuration
其它速度配置描述符,可以理解为高速模式下的配置描述符。此描述符和配置描述符的结构是一样的。
bLength:
描述符长度
bDescriptorType:
描述符类型,这里是0x07
wTotalLength:
描述符总长度,包括配置,接口、端点等描述符
bNumInterfaces:
接口数量,至少为1
bConfigurationValue:
配置值
iConfiguration:
其它速度配置字符串索引
bmAttributes:
属性,见配置描述符
bMaxPower:
见配置描述符
添加关注,了解更多干货