当前位置: 首页 > news >正文

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版本

http://www.dtcms.com/a/326124.html

相关文章:

  • Go 多进程编程-管道
  • C++方向知识汇总(三)
  • 面试实战 问题二十三 如何判断索引是否生效,什么样的sql会导致索引失效
  • git:分支
  • 3Ds Max的魔改利器:RailClone - 程序化建模的革命者
  • MySQL 经典练习 50 题(完美解答版,提供解题思路)
  • Spring Framework源码解析——DisposableBean
  • Oracle数据库中的Library cache lock和pin介绍
  • Java多线程并发控制:使用ReentrantLock实现生产者-消费者模型
  • js异步操作 Promise :fetch API 带来的网络请求变革—仙盟创梦IDE
  • 机器翻译:Bahdanau注意力和Luong注意力详解
  • 【浮点数存储】double类型注意点
  • 理解LangChain — Part 3:链式工作流与输出解析器
  • Notepad--:国产跨平台文本编辑器,Notepad++ 的理想替代方案
  • 写一篇Ping32和IP-Guard的对比,重点突出Ping32
  • 循环控制:break和continue用法
  • 鸿蒙flutter项目接入极光推送
  • Java项目基本流程(三)
  • Orange的运维学习日记--38.MariaDB详解与服务部署
  • linux安装和使用git
  • Elasticsearch 官方 Node.js 从零到生产
  • docker部署elasticsearch-8.11.1
  • 网络的基本概念、通信原理以及网络安全问题
  • YOLOv6深度解析:实时目标检测的新突破
  • 时序数据库为什么选IoTDB?
  • 爬虫与数据分析结合案例
  • STM32 HAL驱动MPU6050传感器
  • p6spy和p6spy-spring-boot-starter的SpringBoot3集成配置
  • 高性能Web服务器
  • java基础概念(二)----变量(附练习题)