第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 Gbps | 10.0 Gbps |
| 编码方式 | 8b/10b | 128b/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 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 µs | CDR重锁耗时可能超规格 |
| U3 | 暂停,等效断开 | ms级 | 需重新握手,极不推荐频繁进入 |
我的建议:如果你的产品是OTG主机(比如手机连U盘),把SuperSpeed的U1退出延迟设为至少1ms。太激进的省电策略反而会让平均功耗升高——因为频繁退入U1再退出产生的额外握手开销,比多工作一会儿还费电。
最后提一句CC逻辑(配置通道)。USB-C连接器上的CC引脚负责检测正反插、供电能力和SuperSpeed角色。我踩过最大的坑是:CC1和CC2上的下拉电阻Rd用了5%精度的碳膜电阻。批量时阻值偏差导致电压阈值误判——设备被识别为DFP(下行端口),结果手机给U盘供电而不是自己充电。嗯,CC电阻必须用1%的精密电阻,别省那几分钱。