2. USB物理层与电气特性

USB物理层定义了主机与设备之间最底层的连接规范,包括线缆定义、信号传输方式以及电源管理机制。理解这些基础是进行USB Host驱动开发和设备枚举调试的前提。本章将深入剖析USB线缆的每一根信号线、差分信号的传输原理,以及挂起/唤醒的电气实现。

2.1 USB线缆定义与引脚功能

标准USB线缆(以USB 2.0为例)内部包含4根导线:VBUS、D+、D-和GND。它们各自承担着供电与数据传输的核心职责。

引脚编号 信号名称 线缆颜色(标准) 功能描述
1 VBUS 红色 主机向设备供电,典型电压为+5V,最大电流由端口类型决定(如USB 2.0为500mA,USB 3.0为900mA)。
2 D- 白色 差分数据线负极。在高速/全速模式下,与D+共同传输差分信号;在低速模式下,D-用于信号传输。
3 D+ 绿色 差分数据线正极。在高速/全速模式下,与D-共同传输差分信号;在低速模式下,D+用于信号传输。
4 GND 黑色 电源地线,为VBUS提供回流路径,同时也是信号参考地。
实战提示:在嵌入式Linux开发板上,VBUS通常由GPIO控制的电源开关(如TPS20xx系列)提供。驱动开发时,需要确保在枚举前正确使能VBUS,否则设备无法上电,导致枚举失败。

2.2 差分信号原理

USB 2.0使用差分信号(Differential Signaling)在D+和D-两条线上传输数据。与单端信号相比,差分信号具有更强的抗共模噪声能力和更低的电磁干扰(EMI)。

差分信号的核心思想是:逻辑状态由D+与D-之间的电压差决定,而非单根线对地的电压。

  • 逻辑“1”(J状态): D+ > D-,电压差为正(典型值约+400mV)。
  • 逻辑“0”(K状态): D+ < D-,电压差为负(典型值约-400mV)。
  • SE0(单端0): D+ 和 D- 同时被拉低至GND(低于0.8V),用于复位或包结束(EOP)信号。
关键指标:USB 2.0高速模式(480 Mbps)下,差分信号摆幅为±400mV,信号上升/下降时间约为500ps。驱动开发者在调试眼图时,需要关注信号质量是否满足USB-IF规范。
USB 2.0 差分信号传输原理 USB Host USB Device D+ (正极) D- (负极) 差分信号波形 (D+ - D-) 逻辑“1” 逻辑“0” 逻辑“1” 逻辑“0” 逻辑“1” 差分信号通过D+与D-的电压差(±400mV)表示逻辑状态,抗共模干扰能力强

2.3 电源管理与挂起唤醒机制

USB规范要求所有设备必须支持挂起(Suspend)和远程唤醒(Remote Wakeup)功能,以降低功耗。挂起状态是USB电源管理的核心。

2.3.1 挂起(Suspend)

当总线空闲超过3ms时,主机控制器(Host Controller)会强制将D+和D-线都拉低至GND(SE0状态),并持续至少10ms,通知设备进入挂起状态。设备在挂起状态下,从VBUS吸取的电流不得超过2.5mA(低功耗设备)或2.5mA(高功耗设备,但需符合配置描述符中的声明)。

2.3.2 唤醒(Resume / Remote Wakeup)

唤醒有两种方式:

  • 主机唤醒(Host Resume):主机主动在总线上产生K状态(D+ > D-)持续20ms,然后恢复帧起始包(SOF)。
  • 设备远程唤醒(Remote Wakeup):设备通过将D+或D-线驱动为K状态(持续1~15ms),请求主机恢复总线活动。主机检测到后,会接管并完成唤醒过程。
驱动开发注意:在嵌入式Linux中,USB设备的挂起/唤醒通常由PM(电源管理)框架管理。驱动需要实现 suspend() 和 resume() 回调函数,并在设备描述符中正确设置 bMaxPower 字段,否则系统可能无法正确进入或退出低功耗状态。
USB 挂起/唤醒状态机 正常操作 总线活动(SOF/数据) 挂起状态 电流 < 2.5mA 唤醒过程 K状态持续20ms 总线空闲 > 3ms 主机/设备发起唤醒 恢复总线活动 挂起后设备必须保持VBUS连接,但功耗极低;远程唤醒需设备描述符支持

2.4 电气特性参数速查表

以下表格汇总了USB 2.0在低速(1.5 Mbps)、全速(12 Mbps)和高速(480 Mbps)模式下的关键电气参数,供驱动开发和硬件调试时参考。

参数 低速 (LS) 全速 (FS) 高速 (HS)
数据速率 1.5 Mbps 12 Mbps 480 Mbps
差分信号摆幅 ±1.5V ~ ±3.6V ±1.5V ~ ±3.6V ±400mV
上升/下降时间 75 ~ 300 ns 4 ~ 20 ns 500 ps (典型)
终端电阻 D-上拉 1.5kΩ D+上拉 1.5kΩ D+/D-各45Ω对地
驱动电流 8 mA 8 mA 17.78 mA
挂起电流 ≤ 2.5 mA (低功耗设备) / ≤ 2.5 mA (高功耗设备,需配置)
实战要点:在嵌入式Linux中,通过读取 /sys/kernel/debug/usb/usbmon 可以捕获USB总线上的电气事件(如复位、挂起)。结合逻辑分析仪抓取D+/D-波形,可以快速定位枚举失败或电源管理异常问题。