1. USB协议概述:从1.0到4,高速是怎么来的
大家好,我是你们的USB协议讲师。做了十几年嵌入式,我可以说跟USB打了半辈子交道。从最早的USB 1.1鼠标,到现在的USB4硬盘盒,这个协议一路演变,说实话变化非常大。
这章咱们先不急着抠细节。先把USB的发展脉络捋清楚,搞明白高速(High Speed)到底是个什么位置的角色。底子打好了,后面学解码参数才不费劲。
1.1 USB发展简史
USB的出现,说白了就是为了干掉那一堆又大又乱的串口、并口、PS/2口。1996年USB 1.0刚出来的时候,速率只有1.5Mbps,叫Low Speed。当时主要给键盘鼠标用。嗯,确实很慢,但至少能热插拔了,这在当时可是个大进步。
1998年USB 1.1来了,把速率提到了12Mbps,叫Full Speed。我记得最早做嵌入式项目时,还在用USB 1.1传数据。那时候一个U盘拷个几MB的文件都得等半天,但你已经觉得很方便了——毕竟不用装驱动嘛。
关键转折点:USB 2.0 —— 2000年发布的USB 2.0把速率一下子拉到480Mbps,命名为High Speed(高速)。这个版本彻底改变了USB的命运。打印机、扫描仪、外置硬盘、视频采集卡……都开始用USB了。
USB 2.0向下兼容1.1和1.0,也就是说你插一个全速设备到2.0口上,它会自动降速。这个兼容设计我非常欣赏,但它也带来了一些麻烦——后面讲枚举流程时会提到。
2008年USB 3.0推出,速率飙到5Gbps,叫SuperSpeed。3.0加了额外的物理通道,所以插头里的针脚多了好几根。你在项目中看到蓝色舌头的USB口,那就是3.0。
再往后USB 3.1(10Gbps)、USB 3.2(20Gbps),命名上折腾了好几轮。我个人习惯直接看速率,不看版本号——厂商的命名实在太乱。2019年USB4发布,基于Thunderbolt 3协议,速率最高40Gbps。到了这个阶段,USB已经不光传数据了,还能同时传视频和供电。
一个实用的识别方法: USB 2.0接口内部通常是黑色或白色的塑料舌片,USB 3.0是蓝色的,USB 3.1是蓝绿色或红色的。USB4 Type-C接口则是全功能的,不只看颜色,还得看协议支持。
1.2 什么是USB高速(High Speed)
高速模式在USB 2.0规范里正式定义,速率480Mbps。注意,这是原始比特率。去掉协议开销后,实际有效吞吐量大约在280Mbps~320Mbps之间,具体取决于传输类型和帧结构。
为什么会差这么多?因为USB是主机轮询的协议,每一帧都有开销。高速模式下帧周期是125µs(微帧),比全速的1ms短很多。所以虽然开销比例差不多,但高速的延迟和吞吐表现都比全速好得多。
编码方式上,高速用的是NRZI(Non Return to Zero Inverted)加上位填充。NRZI是一种差分编码,遇到0就翻转电平,遇到1保持不变。为了避免长时间没有电平跳变导致时钟失锁,协议规定连续6个1之后必须插入一个0——这就是位填充。
避坑指南: 我在项目中遇到过USB高速信号质量不过关的问题。线缆稍微长一点,或者PCB走线没控好阻抗,高速信号就容易出现眼图闭合。我曾经帮一个客户排查过,他们用了一根2米长的劣质USB线接高速摄像头,结果一直枚举失败。换成1.5米的屏蔽线,问题立刻解决。高速模式下,线缆质量真的不是玄学。
物理层差异方面,高速模式对端接电阻的要求和全速/低速不一样。高速模式下,D+和D-线上各需要45Ω的下拉电阻到地,而全速/低速需要15kΩ的下拉。这也是为什么USB 2.0的PHY芯片会比1.1的复杂很多。
1.3 高速 vs 全速 vs 低速:一表看懂
下面这个表格,我建议你收藏。做项目选型时经常要用到。
| 参数 | Low Speed(低速) | Full Speed(全速) | High Speed(高速) |
|---|---|---|---|
| 规范版本 | USB 1.0 | USB 1.1 | USB 2.0 |
| 标称速率 | 1.5 Mbps | 12 Mbps | 480 Mbps |
| 实际吞吐(约) | 0.9 MB/s | 7 MB/s | 280~320 Mbps |
| 帧周期 | 1 ms | 1 ms | 125 µs(微帧) |
| 编码方式 | NRZI + 位填充 | NRZI + 位填充 | NRZI + 位填充 |
| 信号电压 | 3.3V 差分 | 3.3V 差分 | 400mV 差分 |
| 终端电阻 | D+ 15kΩ 下拉 | D- 15kΩ 下拉 | D+/D- 45Ω 下拉 |
| 推荐线缆长度 | ≤ 5m | ≤ 5m | ≤ 5m(实际建议3m以内) |
| 典型设备 | 鼠标、键盘 | 音频、HID、打印机 | U盘、硬盘、摄像头 |
你看,高速和全速虽然编码方式一样,但信号电压从3.3V降到了400mV。为什么?因为频率上去了,高摆幅的信号在高速下会产生很大的EMI和功耗。所以高速PHY用低压差分信号来降低干扰。这也是为什么高速线缆的屏蔽要求比全速高很多。
选型时我的建议: 如果你的设备只需要传几KB的控制数据(比如一个传感器),用全速就够了,没必要上高速。高速PHY的功耗和BOM成本都比全速高。但如果你要做U盘、摄像头或者数据采集卡,直接上高速,别犹豫。
搞清楚了这三种速率的定位,你就能明白为什么USB协议栈里要对它们分开处理。高速的帧结构、事务格式、握手协议都和全速/低速不一样。后面几章会深入到字节级别去拆解这些差异。
这张图把USB从1.0到USB4的演进路线画出来了。你可以清楚看到,高速(480Mbps)正好卡在中间位置——它比全速快了40倍,而它后面的3.0又比它快了10倍。但说实话,从协议复杂度来看,高速到超高速的变化,比全速到高速的变化小得多。USB 3.0虽然速率高,但它是在高速协议外面加了一套独立的超高速通道,并不是把高速协议改掉了。
所以,学好高速协议,就等于吃透了USB协议的核心。后面3.x和USB4的那些扩展,理解起来会顺手很多。
嗯,这一章的内容就是这些。把USB的版本脉络和三种速率的差异搞清楚,咱们就可以往下深入了。