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

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.xdnf.cn/news/17627.html

相关文章:

  • 视频播放器哪个好用?视频播放器PotPlayer,KMP Player
  • 下一个排列 的 思路总结
  • 从零开始的云计算生活——项目实战容器化
  • 标准IO详解(fgets、gets、fread、fwrite、fseek 等应用)
  • Java 包装类简单认识泛型
  • 《深度解构:React与Redux构建复杂表单的底层逻辑与实践》
  • C#使用EPPlus读写Excel
  • ubuntu20.04交叉编译vlc3.0.21 x64 windows版本
  • 大模型落地:AI 技术重构工作与行业的底层逻辑
  • Pytest 全流程解析:执行机制与报告生成实战指南
  • java 插入式注解的打开方式!
  • MySQL,Redis重点面试题
  • SQL179 每个6/7级用户活跃情况
  • Spring Framework源码解析——BeanPostProcessor
  • 【学习嵌入式day-22-Linux软件编程-IO】
  • SpringBoot集成支付宝二维码支付接口详解
  • Python3.10 + Firecrawl 下载 Markdown 文档:构建高效通用文章爬虫
  • 不同FPGA开发板系统移植步骤
  • Chrome插件开发【Service Worker练手小项目】
  • 【LeetCode刷题集】--排序(三)
  • 【智能的起源】人类如何模仿,简单的“刺激-反应”机制 智能的核心不是记忆,而是发现规律并能迁移到新场景。 最原始的智能:没有思考,只有简单条件反射
  • Mamba 原理汇总2
  • AI(2)-神经网络(激活函数)
  • 支持小语种的在线客服系统,自动翻译双方语言,适合对接跨境海外客户
  • 数据结构-数组扩容
  • 开发指南130-实体类的主键生成策略
  • Apache ECharts 6 核心技术解密 – Vue3企业级可视化实战指南
  • 排错000
  • 基于 ZooKeeper 的分布式锁实现原理是什么?
  • windows上RabbitMQ 启动时报错:发生系统错误 1067。 进程意外终止。