第二章:USB电气特性与信号
大家好,我是老张。今天咱们聊聊USB的电气特性。说实话,很多工程师写USB驱动或者做FPGA开发时,往往只关注协议层,对底层的电气特性一知半解。但我要告诉你——不懂电气特性,你连USB为什么能跑480Mbps都搞不明白。
这一章,我们聚焦在信号线上。D+/D-怎么传数据的?为什么USB 2.0能抗干扰?USB 3.x的超高速差分对又是什么鬼?Type-C的CC引脚到底在干嘛?嗯,一个一个来。
2.1 差分信号D+/D-原理
USB 2.0用的是差分信号传输。说白了,就是两根线——D+和D-,一起干活。
你想想看,如果只用一根线传数据,电压一波动,接收端就懵了。但差分信号不一样:D+和D-的电压是相反的。D+高,D-就低;D+低,D-就高。接收端只看它们的差值,不看绝对值。
核心公式:V_diff = V(D+) - V(D-)
当V_diff > 200mV时,判为逻辑"1";V_diff < -200mV时,判为逻辑"0"。
我在项目中遇到过一件事。有一次调试USB设备,死活枚举不上。示波器一看,D+和D-的波形倒是都有,但共模噪声特别大。后来发现是PCB走线没等长,两根线差了3mm。嗯,就这3mm,让差分信号变成了单端信号。从那以后,我画USB走线必做等长,误差控制在5mil以内。
避坑指南:我曾经因为D+/D-走线没包地,导致EMI超标。建议差分对两侧各加一条地线,间距至少3倍线宽。
2.2 USB 2.0电气特性
USB 2.0的电气特性,其实就三个关键点:驱动强度、终端电阻、电压摆幅。
2.2.1 驱动强度
USB 2.0的驱动强度不是随便定的。主机端(Host)和设备端(Device)的驱动能力不一样。主机要驱动整个总线,电流大一些;设备只需要应答,电流小一些。
| 参数 | 主机(Host) | 设备(Device) |
|---|---|---|
| 驱动电流(最小值) | 8 mA | 4 mA |
| 输出阻抗 | 约45 Ω | 约45 Ω |
| 上升时间 | 4 ns ~ 20 ns | 4 ns ~ 20 ns |
我个人习惯在设计时,把主机的驱动电流留20%余量。因为线缆和连接器会有损耗,余量不够的话,长线缆下信号会塌掉。
2.2.2 终端电阻
USB 2.0的终端电阻很有意思。它不像RS-485那样在两端各挂一个120Ω电阻。USB的终端电阻是集成在收发器里的。
- 低速/全速模式:设备端在D+或D-上拉1.5kΩ电阻到3.3V,用来告诉主机设备速度等级。
- 高速模式:主机和设备都在D+/D-上各接45Ω电阻到地,形成差分阻抗90Ω。
你可能会问:为什么高速模式要接45Ω到地?因为高速信号需要阻抗匹配,防止反射。45Ω对地,加上线缆的90Ω差分阻抗,刚好匹配。我刚开始做USB设计时,以为终端电阻随便选,结果信号反射得一塌糊涂。后来老老实实按规范来,问题就解决了。
注意:高速模式下,设备端的1.5kΩ上拉电阻必须断开!否则会破坏阻抗匹配。很多新手在这里翻车。
2.3 USB 3.x超高速差分对
USB 3.0开始,引入了超高速(SuperSpeed)模式。它用了两组差分对:SSTX(发送)和SSRX(接收)。
为什么不用D+/D-了?因为USB 2.0的D+/D-是半双工的,同一时间只能一个方向传数据。而USB 3.x是全双工的,可以同时收发。说白了,就是两条单向车道代替了一条双向车道,速度自然翻倍。
2.3.1 SSTX/SSRX的电气参数
| 参数 | USB 3.0 (5 Gbps) | USB 3.1 (10 Gbps) | USB 3.2 (20 Gbps) |
|---|---|---|---|
| 差分电压摆幅 | 800 mV ~ 1.2 V | 800 mV ~ 1.2 V | 800 mV ~ 1.2 V |
| 差分阻抗 | 90 Ω ± 15% | 90 Ω ± 15% | 90 Ω ± 15% |
| 去加重 | -3.5 dB | -3.5 dB | -3.5 dB |
| 抖动(TJ) | ≤ 0.3 UI | ≤ 0.3 UI | ≤ 0.3 UI |
这里有个关键点:去加重(De-emphasis)。为什么需要去加重?因为高速信号在传输线上会有损耗,高频分量衰减得更厉害。去加重就是在发送端把第一个bit的幅度加大,后面的bit幅度减小,这样接收端看到的就是均衡的信号。
我记得有一次调试USB 3.0眼图,发现眼图闭合得厉害。查了半天,发现是去加重没使能。嗯,这个坑我踩过,你们别踩了。
2.3.2 PCB走线要求
USB 3.x的差分对走线,要求比USB 2.0严格得多。我列几个关键点:
- 差分阻抗:90 Ω ± 10%(建议按10%设计,留余量)
- 等长误差:SSTX和SSRX各自内部等长,误差≤5mil;SSTX和SSRX之间误差≤100mil
- 过孔:每对差分线最多2个过孔,过孔阻抗要连续
- 参考层:必须连续,不能跨分割
个人经验:我习惯在USB 3.x差分对旁边加地过孔阵列,间距50mil。这样能有效抑制串扰。另外,走线尽量走表层,避免换层带来的阻抗不连续。
2.4 Type-C CC逻辑与配置通道
Type-C接口的出现,让USB的电气特性又复杂了一层。CC(Configuration Channel)引脚,就是用来解决"谁是谁"的问题的。
你想想看,Type-C可以正反插,可以当Host也可以当Device,还可以传大功率。如果没有CC引脚,设备怎么知道自己是插进去了还是拔出来了?怎么知道自己该当Host还是Device?
2.4.1 CC引脚的功能
CC引脚主要有三个功能:
- 检测连接:通过CC引脚上的电压变化,判断是否插入了设备
- 识别角色:判断自己是DFP(下行端口,相当于Host)还是UFP(上行端口,相当于Device)
- 协商功率:通过CC引脚上的通信,协商VBUS的电压和电流
具体怎么实现的?CC引脚上有一个Rp(上拉电阻)和一个Rd(下拉电阻)。DFP端接Rp到5V,UFP端接Rd到地。当两者连接时,CC引脚上的电压就是分压值。通过这个电压值,双方就能知道对方的身份。
| 电压范围 | 含义 |
|---|---|
| 0V ~ 0.2V | 未连接 |
| 0.25V ~ 0.6V | 连接了UFP(设备) |
| 0.7V ~ 1.5V | 连接了DFP(主机) |
| 1.65V ~ 2.0V | 连接了DRP(双角色端口) |
我在项目中遇到过一个问题:Type-C设备插上后,主机检测不到。示波器一量,CC引脚电压只有0.15V。查了半天,发现是Rd电阻焊错了,用了10kΩ而不是5.1kΩ。嗯,电阻值不对,分压就不对,主机就以为没插设备。
注意:CC引脚的电阻精度要求很高,必须用1%精度的电阻。我曾经用5%的电阻,结果批量生产时有一部分设备识别不了。从那以后,CC电阻我必用1%的。
2.4.2 CC通信协议
CC引脚上除了检测连接,还能传数据。这就是USB PD(Power Delivery)协议的基础。PD协议通过CC引脚上的BMC编码(双相标记编码)来通信,速率约300kbps。
PD协议可以协商VBUS的电压和电流。比如,默认VBUS是5V,但通过PD协商,可以升到9V、15V甚至20V。电流也可以从默认的0.5A/0.9A升到3A甚至5A。
我个人建议,如果你在做Type-C的PD设计,一定要先搞清楚CC引脚上的电平逻辑。很多工程师一上来就写PD协议栈,结果连CC引脚上的电压都测不对。嗯,基础不牢,地动山摇。
2.5 本章小结
好了,这一章的内容就这些。我们聊了USB 2.0的差分信号原理、驱动强度和终端电阻,也聊了USB 3.x的超高速差分对和PCB走线要求,最后聊了Type-C的CC引脚逻辑。
说实话,电气特性这部分,看起来枯燥,但它是USB设计的基石。你想想看,如果信号都传不对,协议层写得再好也没用。我见过太多工程师,协议栈写得飞起,结果板子一上电,眼图是闭的。嗯,这种问题,往往就是电气特性没搞明白。
下一章,我们会深入USB的协议层,聊聊包结构、事务和传输类型。到时候见。
公众号:蓝海资料掘金营,微信deep3321