USB笔记 二进制设备对象存储描述符(BOS Descriptor)
二进制设备对象存储描述符(Binary Device Object Store Descriptor),简写成BOS描述符(BOS Descriptor)。
BOS描述符(BOS Descriptor)是用于存储特定某项技术或设备功能信息的描述符,和设备功能描述符(Device Capability Descriptor)一起由Wireless Universal Serial Bus Specification Revision 1.0规范引入,之后在USB 2.0 ECN: Link Power Management (LPM) 、USB3.x Specification、Microsoft OS 2.0 Descriptors Specification 等协议规范都加入了定义。
BOS描述符(BOS Descriptor)定义了一个与配置描述符(Configuration Descriptor)类似的根描述符(root descriptor),是一个或多个设备功能描述符(Device Capability Descriptor)的基础描述符。主机端通过BOS描述符的wTotalLength字段获取整个BOS描述符集的大小,再通过这个大小来获取完整的描述符集。
主机使用GetDescriptor()请求获取BOS描述符(BOS Descriptor)。主机端不能单独读取单个的设备功能描述符(Device Capability Descriptor),只能通过GetDescriptor()请求获取BOS描述符(BOS Descriptor)并通过wTotalLength字段得到长度来读取整个描述符集。
在USB 2.0 ECN: Link Power Management (LPM)中定义,标准usb 2.0设备描述符(Device Descriptor)中bcdUSB字段的值,用于指示设备支持读取BOS描述符(即GetDescriptor(BOS))的请求。支持BOS描述符的设备的bcdUSB值必须是0201H或更大的值。 另外,Microsoft OS 2.0 Descriptors Specification中定义,设备描述符(Device Descriptor)中的USB版本必须是usb 2.1及更高版本。
BOS Descriptor
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bLength | 1 | Number | 以字节为单位的描述符大小 |
1 | bDescriptorType | 1 | Constant | BOS描述符类型 |
2 | wTotalLength | 2 | Number | 此描述符及其所有子描述符的总长度 |
4 | bNumDeviceCaps | 1 | Number | 在BOS中独立的设备能力描述符(device capability descriptors)数量 |
bLength以字节为单位的描述符大小 (0x05)。
bDescriptorTypeBOS描述符类型,为BOS(0x0F)。
wTotalLength 此描述符及其所有子描述符的总长度。主机端通过BOS描述符的wTotalLength字段获取整个BOS描述符集的大小,再通过这个大小来获取完整的描述符集。
bNumDeviceCaps 在BOS中独立的设备功能描述符(Device Capability Descriptor)数量。
获取BOS描述符
主机通过发送Get Descriptor
请求,取得BOS描述符及其附属描述符。
Get Descriptor | Value |
---|---|
bmRequestType | 0x80 |
bmRequestType.Recipient | 0b00000(Device) |
bmRequestType.Type | 0b00(Standard) |
bmRequestType.Direction | 0b1(Device-to-Host) |
bRequest | 0x06(Get Descriptor) |
wValue | 0x0f00(BOS#0) |
wIndex | 0x0000 |
wLength | 0x??? |
下面举例说明一个获取BOS描述符(BOS Descriptor)的过程。使用USB分析仪抓包,软件Total Phase Data Center。
获取一个设备的BOS描述符(BOS Descriptor),该设备的BOS描述符(BOS Descriptor)如下所示:
使用USB分析仪抓包可以看到,获取BOS描述符(BOS Descriptor),主机端先获取BOS描述符的信息,从而得到描述符集的大小,再获取第二次BOS描述符,得到整个描述符集:
BOS描述符(BOS Descriptor)的获取过程如下:
再展开看到详细的过程:
接下来详细看整个获取过程的各个字段含义:
一开始的setup包过程:
setup data:
IN包过程
OUT包过程:
完成整个BOS描述符(BOS Descriptor)的获取。
附录
Wireless USB 1.x BOS Descriptor
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bLength | 1 | Number | Size of this descriptor. |
1 | bDescriptorType | 1 | Constant | Descriptor type: BOS. |
2 | wTotalLength | 2 | Number | Length of this descriptor and all of its sub descriptors. |
4 | bNumDeviceCaps | 1 | Number | The number of separate device capability descriptors in the BOS. |
USB 3.x BOS Descriptor
Offset | Field | Size | Value | Description |
---|---|---|---|---|
0 | bLength | 1 | Number | Size of descriptor |
1 | bDescriptorType | 1 | Constant | BOS Descriptor type |
2 | wTotalLength | 2 | Number | Length of this descriptor and all of its sub descriptors |
4 | bNumDeviceCaps | 1 | Number | The number of separate device capability descriptors in the BOS |
[参考资料]
Universal Serial Bus Specification Revision 2.0
Universal Serial Bus 3.0 Specification
Universal Serial Bus 3.1 Specification
Universal Serial Bus 3.2 Specification
Wireless Universal Serial Bus Specification Revision 1.0
Wireless Universal Serial Bus Specification Revision 1.1
USB 2.0 ECN: Link Power Management (LPM)
Microsoft OS 2.0 Descriptors Specification
USB Complete, 5th Edition
USB开发大全
本文链接:https://blog.csdn.net/u012028275/article/details/109953472