1. USB协议概述:从诞生到4.0的演进之路

大家好,我是你们这趟USB之旅的向导。做嵌入式这些年,我调试过的USB设备少说也有上百种了。从最早的USB 1.1鼠标,到如今跑着USB4的固态硬盘盒,这条总线几乎贯穿了我的整个职业生涯。

今天咱们先不急着写代码,也不看寄存器。先把USB的来龙去脉、物理层长什么样、整个系统怎么搭起来——这些地基打牢了,后面你学协议解析、设备枚举才会觉得顺理成章。

1.1 USB的诞生背景:为什么要有USB?

90年代初的电脑外设接口,那叫一个乱。串口、并口、PS/2、游戏口……每个接口长得不一样,速度也参差不齐。你想接个打印机,得先搞清楚是LPT1还是LPT2;想插个鼠标,还得看是圆口还是方口。

我记得刚入行那会儿,给一台工控机装外设,光找对接口就花了半小时。更头疼的是,这些接口都不支持热插拔——插错了顺序,重启是家常便饭。

1994年,Intel、Microsoft、IBM等七家公司坐到了一起。他们想搞一个通用的、支持热插拔的、速度够用的外设总线。这就是USB——Universal Serial Bus,通用串行总线。

核心目标:一个接口,搞定所有外设。即插即用,不用重启。

1.2 发展历程:USB 1.0 → 4.0

USB从诞生到现在,经历了四次大的版本迭代。我整理了一张表,把关键参数列出来,你一眼就能看出变化。

版本 发布时间 理论速率 编码方式 接口形态
USB 1.0 / 1.1 1996 / 1998 1.5 Mbps (Low-Speed)
12 Mbps (Full-Speed)
NRZI Type-A / Type-B
USB 2.0 2000 480 Mbps (Hi-Speed) NRZI Type-A / Type-B / Mini / Micro
USB 3.0 / 3.1 / 3.2 2008 / 2013 / 2017 5 Gbps / 10 Gbps / 20 Gbps 8b/10b (3.0/3.1)
128b/132b (3.2)
Type-A / Type-B / Type-C
USB4 2019 40 Gbps 128b/132b Type-C only

说说几个关键节点吧。

USB 1.0/1.1: 最早期的版本。1.0其实没怎么铺开,1.1才是真正进入市场的。Low-Speed给鼠标键盘用,Full-Speed给打印机、扫描仪。那时候我还在学校,第一次用USB优盘拷作业,觉得这东西太神奇了——不用关机就能插拔。

USB 2.0: 这是USB真正爆发的版本。480 Mbps的速度,让外置硬盘、摄像头、网卡都成了可能。我做过一个项目,用USB 2.0做数据采集卡,跑满带宽时能到40 MB/s左右。嗯,实际吞吐量比理论值要打些折扣,这个后面讲传输类型时会细说。

USB 3.0: 从这一代开始,USB的物理层发生了质变。多了四根超高速差分线(SSTX/SSRX),和原来的D+/D-并行工作。所以USB 3.0的线缆比2.0粗很多,接口里也多了一排触点。

一个小经验: 我见过不少工程师把USB 3.0的差分线走等长时忽略了参考平面,结果信号质量差到只能降级跑2.0。布线时,SSTX和SSRX的阻抗控制一定要做到90Ω ± 15%,差分对内等长控制在5 mil以内。

USB4: 基于Intel的Thunderbolt 3协议,速度直接翻到40 Gbps。而且它强制要求Type-C接口,支持PD供电。说白了,USB4就是想把显示、数据、充电全塞进一根线里。

1.3 物理层特性:D+/D-差分信号

USB 1.x和2.0的物理层,靠的就是两根线——D+和D-。它们传输的是差分信号。

什么叫差分信号?简单说,就是数据不是用一根线的绝对电压来表示,而是用两根线之间的电压差。D+和D-在发送端被驱动成互补的电平:D+高、D-低代表一个状态;D+低、D-高代表另一个状态。

这样做的好处很明显:抗共模干扰。如果外部噪声同时耦合到D+和D-上,两者的差值基本不变。我在一个电磁环境很差的工厂里调试USB设备,差分信号帮了大忙——换成单端信号,数据早就被电机噪声淹没了。

USB 2.0的电气特性,我列几个关键参数:

  • 信号电平: 低速/全速模式下,静态时D+或D-被拉高到3.3V(通过1.5kΩ上拉电阻);高速模式下,信号摆幅只有400mV。
  • 终端电阻: 高速模式需要在D+/D-上各接45Ω对地,用来匹配传输线阻抗。
  • 边沿速率: 高速模式下,信号上升/下降时间控制在500ps到1ns之间。

避坑指南: 我曾经在一个产品上把D+和D-的走线长度差了30 mil,结果高速模式死活枚举不上。后来用示波器一看,差分对的共模噪声超标了。记住:D+/D-的等长误差最好控制在10 mil以内,而且要走在同一层,避免过孔引入不连续性。

到了USB 3.0,物理层就复杂多了。除了保留D+/D-用于兼容2.0,还新增了SSTX+/-和SSRX+/-两对差分线。它们跑的是5 Gbps甚至更高的速率,对PCB布局的要求更苛刻。

1.4 USB的拓扑结构:Host、Hub、Device

USB的拓扑结构是典型的星型结构。一个系统中只有一个Host(主机),下面可以挂Hub(集线器),Hub再扩展出多个端口接Device(设备)。

我画了一张图,帮你理解这个结构:

USB拓扑结构示意图 USB 拓扑结构 Host(主机) Root Hub(根集线器) Hub 1 Hub 2 Hub 3 Device A(鼠标) Device B(U盘) Device C(打印机) Device D(摄像头) 一个Host最多可连接127个设备(含Hub),物理层最多支持7层Hub级联

这张图里,Host在最顶层,它内部有一个Root Hub。Root Hub下面可以接Hub,Hub再往下扩展。每个Hub有多个端口,每个端口可以接一个Device,或者再接一个Hub。

这里有几个关键点:

  • Host是唯一的通信发起者。 所有数据传输都由Host发起,Device只能被动响应。你想想看,如果Device想主动发数据怎么办?它只能等Host来轮询。
  • Hub负责转发和扩展。 Hub本身不处理数据内容,它只是把Host发下来的包广播到下游端口,或者把上游的数据聚合起来发给Host。但Hub会处理一些协议层面的东西,比如复位、挂起、唤醒。
  • Device是功能实体。 它可以是鼠标、键盘、U盘、摄像头、串口转换器……每个Device都有一个唯一的地址(1~127),由Host在枚举时分配。

实际项目中的经验: 我做过一个多路数据采集系统,需要同时接8个USB摄像头。一开始直接插在PC的USB口上,结果发现带宽不够,画面卡顿。后来加了一个带独立供电的USB 3.0 Hub,把摄像头分散到不同的Hub端口上,问题就解决了。记住:Hub不是万能的,它只是扩展端口数量,带宽是共享的。

1.5 本章小结

这一章我们聊了USB的诞生背景、四个主要版本的变化、物理层的差分信号原理,以及Host-Hub-Device的拓扑结构。这些都是USB最基础的东西,但也是你后面理解协议细节的根基。