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

发布于:2025-08-14 ⋅ 阅读:(23) ⋅ 点赞:(0)

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

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

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

字段 长度 作用
SYNC 8 位(FS/LS),32 位(HS) 用于接收端时钟恢复与包起始同步
PID 8 位 Packet Identifier,标识包类型(高 4 位 = PID 类型,低 4 位为高 4 位的反码)
PAYLOAD 可变 数据或地址等内容
CRC 5 位(Token 包),16 位(Data 包) 循环冗余校验,用于检测错误
EOP SE0(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)

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

3.2 配置描述符(Configuration Descriptor)

字段 长度 含义
bLength 1 固定 9
bDescriptorType 1 0x02 表示 Configuration
wTotalLength 2 此配置下所有描述符总长度
bNumInterfaces 1 接口数量
bConfigurationValue 1 配置编号
iConfiguration 1 配置名称字符串索引
bmAttributes 1 电源特性(位 6=自供电,位 5=远程唤醒)
bMaxPower 1 最大功耗(单位 2mA)

3.3 接口描述符(Interface Descriptor)

字段 长度 含义
bLength 1 固定 9
bDescriptorType 1 0x04 表示 Interface
bInterfaceNumber 1 接口编号
bAlternateSetting 1 备用设置编号
bNumEndpoints 1 此接口端点数量
bInterfaceClass/SubClass/Protocol 各 1 接口类信息
iInterface 1 接口字符串索引

3.4 端点描述符(Endpoint Descriptor)

字段 长度 含义
bLength 1 固定 7
bDescriptorType 1 0x05 表示 Endpoint
bEndpointAddress 1 位7方向(0=OUT,1=IN),位0-3端点号
bmAttributes 1 传输类型(0=Control,1=Iso,2=Bulk,3=Interrupt)
wMaxPacketSize 2 最大包长(含额外事务数)
bInterval 1 轮询间隔(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 标志
    • 传输方向、速度、数据量等。

网站公告

今日签到

点亮在社区的每一天
去签到