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 进入流程

  1. 主机发送 LPM 令牌: 主机控制器在 SOF 帧间隙或空闲时,向目标设备发送一个 LPM 令牌包(Token Packet),包含设备地址、端点号和 LPM 属性(如唤醒能力)。
  2. 设备响应握手: 设备在收到令牌后,必须在 192 位时间内返回握手包:
    • ACK: 设备接受 LPM 请求,准备进入 L1。
    • NAK: 设备忙,暂时无法进入 L1。
    • STALL: 设备不支持 LPM 或端点错误。
  3. 链路挂起: 主机收到 ACK 后,停止发送 SOF 和任何总线活动,总线进入空闲状态(Idle)。设备检测到总线空闲超过 3ms 后,正式进入 L1。
  4. 维持状态: 在 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 进入流程

  1. 空闲检测: 当链路层检测到发送和接收路径都处于空闲状态(无数据包、无训练序列)时,链路层可以发起 LPM 请求。
  2. LMP 交换: 链路层发送 LMP_GO_TO_U1 或 LMP_GO_TO_U2 包。接收方链路层收到后,必须回复 LMP_ACCEPT 或 LMP_REJECT。
  3. 物理层降电: 一旦接受,物理层开始关闭部分电路(如 PLL、时钟缓冲器、均衡器)。U1 关闭发送器,U2 进一步关闭接收器。
  4. 电气空闲: 链路进入电气空闲状态(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 的直接子状态。

USB 2.0 L1 与 USB 3.x U1/U2 状态机对比 USB 2.0 L1 与 USB 3.x U1/U2 状态机对比 USB 2.0 L0 (活动) L1 (LPM) L2 (Suspend) LPM令牌+ACK Resume 超时 USB 3.x L0 (活动) U1 (快速睡眠) U2 (深度睡眠) LMP_GO_TO_U1 LFPS LMP_GO_TO_U2 超时/协商 LFPS+训练 说明: USB 2.0 的 L1 是 L0 的直接子状态,退出必须经过 Resume 信号;USB 3.x 的 U1/U2 是并行状态, 可以通过 LFPS 快速唤醒,且 U1 和 U2 之间可以动态切换,灵活性更高。

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 更优的选择。