USB 基本描述符
本篇文章带大家学习usb的各种标准描述符,可能有些枯燥,但是熟悉了之后就了解了这些信息是如何构建出usb的四通八达的设备使用的,你可以理解描述符就是设备的简历,供host来查阅,相当于之前在dts里面配置的node信息跑到设备本身上了,这样才能实现热拔插的效果,当然,每个类专属的描述符这里暂时没有篇幅介绍
设备描述符(Device Descriptor)
作用:描述整个 USB 设备的总体信息,包括厂商、产品、支持的 USB 版本等。
特点:
每个设备只有一个设备描述符
主机在
GET_DESCRIPTOR
请求时会优先读取它
关键字段:
bLength
:描述符长度(固定 18 字节)bDescriptorType
:类型(0x01 表示设备描述符)bcdUSB
:支持的 USB 版本(如 0x0200 表示 USB 2.0)idVendor
/idProduct
:厂商 ID 和产品 ID
BOS 描述符(Binary Object Store Descriptor)
作用:USB 3.x 设备的扩展描述符集合,用于声明设备支持的高级特性(如 USB 2.0 Extension、SuperSpeed Capability、Container ID 等)。
层级:
BOS Descriptor
Device Capability Descriptor(可有多个)
一个设备能力描述符的格式如下,感觉有一点学习pcie搞一堆cap的感觉
总共就是这些个能力
挑几个经典的能力讲一下
USB 2.0 Extension
SuperSpeed USB Device Capability
Container ID
Platform Descriptor
SuperSpeedPlus USB Device Capability
Precision Time Measurement
Configuration Summary Descriptor
配置描述符(Configuration Descriptor)
作用:描述设备的一种具体工作配置(包括接口和端点结构)。
特点:
一个设备可以有多个配置,但通常只有一个
切换配置需要重新枚举
关键字段:
wTotalLength
:该配置下所有子描述符(接口 + 端点)的总长度bNumInterfaces
:接口数量bmAttributes
:供电方式、是否支持远程唤醒
接口关联描述符(Interface Association Descriptor (IAD))
作用 将一组相关接口描述符绑定为一个功能单元(Function),方便操作系统识别为同一逻辑设备(如 USB 复合设备中的 CDC ACM)。
特点
解决一个功能需要多个接口的问题(例如 CDC ACM 需要一个通信接口和一个数据接口)
必须放在关联的第一个接口描述符前面
在 USB 2.0 起引入
常见字段
bFirstInterface
:关联的第一个接口号bInterfaceCount
:接口数量bFunctionClass / bFunctionSubClass / bFunctionProtocol
:功能类别信息iFunction
:功能字符串索引
接口描述符(Interface Descriptor)
作用:描述某个功能接口,比如一个接口可以代表 HID 键盘、UVC 摄像头视频流等。
特点:
一个配置可以包含多个接口
每个接口可以有多个备用设置(Alternate Setting),用于切换不同带宽或功能
关键字段:
bInterfaceNumber
:接口编号bAlternateSetting
:备用设置编号bNumEndpoints
:端点数量(不包括端点 0)bInterfaceClass
/bInterfaceSubClass
/bInterfaceProtocol
:接口类信息(决定驱动匹配)
端点描述符(Endpoint Descriptor)
作用:描述 USB 通信中的端点属性(除控制端点 0 外的其他端点)。
关键字段:
bEndpointAddress
:端点地址(高位表示方向 IN/OUT,低位表示端点号)bmAttributes
:传输类型(控制、批量、同步、等时)wMaxPacketSize
:最大包长度bInterval
:轮询间隔(对中断/同步传输有意义)
超高速端点伴随描述符(SuperSpeed Endpoint Companion Descriptor)
作用 为 USB 3.0(SuperSpeed)端点提供额外的能力信息,例如最大包数、多包事务支持等,用于补充标准端点描述符。
特点
仅在 USB 3.0 及以上版本存在
和标准端点描述符成对出现,紧跟在它后面
提供 SuperSpeed 模式下额外的传输性能参数
常见字段
bMaxBurst
:一次事务中可连续传输的最大包数(0 表示 1 个包)bmAttributes
:额外属性(如多包事务、多流支持)wBytesPerInterval
:等时传输时,每个服务间隔可传输的最大字节数
超高速加 等时传输端点 伴随描述符(SuperSpeedPlus Isochronous Endpoint Companion Descriptor)
作用 为 USB 3.1/3.2(SuperSpeedPlus)等时传输端点提供更精细的性能参数,例如更高带宽、多倍采样等。
特点
仅在 SuperSpeedPlus(10Gbps / 20Gbps)模式下使用
专门用于 等时(Isochronous) 端点
紧跟在 SuperSpeed Endpoint Companion Descriptor 后面
常见字段
wReserved
:保留字段(对齐/扩展用)dwBytesPerInterval
:每个服务间隔的最大传输字节数(32 位,支持更大值)
字符串描述符(String Descriptor)
作用:提供可读的字符串信息,如厂商名、产品名、序列号等。
特点:
UTF-16LE 编码
索引由设备/配置描述符中的字段给出
常见类型:
iManufacturer
:厂商名iProduct
:产品名iSerialNumber
:序列号
unicode版本