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

USB基础 -- USB相关协议字段解析

USB 协议的字段。按 物理层包结构 → 协议层 Token/Data/Handshake 包 → 描述符字段 → 状态机相关字段 的顺序展开。

1. 物理层与基础包格式字段

在 USB 1.1/2.0 中,所有包的传输都遵循相同的低层结构,主要字段包括:

字段长度作用
SYNC8 位(FS/LS),32 位(HS)用于接收端时钟恢复与包起始同步
PID8 位Packet Identifier,标识包类型(高 4 位 = PID 类型,低 4 位为高 4 位的反码)
PAYLOAD可变数据或地址等内容
CRC5 位(Token 包),16 位(Data 包)循环冗余校验,用于检测错误
EOPSE0(Single-Ended Zero)+ J包结束信号

2. 协议层包类型字段

USB 协议分为 Token 包、Data 包、Handshake 包、Special 包,每种包的字段定义不同。

2.1 Token 包(IN、OUT、SETUP)

+---------+-------------------+--------+------+
| PID(8)  | ADDR(7) + ENDP(4) | CRC5(5)| EOP  |
+---------+-------------------+--------+------+
  • PID:区分是 IN/OUT/SETUP/SOF。
  • ADDR:设备地址(0~127)。
  • ENDP:端点号(0~15)。
  • CRC5:对 ADDR+ENDP 做 CRC5 校验。

2.2 Data 包(DATA0、DATA1、DATA2、MDATA)

+---------+------------+---------+------+
| PID(8)  | Data(0~n)  | CRC16(16) | EOP |
+---------+------------+---------+------+
  • PID:标识数据包类型(DATA0/1/2/MDATA)。
  • Data:负载数据,长度受 MaxPacketSize 限制。
  • CRC16:覆盖 Data 部分。

2.3 Handshake 包(ACK、NAK、STALL、NYET)

+---------+------+
| PID(8)  | EOP  |
+---------+------+
  • ACK:确认收到数据。
  • NAK:暂时无数据或不可接收。
  • STALL:功能错误,需要主机重新配置。
  • NYET(HS 专用):表示已部分接收但未准备好下一包。

2.4 Special 包

  • SOF(Start of Frame):同步帧,包含帧号字段。
  • PING:高速设备确认是否可以发送数据。
  • SPLIT:用于分割传输(USB Hub HS→FS/LS)。

3. 描述符(Descriptors)字段

USB 枚举时,设备通过 标准描述符 向主机报告自身能力,每个描述符都有固定字段结构:

3.1 设备描述符(Device Descriptor)

字段长度含义
bLength1描述符长度(固定 18)
bDescriptorType1类型(0x01 表示 Device)
bcdUSB2USB 版本(如 0x0200 = USB2.0)
bDeviceClass/SubClass/Protocol各 1设备类、子类、协议
bMaxPacketSize01端点 0 最大包长(8/16/32/64)
idVendor / idProduct各 2VID/PID
bcdDevice2设备版本号
iManufacturer / iProduct / iSerialNumber各 1字符串描述符索引
bNumConfigurations1支持的配置数量

3.2 配置描述符(Configuration Descriptor)

字段长度含义
bLength1固定 9
bDescriptorType10x02 表示 Configuration
wTotalLength2此配置下所有描述符总长度
bNumInterfaces1接口数量
bConfigurationValue1配置编号
iConfiguration1配置名称字符串索引
bmAttributes1电源特性(位 6=自供电,位 5=远程唤醒)
bMaxPower1最大功耗(单位 2mA)

3.3 接口描述符(Interface Descriptor)

字段长度含义
bLength1固定 9
bDescriptorType10x04 表示 Interface
bInterfaceNumber1接口编号
bAlternateSetting1备用设置编号
bNumEndpoints1此接口端点数量
bInterfaceClass/SubClass/Protocol各 1接口类信息
iInterface1接口字符串索引

3.4 端点描述符(Endpoint Descriptor)

字段长度含义
bLength1固定 7
bDescriptorType10x05 表示 Endpoint
bEndpointAddress1位7方向(0=OUT,1=IN),位0-3端点号
bmAttributes1传输类型(0=Control,1=Iso,2=Bulk,3=Interrupt)
wMaxPacketSize2最大包长(含额外事务数)
bInterval1轮询间隔(ms)

4. 状态机相关字段

  • Device Address:由 SET_ADDRESS 请求设置(0~127)。
  • Data Toggle:DATA0/DATA1 交替标志,保证数据顺序。
  • Frame Number:SOF 帧号(11 位),同步等时传输。
  • Configuration Value:当前选择的配置(来自 SET_CONFIGURATION)。
  • Interface Setting:接口的备用设置值(Alternate Setting)。

5. 高速与特殊字段

  • bInterval(HS 下等时端点):以微帧为单位(125μs)。

  • NYET:高速 Bulk/Control OUT 事务的延迟应答。

  • SPLIT 包字段

    • HubAddr、Port、Start/Complete 标志
    • 传输方向、速度、数据量等。
http://www.dtcms.com/a/329952.html

相关文章:

  • 三种DuckDB电子表格插件的union all查询性能对比
  • AI视频监控:重构安防行业智能化新生态
  • 教育元宇宙:一场重构教育生态的数字革命
  • Redis中灵活结合SET和SETEX的方法及多语言工具库实现
  • 松下继电器
  • CMSIS(cortex 微控制器软件接口标准)是什么?
  • 除了响应式数据还有哪些类型数据
  • Python图像处理基础(十三)
  • Excel怎么筛选重复项?【图文详解】查找/删除重复项?查找重复项公式?如何去重?
  • 网络安全和基础设施安全局 (CISA) 表示微分段不再是可选的
  • 在 uniapp 里使用 unocss,vue3 + vite 项目
  • Html5-canvas动态渐变背景
  • uniapp授权登录
  • AI服务器需求激增,三星内存与SSD供不应求,HBM与DDR5成关键驱动力
  • docker安装centos
  • AI新贵叫板谷歌Chrome:AI 搜索的入口之战
  • Squash Merge(压缩合并)和Rebase Merge(变基合并)介绍
  • 航电系统数据传输模块技术解析
  • 367. 有效的完全平方数
  • 【R语言】R语言的工作空间映像(workspace image,通常是.RData)详解
  • 力扣面试150题--三角形最小路径和 最小路径和 不同路径 最长回文子串
  • 说说内存泄漏的常见场景和排查方案?
  • 【OpenGL】LearnOpenGL学习笔记07 - 摄像机
  • 记某一次仿真渗透测试
  • 【关于Java的常用类】
  • Unity中启用DLSS 【NVIDIA】
  • Python 类元编程(导入时和运行时比较)
  • Java Web开发:Session与Cookie详细入门指南
  • 看懂 Linux 硬件信息查看与故障排查
  • 网站交互中存储信息的主要方式