USB内存设备限定描述符(Device Qualifier Descriptor )设备限定描述符(Device Qualifier Descriptor )描述可快速操作的设备在其他速度下发生的变化。 例如,如果设备当前正在全速运行,设备限定描述符将返回有关其如何快速运行的信息。
如果设备同时支持全速和高速状态,则必须包含设备限定描述符“Device Qualifier Descriptor”。 设备限定描述符(Device Qualifier Descriptor )包含这些字段以当前未使用的速度获取的值。
设备限定描述符(Device Qualifier Descriptor )不包含供应商、产品、设备、制造商、产品和序列号字段。 这是因为在所有支持的速度下,设备信息都是恒定的。 此描述符的版本号至少为2.0(0200h )。
对于只能进行全速操作的设备(设备描述符的版本号为0200H ),在接收到请求设备描述符的Get Descriptor请求时,必须响应STALL请求错误。
只有在成功获取设备限定描述符(Device Qualifier Descriptor )之后,主机才能请求其他速度配置(other_speed_configuration )描述符。
dvicequalifierdescriptoroffsetfieldsizevaluedescription0blength 1以number字节为单位的描述符大小1bDescriptorType1Constant设备限定描述符类型2 BCD USB2BCD lass类代码5bDeviceSubClass1SubClass子类代码6bDeviceProtocol1Protocol协议代码7bMaxPacketSize01Number其他速度端点0最大分组大小8 bnumbex
bLength设备限定描述符类型,device_Qualifier(0x06 )。
bDescriptorType是设备适用的USB标准版本号,该值采用BCD (二进制编码的十进制)格式。 将此数字转换为十进制数字后,前一个字节(8位)表示整数部分,后四位表示10位,最后四位表示100分位数。 USB 2.0为0x0200; USB 2.1为0x0210。
bcdUSB类代码。 此字段指定在设备级别定义功能的设备所属的类。
bDeviceClass子类代码。 此字段规定类的子类
bDeviceSubClass协议代码。 此字段指定选定类和子类的协议。
bDeviceProtocol是其他速度(Other-speed )下端点0的最大分组大小。
bMaxPacketSize0为其他速度(Other-speed )配置的数量。
bNumConfigurations被保留以供以后使用,并且必须为0。
获取设备限定描述符的主机通过发送Get Descriptor请求来获取设备限定描述符Device Qualifier Descriptor。
getdescriptorvaluebmrequesttype0x 80 bmrequesttype.recipient 0b 00000 (device ) bmrequesttype.typ e0b 00 (标准) ) ) bmrequesttype.direction0B1 (device-to-host ) brequest0x06 ) getdescriptor ) wvalue0x0600 ) configuration#0) windex0x0x0x
设备限定描述符Device Qualifier Descriptor如下所示:
在USB分析器中抓住包时,您会看到它将获得设备限定描述符Device Qualifier Descriptor。
获取设备限定描述符的步骤如下:
让我们看一下详细的过程:
接下来,让我们详细了解整个捕获进程中各个字段的含义。
第一个设置包流程:
设置数据:
输入包进程:
OUT打包流程:
完成整个设备限定描述符Device Qualifier Descriptor的获取。 不支持设备限定描述符的情况
如果设备不支持获取设备限定描述符,需要回复STALL来响应不支持的请求。
下面举例说明下不支持的情况如何正确响应:
如果不支持的话,使用USB分析仪抓包显示如下:
再展开看到详细的过程:
过程就只有IN包回复不同,看下IN包的详细回复过程,可以与上面的正常过程进行对比:
对比如下:
这里举例一个带有该描述符的示例设备。
Device Descriptor OffsetFieldSizeValueDescription0bLength10x121bDescriptorType10x01DEVICE2bcdUSB20x02002.004bDeviceClass10x005bDeviceSubClass10x006bDeviceProtocol10x007bMaxPacketSize010x408idVendor20x046d10idProduct20xc31c12bcdDevice20x00010.0114iManufacturer10x0115iProduct10x0216iSerialNumber10x0317bNumConfigurations10x01 Device Qualifier Descriptor OffsetFieldSizeValueDescription0bLength10x0a1bDescriptorType10x06DEVICE_QUALIFIER2bcdUSB20x02002.004bDeviceClass10x005bDeviceSubClass10x006bDeviceProtocol10x007bMaxPacketSize010x408bNumConfigurations10x019bReserved10x00 Configuration Descriptor OffsetFieldSizeValueDescription0bLength10x091bDescriptorType10x02CONFIGURATION2wTotalLength20x00b14bNumInterfaces10x045bConfigurationValue10x016iConfiguration10x007bmAttributes10xC08bMaxPower10x01 Interface Descriptor OffsetFieldSizeValueDescription0bLength10x091bDescriptorType10x04INTERFACE…………… Endpoint Descriptor OffsetFieldSizeValueDescription0bLength10x071bDescriptorType10x05ENDPOINT……………省略中间的描述符。
Other_Speed_Configuration Descriptor OffsetFieldSizeValueDescription0bLength10x091bDescriptorType10x07OTHER_SPEED_CONFIGURATION2wTotalLength20x00b14bNumInterfaces10x045bConfigurationValue10x016iConfiguration10x007bmAttributes10xC08bMaxPower10x01 Interface Descriptor OffsetFieldSizeValueDescription0bLength10x091bDescriptorType10x04INTERFACE…………… Endpoint Descriptor OffsetFieldSizeValueDescription0bLength10x071bDescriptorType10x05ENDPOINT……………后续描述符省略。
附录 USB2.0 Device Qualifier Descriptor OffsetFieldSizeValueDescription0bLength1NumberSize of descriptor1bDescriptorType1ConstantDevice Qualifier Type2bcdUSB2BCDUSB specification version number (e.g.,0200H for V2.00 )4bDeviceClass1ClassClass Code5bDeviceSubClass1SubClassSubClass Code6bDeviceProtocol1ProtocolProtocol Code7bMaxPacketSize01NumberMaximum packet size for other speed8bNumConfigurations1NumberNumber of Other-speed Configurations9bReserved1ZeroReserved for future use, must be zero [参考资料]Universal Serial Bus Specification Revision 2.0
USB Complete, 5th Edition
USB开发大全
USB2.0与OTG规范及开发指南