1. USB协议基础

大家好,我是老周。做嵌入式这行十几年了,从USB 1.1用到现在的USB4,可以说见证了USB从“低速鼠标接口”到“全能扩展总线”的整个过程。

今天第一章节,咱们聊聊USB协议的基础。这部分虽然比较理论,但却是后续抓包分析的基础。说白了,你得先知道USB“说”的是什么“语言”,才能读懂抓包软件里那些乱七八糟的波形和事务。

1.1 USB 规范与标准化组织

USB的全称是Universal Serial Bus,通用串行总线。这个名字很直观,就是想让各种设备用一种统一的总线方式连接。

制定USB标准的组织叫USB-IF(USB Implementers Forum,USB实施者论坛)。我的习惯是,遇到不确定的协议细节,直接去USB-IF官网查官方规范文档,那比任何二手资料都靠谱。那些规范PDF动辄几千页,咱们实战用到的核心部分其实很集中。

核心要点:USB是Host(主机)主导的总线。所有通信都由Host发起,Device(设备)只能被动响应。这一点和I2C、SPI不一样,你想想看,USB鼠标从来不会自己主动给电脑发数据,都是电脑轮询它。

1.2 版本历史与速率

USB版本迭代,主要干了三件事:提速、提功率、换接口。我个人认为,理解速率是第一位的,因为抓包数据分析时,帧长度和传输速度直接挂钩。

USB 版本 官方命名 最大速率 编码方式
USB 1.0 / 1.1 Low-Speed / Full-Speed 1.5 Mbps / 12 Mbps NRZI + 位填充
USB 2.0 High-Speed 480 Mbps NRZI + 位填充
USB 3.x SuperSpeed / SuperSpeed+ 5 Gbps / 10 Gbps / 20 Gbps 8b/10b / 128b/132b
USB4 USB4 Gen 2×2 / Gen 3×2 40 Gbps 基于Thunderbolt 3协议

我的小经验:USB 2.0 High-Speed虽然标称480 Mbps,但实际有效数据传输速率受协议开销影响,通常能跑到350-400 Mbps就算调得不错了。我在做硬盘盒项目时就为这个上限纠结了很久。

1.3 电气特性

电气特性这部分,咱们抓包时经常要确认信号质量。我踩过坑,所以分享给你们。

电压与电流:

  • VBus:标准的VBUS是5V,允许有±5%的波动。有些便携设备在长线上电压会跌到4.5V以下,这时候就容易掉线。
  • 电流:USB 2.0默认最大500mA,USB 3.0是900mA。Type-C PD(Power Delivery)协议则能把电压拉到20V、电流到5A。

信号电平:USB使用差分信号传输(D+和D-两根线)。这样说吧,D+和D-之间的电压差代表逻辑“1”或“0”。

  • Low-Speed / Full-Speed:信号幅度约3.3V,摆率较慢。
  • High-Speed:信号幅度只有400mV左右(更小的摆幅意味着更高速)。为什么这样?为了减少电磁干扰,保证480Mbps下的信号完整性。

避坑指南:我曾经遇到过一批USB设备在特定主机上无法识别,抓包发现D+线上的终端电阻焊接虚焊,导致信号反射严重。很多启动枚举失败的问题都可以靠检查D+、D-的波形来解决。

1.4 连接器类型

连接器是USB最“百花齐放”的部分。早期接口种类繁多,Type-C出现后终于一统江湖。

  • Type-A:标准长方形,Host端最常见。我建议初学者买个弯头延长线,方便接入示波器探头。
  • Type-B:正方形,常用于打印机、外置硬盘等大型设备。
  • Mini USB:2.0时代的主流小型接口,现在基本淘汰。
  • Micro USB:虽然薄,但插拔寿命有限,很多手机用久了就会接触不良。
  • Type-C:支持正反插、最高240W供电、支持DP/HDMI视频输出。它的CC(Configuration Channel,配置通道)引脚负责协商电源和角色,这也是它智能的地方。

记住这一点:抓包分析时,接头松动是信号异常的常见来源之一。很多“CRC错误”或“数据包丢失”其实只是物理连接不稳定。我习惯在长测试前先把连接器插拔几次,确保接触正常。

1.5 USB 系统拓扑

USB采用星形拓扑结构,以Host为中心,通过Hub扩展连接多个设备。拓扑层次最多7层(包括根Hub)。

USB 拓扑结构示意图 USB Host + Root Hub Hub L1 Device A (FS) Hub L2 Device B (HS) Device C (LS) 说明: • Host 是唯一主控,所有事务由 Host 发起(IN/OUT/SETUP 令牌) • 最多 7 层 Hub 深度(含根 Hub),设备不限数量但受带宽和地址限制

上图展示了一个典型的USB拓扑。总线拓扑啥意思?说白了,就是一颗星星。Host在中间,Hub和Device挂在他周围。每个数据包都先走Host到Hub,再由Hub转发给对应Device。抓包时,你看到的很多“标识符”关系都跟这个层次有关——比如SOF(Start of Frame,帧起始包)就是在Root Hub生成的。

1.6 为何关注这些基础

很多工程师觉得知道速率就够了,但实际并非如此。我在做USB视频采集卡调试时,遇到画面撕裂问题。抓包后发现是Full-Speed设备占用了USB总线带宽,影响了High-Speed设备的等时传输。如果不懂速率、电气和拓扑的映射关系,这个问题排查起来会非常痛苦。

嗯,这一节的内容就到这里。咱们把根基打牢,后面分析和调试才能胸有成竹。