4. LPM协议基础
在电池供电设备中,链路电源管理(LPM)是降低空闲功耗的核心技术。USB 2.0 引入了 L1 状态,而 USB 3.x 则定义了 U1/U2 状态。虽然目标都是节能,但两者的协议机制、进入/退出条件、延迟和握手方式存在显著差异。本节将从协议层面进行深度对比。
4.1 USB 2.0 LPM (L1) 协议机制
USB 2.0 LPM 是对传统 Suspend (L2) 的补充,旨在提供更快的进入和退出延迟,以适应移动设备的频繁空闲场景。L1 状态由主机控制器通过发送特定的 LPM 令牌包来发起。
关键特征: L1 状态由主机主动发起,设备必须响应 ACK/NAK/STALL。退出延迟目标为 50µs,远快于 L2 的 10ms+。
4.1.1 L1 进入流程
- 主机发送 LPM 令牌: 主机控制器在 SOF 帧间隙或空闲时,向目标设备发送一个 LPM 令牌包(Token Packet),包含设备地址、端点号和 LPM 属性(如唤醒能力)。
- 设备响应握手: 设备在收到令牌后,必须在 192 位时间内返回握手包:
- ACK: 设备接受 LPM 请求,准备进入 L1。
- NAK: 设备忙,暂时无法进入 L1。
- STALL: 设备不支持 LPM 或端点错误。
- 链路挂起: 主机收到 ACK 后,停止发送 SOF 和任何总线活动,总线进入空闲状态(Idle)。设备检测到总线空闲超过 3ms 后,正式进入 L1。
- 维持状态: 在 L1 下,VBus 保持有效,D+/D- 线处于空闲状态(SE0 或 J/K 状态取决于配置)。
4.1.2 L1 退出流程
- 主机发起: 主机通过驱动总线上的复位(Reset)或恢复(Resume)信号来唤醒设备。设备检测到总线活动后,在 50µs 内恢复到 L0 状态。
- 设备远程唤醒: 如果设备支持远程唤醒,可以通过驱动 D+ 或 D- 线上的 K 状态来请求主机退出 L1。主机检测到唤醒信号后,驱动 Resume 信号完成退出。
设计提示: L1 的退出延迟虽然快,但主机控制器需要精确控制总线空闲检测时间(3ms),过早或过晚都会导致协议错误。在电池供电设备中,建议将 L1 作为短时空闲的首选状态。
4.2 USB 3.x LPM (U1/U2) 协议机制
USB 3.x 采用全双工差分信号(SSTX/SSRX),其 LPM 机制与 USB 2.0 完全不同。U1 和 U2 是面向链路的低功耗状态,由链路层通过 LMP(链路管理包) 协商进入。
关键特征: U1/U2 是链路层状态,不依赖主机令牌。进入/退出由物理层和链路层协同完成,延迟更低(U1 退出约 1µs,U2 退出约 10µs)。
4.2.1 U1/U2 进入流程
- 空闲检测: 当链路层检测到发送和接收路径都处于空闲状态(无数据包、无训练序列)时,链路层可以发起 LPM 请求。
- LMP 交换: 链路层发送
LMP_GO_TO_U1或LMP_GO_TO_U2包。接收方链路层收到后,必须回复LMP_ACCEPT或LMP_REJECT。 - 物理层降电: 一旦接受,物理层开始关闭部分电路(如 PLL、时钟缓冲器、均衡器)。U1 关闭发送器,U2 进一步关闭接收器。
- 电气空闲: 链路进入电气空闲状态(Electrical Idle),差分信号线上无电压摆动。
4.2.2 U1/U2 退出流程
- 任意一侧发起: 主机或设备都可以通过发送 LFPS(低频周期性信号) 来唤醒链路。LFPS 是一种低频脉冲序列,用于唤醒接收端的物理层。
- 训练序列: 接收端检测到 LFPS 后,启动接收器,并开始链路训练(TS1/TS2 序列),重新建立位锁定和符号锁定。
- 恢复 L0: 训练完成后,链路恢复到 L0 状态,可以正常传输数据。
注意: U2 的退出延迟比 U1 长,因为需要重新锁定接收器。在电池供电设备中,如果预期空闲时间较短(如 < 1ms),应优先使用 U1;如果空闲时间较长(如 > 10ms),使用 U2 可以节省更多功耗。
4.3 协议机制对比表
| 对比维度 | USB 2.0 LPM (L1) | USB 3.x LPM (U1) | USB 3.x LPM (U2) |
|---|---|---|---|
| 发起方式 | 主机通过令牌包主动发起 | 链路层通过 LMP 协商 | 链路层通过 LMP 协商 |
| 握手协议 | ACK/NAK/STALL(设备响应) | LMP_ACCEPT / LMP_REJECT | LMP_ACCEPT / LMP_REJECT |
| 进入延迟 | ~3ms(总线空闲检测) | ~1µs(LMP 交换 + 物理层降电) | ~5µs(LMP 交换 + 物理层降电) |
| 退出延迟 | ~50µs(Resume 信号) | ~1µs(LFPS + 快速训练) | ~10µs(LFPS + 完整训练) |
| 功耗节省 | 中等(总线空闲,VBus 保持) | 较低(仅关闭发送器) | 较高(关闭发送器和接收器) |
| 远程唤醒 | 设备通过 K 状态驱动 | 任意一侧通过 LFPS | 任意一侧通过 LFPS |
| 适用场景 | 短时空闲(ms 级) | 极短空闲(µs 级) | 中等空闲(ms 级) |
4.4 协议状态机对比
下图展示了 USB 2.0 L1 与 USB 3.x U1/U2 在链路层状态机中的位置和转换路径。注意 USB 3.x 的 U1/U2 是并行状态,而 USB 2.0 的 L1 是 L0 的直接子状态。
4.5 关键差异总结
- 握手方式: USB 2.0 L1 使用主机-设备令牌握手,USB 3.x U1/U2 使用链路层对等 LMP 协商,后者更灵活且不依赖主机调度。
- 退出延迟: U1 的退出延迟(~1µs)远低于 L1(~50µs),适合高频次空闲切换;U2 的退出延迟(~10µs)仍优于 L1。
- 功耗粒度: USB 3.x 提供了两级睡眠(U1/U2),允许根据空闲时间动态选择,而 USB 2.0 只有一级 L1。
- 远程唤醒: USB 3.x 的 LFPS 机制比 USB 2.0 的 K 状态驱动更可靠,且支持任意一侧发起。
- 兼容性: L1 需要设备固件支持 LPM 令牌解析,U1/U2 需要链路层硬件支持 LMP 交换,通常由 PHY 和 MAC 硬件自动完成。
优化建议: 在电池供电设备中,如果同时支持 USB 2.0 和 USB 3.x,建议优先使用 USB 3.x 的 U1 状态处理短时空闲(如触摸屏扫描间隔),使用 U2 处理较长时间空闲(如无操作 10ms 以上)。对于仅支持 USB 2.0 的设备,L1 仍然是比传统 Suspend 更优的选择。