USB笔记 设备限定描述符(Device Qualifier Descriptor)

USB笔记 设备限定描述符(Device Qualifier Descriptor)

设备限定描述符(Device Qualifier Descriptor)说明了能进行高速操作的设备在其他速度时产生的变化信息。例如,如果设备当前在全速下操作,设备限定描述符返回它如何在高速运行的信息。

如果设备既支持全速状态又支持高速状态,那么就必须含有设备限定描述符(Device Qualifier Descriptor)。设备限定描述符(Device Qualifier Descriptor)中含有当前没有使用的速度下这些字段的取值。

设备限定描述符(Device Qualifier Descriptor)不包含标准设备描述符中的厂商、产品、设备、制造厂商、产品和序列号场,因为在所有支持的速度下设备的这些信息都是常数。这个描述符的版本号至少是2.0(0200H)。

如果只能进行全速(full-speed)操作的设备(设备描述符的版本号等于0200H)接收到请求设备限定符的Get Descriptor请求,它必须用请求错误响应,回复STALL来响应。

主机端只能在成功取得设备限定描述符(Device Qualifier Descriptor)之后,才能请求其他速度配置(other_speed_configuration)描述符

Device Qualifier Descriptor

OffsetFieldSizeValueDescription
0bLength1Number以字节为单位的描述符大小
1bDescriptorType1Constant设备限定描述符类型
2bcdUSB2BCDUSB规范发布的版本号
4bDeviceClass1Class类码
5bDeviceSubClass1SubClass子类码
6bDeviceProtocol1Protocol协议码
7bMaxPacketSize01Number其他速度的端点0最大包大小
8bNumConfigurations1Number其他速度配置的数量
9bReserved1Zero保留

bLength以字节为单位的描述符大小(0x0a)。

bDescriptorType设备限定描述符类型,为DEVICE_QUALIFIER (0x06)。

bcdUSB是设备所符合的USB规范的版本号,该值采用BCD(用二进制编码的十进制数)格式。如果要将这个数值转化为十进制数的话,,前面的1字节(8位)代表整数部分,接下来的4位代表十分位,最后4位代表百分位。USB 2.0是0x0200;USB 2.1是0x0210。

bDeviceClass类码。这个字段为那些在设备层次定义功能的设备规定了它们所属的类。

bDeviceSubClass子类码。这个字段规定一个类的子类

bDeviceProtocol协议码。这个字段为所选的类和子类规定一个协议。

bMaxPacketSize0为其他速度(Other-speed)的端点0最大包大小。

bNumConfigurations为其他速度(Other-speed)配置的数量。

bReserved保留到以后使用,必须为0。

获取设备限定描述符

主机会通过发送Get Descriptor请求,取得设备限定描述符(Device Qualifier Descriptor)。

Get DescriptorValue
bmRequestType0x80
  bmRequestType.Recipient0b00000(Device)
  bmRequestType.Type0b00(Standard)
  bmRequestType.Direction0b1(Device-to-Host)
bRequest0x06(Get Descriptor)
wValue0x0600(Configuration #0)
wIndex0x0000
wLength0x000a

下面举例说明一个获取设备限定描述符Device Qualifier Descriptor的过程。使用USB分析仪抓包,软件Total Phase Data Center。
设备限定描述符Device Qualifier Descriptor如下所示:
0
使用USB分析仪抓包可以看到,获取设备限定描述符Device Qualifier Descriptor:
1

设备限定描述符的获取过程如下:
2
再展开看到详细的过程:
3
接下来详细看整个获取过程的各个字段含义:
4

一开始的setup包过程:
5
setup data:
5-1

IN包过程:
6
OUT包过程:
7
完成整个设备限定描述符Device Qualifier Descriptor的获取。

不支持设备限定描述符的情况

如果设备不支持获取设备限定描述符,需要回复STALL来响应不支持的请求。
下面举例说明下不支持的情况如何正确响应:
如果不支持的话,使用USB分析仪抓包显示如下:
8
再展开看到详细的过程:
9
过程就只有IN包回复不同,看下IN包的详细回复过程,可以与上面的正常过程进行对比:
10
对比如下:
11


描述符示例

这里举例一个带有该描述符的示例设备。

Device Descriptor

OffsetFieldSizeValueDescription
0bLength10x12
1bDescriptorType10x01DEVICE
2bcdUSB20x02002.00
4bDeviceClass10x00
5bDeviceSubClass10x00
6bDeviceProtocol10x00
7bMaxPacketSize010x40
8idVendor20x046d
10idProduct20xc31c
12bcdDevice20x00010.01
14iManufacturer10x01
15iProduct10x02
16iSerialNumber10x03
17bNumConfigurations10x01

Device Qualifier Descriptor

OffsetFieldSizeValueDescription
0bLength10x0a
1bDescriptorType10x06DEVICE_QUALIFIER
2bcdUSB20x02002.00
4bDeviceClass10x00
5bDeviceSubClass10x00
6bDeviceProtocol10x00
7bMaxPacketSize010x40
8bNumConfigurations10x01
9bReserved10x00

Configuration Descriptor

OffsetFieldSizeValueDescription
0bLength10x09
1bDescriptorType10x02CONFIGURATION
2wTotalLength20x00b1
4bNumInterfaces10x04
5bConfigurationValue10x01
6iConfiguration10x00
7bmAttributes10xC0
8bMaxPower10x01

Interface Descriptor

OffsetFieldSizeValueDescription
0bLength10x09
1bDescriptorType10x04INTERFACE

Endpoint Descriptor

OffsetFieldSizeValueDescription
0bLength10x07
1bDescriptorType10x05ENDPOINT

省略中间的描述符。

Other_Speed_Configuration Descriptor

OffsetFieldSizeValueDescription
0bLength10x09
1bDescriptorType10x07OTHER_SPEED_CONFIGURATION
2wTotalLength20x00b1
4bNumInterfaces10x04
5bConfigurationValue10x01
6iConfiguration10x00
7bmAttributes10xC0
8bMaxPower10x01

Interface Descriptor

OffsetFieldSizeValueDescription
0bLength10x09
1bDescriptorType10x04INTERFACE

Endpoint Descriptor

OffsetFieldSizeValueDescription
0bLength10x07
1bDescriptorType10x05ENDPOINT

后续描述符省略。


附录

USB2.0 Device Qualifier Descriptor

OffsetFieldSizeValueDescription
0bLength1NumberSize of descriptor
1bDescriptorType1ConstantDevice Qualifier Type
2bcdUSB2BCDUSB specification version number (e.g.,0200H for V2.00 )
4bDeviceClass1ClassClass Code
5bDeviceSubClass1SubClassSubClass Code
6bDeviceProtocol1ProtocolProtocol Code
7bMaxPacketSize01NumberMaximum packet size for other speed
8bNumConfigurations1NumberNumber of Other-speed Configurations
9bReserved1ZeroReserved for future use, must be zero

[参考资料]

Universal Serial Bus Specification Revision 2.0

USB Complete, 5th Edition

USB开发大全

USB2.0与OTG规范及开发指南

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值