第3章 超高速USB(USB 3.x)特点:Gen1/Gen2差异、SuperSpeed与非SuperSpeed共存机制

3.1 Gen1与Gen2:不只是速度翻倍

很多人把USB 3.0、3.1、3.2的命名绕晕了。我直接说结论:Gen1就是原来的USB 3.0,跑5Gbps;Gen2是后来的USB 3.1,跑10Gbps。至于USB 3.2,它把原来的Gen1和Gen2重新包装了一下,又加了个双通道模式——不过那是另外的课题。

你可能会问:不是5Gbps和10Gbps吗?那速率翻倍,性能是不是也翻倍?差远了。 Gen2的实际有效吞吐量只比Gen1高大约70%-80%左右。原因很简单——编码开销变了。

参数Gen1 (5Gbps)Gen2 (10Gbps)
物理层速率5.0 Gbps10.0 Gbps
编码方式8b/10b128b/132b
编码开销20%≈3%
有效数据吞吐~4.0 Gbps~9.7 Gbps
线缆最长推荐3米 (26AWG)1米 (24AWG)
接收器灵敏度-6 dB-4 dB (更难)

我修复过一块Gen2老是降速的板子,最后发现是差分线对之间的等长差了30mil。Gen2对PCB走线、连接器质量、线缆长度的要求比Gen1严苛得多。

我的经验:做Gen2的PCB时,建议把差分对内等长控制在±5mil以内,对间等长控制在±50mil以内。不然你会看到设备在Gen1和Gen2之间反复跳变——那其实是接收器眼图闭合了。

3.2 编码机制:128b/132b凭什么更高效

Gen1用的8b/10b,每8位有效数据要加2位编码位,20%的带宽就这么没了。Gen2改用128b/132b,每128位数据只加4位同步头。其实这个方案早就在PCIe 3.0上用过了,USB只是跟着学。

但节省带宽是有代价的:时钟恢复更困难。128b/132b要求接收端的CDR(时钟数据恢复)电路抖动容限更高。我曾经遇到一款Gen2的PHY芯片,在原厂参考设计上能跑通,换了自己画的封装座就报CRC错误。排查下来是跟PHY电源退耦距离太远,导致参考时钟相位噪声超标。

// 128b/132b 数据块结构(简化)
// 块边界由4位同步头标识
// 同步头: 0b10 → 数据块,0b01 → 控制块
// 
// | 同步头(2bit) | 数据类型(2bit) | 数据载荷(128bit) | CRC(8bit) |
//
// 实际链路上每132位为一个块,有效载荷128位
// 效率 = 128 / 132 ≈ 96.97%

关键指标:Gen2的有效带宽是Gen1的2.4倍(9.7 vs 4.0 Gbps),而不只是2倍。所以如果你做的是数据密集型应用(高速相机、SSD),尽量上Gen2。

3.3 SuperSpeed与非SuperSpeed共存机制

USB 3.x怎么同时支持老设备?这问题我刚接触时也想过。其实USB 3.x的物理层用了双重总线架构——一根USB-C或Type-A连接器背后有两条物理总线。

  • SuperSpeed总线:专用的差分对(SSTX+/SSTX-,SSRX+/SSRX-),双向独立,全双工。
  • 非SuperSpeed总线:原来的D+/D-信号线,负责USB 2.0/1.1通信,半双工。

这两套信号在连接器端共用VBUS和GND,但数据路径完全独立。设备插入后,主机先通过D+/D-检测设备速度(USB 2.0握手),如果发现对方支持SuperSpeed,再通过SuperSpeed总线上的带外信号(比如Rx Detect)建立高速链路。

我见过一个坑:有工程师在做OTG设计时,把SuperSpeed的差分对和D+/D-的走线距离拉得太近——结果是Gen2链路的串扰把USB 2.0的包给污染了。嗯,这里要注意:两套信号之间至少留20mil间距,最好加地隔离。

避坑指南:我曾经在批量生产中遇到一批OTG线缆在USB 3.0手机上无法识别U盘。查了半个月才发现——线缆内的D+/D-线被生产商偷工减料换了更细的线规,导致USB 2.0眼图退化,主机误判设备为FS(全速)。记住:SuperSpeed线缆里的D+/D-必须满足USB 2.0高速的电气要求,不能只考虑Gen1/Gen2。

3.4 枚举流程:从USB 2.0到SuperSpeed的切换

设备插入后的握手机制,我画成一张流程图你就明白了:

USB 3.x 双总线枚举流程 设备插入 D+/D-上拉电阻检测 (USB 2.0) 主机分配地址,读取设备描述符 设备描述符 bcdUSB ≥ 0x0300 ? 且配置描述符支持 SuperSpeed 不支持 仅使用 USB 2.0 总线 全速/高速/480Mbps 支持 发起SuperSpeed侦测 Rx Detect + 训练序列 双总线可同时工作 USB 2.0 控制传输 + SuperSpeed 数据流 注意:两套总线独立供电和复位,但共用同一设备地址和配置

两套总线各自独立工作,互不干扰。主机在枚举时会分别对USB 2.0总线和SuperSpeed总线进行复位、分配地址和读取描述符。不过最终它们会绑定到同一个逻辑设备上。端点0(控制端点)通常只走USB 2.0总线,数据端点则优先走SuperSpeed——除非SuperSpeed链路断开(比如线缆断了),此时数据会自动回退到USB 2.0总线。

3.5 电源管理和共存时的常见陷阱

SuperSpeed总线的电源管理比USB 2.0复杂得多。它支持U0/U1/U2/U3四种链路状态,而USB 2.0只有L0/L1/L2/L3。特别是U1和U2这两个低功耗状态,是Gen2独有的「快退快出」机制。我调过的某个OTG设备,电池电量下降时会莫名其妙触发U1退到U3,然后重新枚举,导致用户看到文件传输中断。原因:系统电源管理策略把SuperSpeed的U1退出延迟设置得太短了。

链路状态说明退出延迟常见问题
U0工作状态——
U1浅睡眠,仅停止扰码< 2 µs接收器DC平衡漂移
U2深度睡眠,关闭PLL< 100 µsCDR重锁耗时可能超规格
U3暂停,等效断开ms级需重新握手,极不推荐频繁进入

我的建议:如果你的产品是OTG主机(比如手机连U盘),把SuperSpeed的U1退出延迟设为至少1ms。太激进的省电策略反而会让平均功耗升高——因为频繁退入U1再退出产生的额外握手开销,比多工作一会儿还费电。

最后提一句CC逻辑(配置通道)。USB-C连接器上的CC引脚负责检测正反插、供电能力和SuperSpeed角色。我踩过最大的坑是:CC1和CC2上的下拉电阻Rd用了5%精度的碳膜电阻。批量时阻值偏差导致电压阈值误判——设备被识别为DFP(下行端口),结果手机给U盘供电而不是自己充电。嗯,CC电阻必须用1%的精密电阻,别省那几分钱。