当前位置: 首页 > 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.lryc.cn/news/619842.html

相关文章:

  • 高防IP的防护原理是什么?
  • Linux系统之ELF文件
  • BAV99WT1G ON安森美 双串联高速开关二极管 集成电路IC
  • Kafka工作机制深度解析:Broker、Partition 与消费者组协作原理
  • C# WPF本地Deepseek部署
  • WPF 开发的瑞士军刀:Prism 框架从入门到精通指南
  • webrtc弱网-QualityRampUpExperimentHelper类源码分析与算法原理
  • VMD+皮尔逊+降噪+重构(送报告+PPT)Matlab程序
  • 在前端js中使用jsPDF或react-to-pdf生成pdf文件时,不使用默认下载,而是存储到服务器
  • 存量竞争下的破局之道:品牌与IP的双引擎策略|创客匠人
  • 基于elk实现分布式日志
  • ELK开启安全策略
  • web安全开发,在线%射击比赛管理%系统开发demo,基于html,css,jquery,python,django,三层mysql数据库
  • 【微实验】基频提取的MATLAB实现(优化版)
  • 基于MATLAB的图像处理与圆弧拟合技术
  • 深度学习(6):参数初始化
  • Jenkins(集群与流水线配置)
  • 卷积神经网络(CNN):卷积和池化
  • 常用 MaxKB 函数库(HTTP、MYSQL)
  • Day 39: 图像数据与显存
  • 智算赋能:移动云助力“世界一流数据强港”建设之路
  • 深度学习·ExCEL
  • RK3568项目(十五)--linux驱动开发之进阶驱动
  • Spring Boot (v3.2.12) + application.yml + jasypt 数据源加密连接设置实例
  • Java Stream API 中常用方法复习及项目实战示例
  • AR技术赋能风电组装:效率提升30%,错误率降低50%
  • 华为悦盒EC6108V9-1+4G版-盒子有【蓝色USB接口】的特殊刷机说明
  • UniApp开发常见问题及解决办法
  • RabbitMQ面试精讲 Day 21:Spring AMQP核心组件详解
  • FluxApi - 使用Spring进行调用Flux接口