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 世界的“大脑”。所有通信都由主机发起,设备只是被动响应。集线器的作用是“转发”和“供电”。嗯,这里要注意:集线器本身也是 USB 设备,所以它也有自己的地址和端点。
1.4 设备枚举:一个新设备怎么被发现?
当你把一个 U 盘插进电脑,从物理连接到弹出盘符,中间发生了什么?这个过程叫“设备枚举”。我用最简单的语言给你捋一遍:
- 接入:设备插入 Hub 的端口,D+/D- 线上电。
- 检测:Hub 检测到端口状态变化(D+ 或 D- 被拉高),然后通知主机。
- 复位:主机让 Hub 对这个端口发送复位信号(SE0,持续至少 10ms)。
- 分配地址:复位完成后,设备以默认地址 0 响应。主机给它分配一个唯一地址(1~127)。
- 读取描述符:主机读取设备的设备描述符(vendor ID、product ID、所属类等)。
- 配置:主机选择一种配置,设备进入工作状态。
测试小技巧:我常用的一个排查方法是,用逻辑分析仪抓取 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层级联 | 信号衰减、抖动累积 |
| 设备枚举 | 复位→地址分配→描述符读取 | 复位时长、描述符内容一致性 |
这一章的内容就到这儿。后面我们会逐一深入每一个测试项,包括信号质量、协议层、电气特性等等。准备好了吗?