1. USB 2.0 协议概述

大家好,我是老张,做 USB 测试这行有十几年了。咱们今天聊 USB 2.0,别觉得它“老”。说实话,直到今天,很多嵌入式设备、键鼠、打印机,还在用这个标准。你想想看,一个协议能活 20 多年,一定有它的道理。

我第一次接触 USB,是给一个工业相机做接口调试。那时候什么都不懂,以为插上就能用。结果呢?设备不枚举,电脑没反应。后来一步步查,才明白是 D+、D- 两根线的上拉电阻搞错了。从那以后,我就养成一个习惯:搞 USB,先从最基础的协议框架开始啃。

1.1 发展历史:从 1.0 到 2.0

USB(Universal Serial Bus)最初是英特尔、微软、康柏等几家公司在 1995 年推出的。目标很明确:把键盘、鼠标、打印机这些串口并口设备统一起来。说白了,就是不想让机箱后面挂一堆线。

  • USB 1.0(1996 年):速率只有 1.5 Mbps,用来接键盘鼠标。我没用过,但听前辈说,那个年代能“热插拔”已经是很惊艳的功能了。
  • USB 1.1(1998 年):速率提升到 12 Mbps,叫“全速”。这个版本我熟,最早一批 U 盘和摄像头用的就是它。
  • USB 2.0(2000 年):这才是重头戏。速率直接拉到 480 Mbps,叫“高速”。我记得当时为了宣传这个,厂商还搞了个“Hi-Speed USB”的贴纸,满大街都是。

我的经验:测试 USB 2.0 设备时,别光看标称速率。实际有效带宽通常只有标称的 60%-70%。因为还有协议开销、帧间隔、SOF 包等等。这个坑我栽过——有次客户说产品速度慢,我查了半天,结果发现是 bulk 传输的端点大小没配好。

1.2 速率等级:低速、全速、高速

USB 2.0 其实包含了三个速率等级。很多人以为 USB 2.0 就等于 480Mbps,这是错的。实际上,2.0 规范向下兼容 1.0 和 1.1。我拿个表来对比一下:

速率等级 标称速率 信号频率 典型应用
低速 (LS) 1.5 Mbps 1.5 MHz 鼠标、键盘、游戏手柄
全速 (FS) 12 Mbps 12 MHz 摄像头、音频设备、HID 设备
高速 (HS) 480 Mbps 480 MHz U 盘、移动硬盘、视频采集卡

这里有个关键点:高速设备刚连上时,会先以全速模式进行“握手”。具体来说,就是设备先在 D+ 线上拉高(全速模式),主机检测到后,发出复位信号,然后设备通过一个叫做“Chirp”的序列切换高速模式。这个过程在一致性测试里是必测项目,我后面会详细讲。

避坑指南:我曾经遇到过一批 USB 2.0 HUB,戴尔电脑上能跑高速,到了惠普电脑上就只能跑全速。查了很久,发现是 HUB 内部的 Chirp 时序不标准,导致 Host 没能成功协商高速。所以测试时,一定要多换几台主机试试。

1.3 拓扑结构:主机-集线器-设备

USB 2.0 采用 星型总线拓扑。听起来复杂?说白了就是一棵树。树根是主机(Host),树干是根集线器(Root Hub),树枝是集线器(Hub),树叶是设备(Device)。

为什么这么设计?为了扩展。你想想看,一个电脑只有 4 个 USB 口,你要是想插 10 个设备怎么办?接个 Hub 就行。Hub 可以再级联 Hub,最大允许级联 7 层(包括根集线器)。

下面这张图是我手绘的拓扑结构,你可以直观感受下:

USB 2.0 拓扑结构(主机 - 集线器 - 设备) USB Host(主机) Root Hub(根集线器) Hub (第1层) Mouse Keyboard U盘 (HS) Hub (第2层) Camera Printer Hub L3 Device 注:最大允许级联 7 层(含 Root Hub),超过会导致信号衰减和不枚举

从这张图你就能看出来,主机是整个 USB 世界的“大脑”。所有通信都由主机发起,设备只是被动响应。集线器的作用是“转发”和“供电”。嗯,这里要注意:集线器本身也是 USB 设备,所以它也有自己的地址和端点。

1.4 设备枚举:一个新设备怎么被发现?

当你把一个 U 盘插进电脑,从物理连接到弹出盘符,中间发生了什么?这个过程叫“设备枚举”。我用最简单的语言给你捋一遍:

  1. 接入:设备插入 Hub 的端口,D+/D- 线上电。
  2. 检测:Hub 检测到端口状态变化(D+ 或 D- 被拉高),然后通知主机。
  3. 复位:主机让 Hub 对这个端口发送复位信号(SE0,持续至少 10ms)。
  4. 分配地址:复位完成后,设备以默认地址 0 响应。主机给它分配一个唯一地址(1~127)。
  5. 读取描述符:主机读取设备的设备描述符(vendor ID、product ID、所属类等)。
  6. 配置:主机选择一种配置,设备进入工作状态。

测试小技巧:我常用的一个排查方法是,用逻辑分析仪抓取 D+ 和 D- 线上的复位信号。如果复位时长不够(比如只有 5ms),很多设备会翻车。记住:规格书要求至少 10ms,我个人习惯留 2ms 余量,做到 12ms 以上。

1.5 为什么理解拓扑很重要?

做一致性测试,你迟早会遇到“拓扑深度影响信号质量”的问题。比如,你用一个笔记本直接测 U 盘,眼图可能是漂亮的。但如果你把这个 U 盘接在 3 层 Hub 后面再测,眼图很可能就闭合了。

为什么会这样?

  • 每经过一层 Hub,信号都会增加抖动(Jitter)。
  • USB 2.0 高速信号是 480MHz,对线缆和 PCB 走线非常敏感。
  • 集线器内部的 re-driver 质量参差不齐,我见过便宜的 Hub 直接把信号“鬼畜化”了。

所以,测试规范建议设备在最差拓扑条件下仍能通过一致性测试。也就是说,你设计产品时,要假设用户会把它插在一个廉价 3 米延长线加两层老旧 Hub 的后面。

血泪教训:我曾经负责一个 USB 摄像头项目,实验室环境测所有指标都过了。结果发到客户手里,他们说在某些笔记本上图像卡顿。我搬来 8 种不同品牌的笔记本复现,最后发现是某款笔记本的 Hub 芯片发出来的 SOF(帧起始包)有严重的占空比失真。从那以后,我的测试矩阵里就多了一条:必须接 3 层 Hub 做压力测试。

1.6 知识结构一览

好了,第一章的东西我帮你总结下。你可以把它作为思维导图的中心:

核心概念 关键点 测试关注点
发展历史 1.0→1.1→2.0,向下兼容 高速握手(Chirp)时序
速率等级 LS: 1.5M, FS: 12M, HS: 480M 眼图模板、信号幅度、上升时间
拓扑结构 星型,最多7层级联 信号衰减、抖动累积
设备枚举 复位→地址分配→描述符读取 复位时长、描述符内容一致性

这一章的内容就到这儿。后面我们会逐一深入每一个测试项,包括信号质量、协议层、电气特性等等。准备好了吗?