第二章:USB物理层基础

学USB测试,第一关就是搞懂物理层。很多人一上来就盯着协议分析仪看包,结果信号质量不行,啥都白搭。我做了这么多年测试,有个深刻体会:物理层是USB的根,根不牢,地动山摇。

这一章,咱们把差分信号、电压摆幅、阻抗匹配、终端电阻还有信号编码这些底子活儿,一次说透。

2.1 差分信号——为什么是它?

USB为什么用差分信号,而不是传统的单端?说白了,就是扛干扰能力强。你想想,一根线传数据,外面来点电磁干扰,信号就变了。但差分信号用两根线,一根传正,一根传负,干扰来了两根线一起变,接收端一相减,干扰就被抵消了。

我在项目中遇到过最典型的问题:客户说他们的USB 2.0设备偶尔丢包,我一看PCB走线,D+和D−两根线走了不同的层,长度差了好几毫米。差分信号讲究的就是对称,你不对称,共模干扰就滤不干净。

核心原则:差分对的两根走线必须等长、同层、紧耦合。差一点,眼图就塌了。
对比项单端信号差分信号
抗干扰能力弱强(共模抑制)
电压摆幅大(3.3V/5V)小(USB 2.0约400mV)
EMI高低
布线要求相对宽松严格对称

2.2 电压摆幅与终端电阻

USB 2.0的差分信号电压摆幅,低速和全速是0V到3.3V(单端),高速则是400mV(差分峰值-峰值)。为什么会变小?因为速率上去了,电压摆幅大了功耗和EMI都受不了。

接收端怎么知道信号是“0”还是“1”?这就要求终端电阻匹配。USB 2.0的高速模式,D+和D−对地要接45Ω的电阻(实际是集成在收发器里的),而且在主机端还有Rterm(终端电阻)做匹配。我在调试一块USB 3.0的板子时,发现信号反射特别严重,最后查出来是终端电阻的精度只有5%,换成1%的电阻,眼图立刻干净了。

  • 低速/全速:终端电阻在主机端是15kΩ下拉,设备端是1.5kΩ上拉。
  • 高速:主机和设备各自的D+/D−都要接45Ω到地。
  • USB 3.x/4:差分阻抗要求是90Ω±15%。(推荐控制在±5%以内)
避坑提醒:我曾经遇到一块USB 3.0的测试板,差分阻抗测出来只有75Ω,查了半天发现是PCB的叠层计算有误,介质厚度不对。阻抗匹配一旦偏离,信号反射就会导致误码。所以打样前一定要跟PCB厂确认叠层和阻抗线宽。

2.3 阻抗匹配——信号完整性第一课

阻抗匹配,说白了就是让传输线的阻抗和驱动端、接收端的阻抗保持一致。如果不匹配,信号走到阻抗突变的地方就会反射。反射回来的信号跟原信号叠加,眼图就会出现“眼皮”变厚、抖动加大。

举个例子:USB 2.0高速要求差分阻抗是90Ω±15%。我习惯留余量,设计时按90Ω±5%来算。为什么?因为PCB生产有公差,你卡着15%做,量产一波动就超标了。

// 计算微带线差分阻抗的近似公式(经验值,高频建议用场求解器)
// 介质高度 h,线宽 w,线间距 s,介电常数 εr
// 单端阻抗 Z0 ≈ 87 / sqrt(εr + 1.41) * ln(5.98h / (0.8w + t))
// 差分阻抗 Zdiff ≈ 2 * Z0 * (1 - 0.48 * exp(-0.96 * s/h))
个人习惯:拿到一块新板子,我会先用TDR(时域反射计)看阻抗曲线。如果有凸起或凹陷,说明有阻抗不连续点。USB 3.x的阻抗匹配比2.0严格得多,因为速率高,一点点反射都是灾难。

2.4 信号编码——NRZI / 8b10b / 128b132b

信号不光要传出去,还要能同步。USB的编码方式经历了三代,我来捋一捋。

NRZI(不归零翻转编码)

这是USB 1.x和2.0低速/全速用的编码。规则很简单:遇到数据“0”就翻转电平,遇到“1”就不翻转。好处是没有直流分量,坏处是如果连续太多“1”,时钟就不同步了。所以USB规定每6位数据必须插入一个“0”来强制翻转。我刚开始学的时候总觉得这编码别扭,后来想想,其实就是为了省成本,不需要额外的时钟线。

8b10b编码

USB 3.0用了这种编码。8位数据变成10位发送,多出来的2位用来保证直流平衡和足够的翻转密度。代价是20%的带宽损耗,但换来更好的信号质量。我记得第一次看8b10b的编码规则时头都大了,后来做了一次眼图测试,对比NRZI和8b10b的抖动,8b10b明显干净很多。

128b132b编码

USB 3.1 Gen2和USB4用的是这个。128位数据只加4位校验,编码效率高达96.97%,比8b10b高多了。但实现复杂度也上去了。我在测试USB4信号时发现,128b132b对时钟恢复的算法要求很高,如果锁相环(PLL)不够好,容易失锁。

编码类型效率使用标准特点
NRZI≈80%USB 1.x / 2.0低速/全速简单,需位填充
8b10b80%USB 3.0 / 3.1 Gen1直流平衡好,20%开销
128b132b96.97%USB 3.1 Gen2 / USB4高带宽利用率,编解码复杂
我的建议:做一致性测试时,先搞清楚被测设备是哪代编码。用8b10b的设备看眼图重点看抖动,用128b132b的设备重点看SSP(S参数硅峰)和去加重表现。

2.5 一张图串起物理层逻辑

下面这张图,把USB物理层的核心要素串在一起。从发送端的编码,到差分对传输,再到终端匹配和接收端的解码,环环相扣。

USB物理层核心要素流程图 发送端 NRZI / 8b10b / 128b132b 编码 + 位填充 / scrambler 差分信号对 D+ / D− 紧耦合 阻抗匹配 90Ω ± 15% 终端电阻 45Ω / 1.5kΩ / 15kΩ 接收端 时钟恢复 (CDR) 眼图 / 抖动 物理层测试关注点 1. 信号质量:眼高 / 眼宽 / 抖动 / 共模电压 2. 阻抗:TDR阻抗曲线 / 回损 (RL) / 插损 (IL) 3. 编码:同步头 / 位填充 / 误码率 (BER) SRIS/SSC

这张图里有个关键点我想强调:终端电阻和阻抗匹配不是一回事。终端电阻是物理器件(比如45Ω电阻到地),阻抗匹配是传输线的特性。两者必须协同,才能让信号干净地到达接收端。我在测试中见过不少设计,终端电阻用的很标准,但PCB走线的阻抗没控制好,结果眼图照样不合格。

2.6 本章小结

USB物理层看似啰嗦,但抓住三个核心点就行:

  • 差分对:等长、同层、紧耦合,这是基本功。
  • 阻抗:90Ω差分阻抗要留裕量,别卡着15%的边。
  • 编码:不同版本差异大,测试时先看清是NRZI、8b10b还是128b132b。