3. 低功耗状态详解

LPDDR 的低功耗管理并不是简单地“把时钟关掉”,而是由控制器、PHY、DRAM 颗粒三方协同完成的一套状态机。理解每个状态的进入条件、退出条件以及迁移路径,是定位“唤醒失败”与“自刷新恢复异常”的基础。很多现场问题并非硬件损坏,而是控制器发出的命令序列与颗粒当前所处状态不匹配,导致命令被忽略、超时或数据丢失。

一、核心原理:四个关键状态与迁移关系

LPDDR 颗粒在正常工作之外,主要存在 Idle、Power-Down、Self-Refresh、Deep Sleep 四类低功耗状态。它们的功耗依次降低,但退出代价依次升高。控制器通过命令总线(如 MRS、REF、PDE、SRE 等)驱动状态迁移,PHY 则负责在退出时重新建立时钟与训练参数。

需要特别注意的是:Power-Down 不保存数据刷新,进入前必须确保没有未完成的写操作;Self-Refresh 由颗粒内部自动刷新,是保持数据的最低功耗状态;Deep Sleep 会关闭更多内部电路,退出后通常需要重新初始化部分寄存器。

LPDDR 低功耗状态迁移关系 Idle 空闲 / 可立即访问 Power-Down 不刷新 / 快速退出 Self-Refresh 自刷新 / 保数据 Deep Sleep 深睡 / 需重初始化 PDE PDX SRE SRX DSM DSX Idle→Deep Sleep SR→Deep Sleep 关键约束: 1. 进入 Power-Down 前必须完成所有未决写操作;2. Self-Refresh 退出后需等待 tXSR 才能访问; 3. Deep Sleep 退出后需重新配置 MR 寄存器并执行 ZQ 校准;4. 任何状态迁移都需满足最小驻留时间。

二、各状态进入与退出条件

下表汇总了四种状态的关键条件与典型参数,便于在调试时快速对照。

状态 进入条件 退出条件 数据保持 典型退出延迟
Idle 无命令、无未决事务,控制器主动空闲 任意有效命令 是(正常刷新) 0
Power-Down PDE 命令,CKE 拉低,无未决写 PDX 命令,CKE 拉高 否(不刷新) tXP,约 6~10 ns
Self-Refresh SRE 命令,CKE 拉低,内部刷新使能 SRX 命令,CKE 拉高 是(自动刷新) tXSR,约 30~100 ns
Deep Sleep DSM 命令,关闭内部电源域 DSX 命令,重新上电 是(需重新初始化) tINIT,约 200 µs 以上

三、方法流程:一次完整的低功耗进入与唤醒

以“空闲后进入 Self-Refresh,再被中断唤醒”为例,控制器侧的标准流程如下:

  1. 确认命令队列为空,等待所有写数据真正写入颗粒。
  2. 发送 SRE 命令,拉低 CKE,颗粒进入 Self-Refresh。
  3. 控制器关闭部分 PHY 时钟,降低自身功耗。
  4. 中断到来,控制器拉高 CKE,发送 SRX 命令。
  5. 等待 tXSR 时间,确保颗粒内部刷新完成并稳定。
  6. 重新使能 PHY 时钟,执行读训练或恢复训练参数。
  7. 恢复正常读写访问。

调试要点:唤醒失败最常见的原因是 tXSR 等待不足、PHY 时钟恢复顺序错误,或控制器在颗粒尚未退出 Self-Refresh 时就发起访问。建议在固件中加入状态回读与超时计数。

四、案例场景:Self-Refresh 退出后首次访问失败

某移动终端在待机唤醒后偶发花屏。日志显示控制器在 SRX 后约 20 ns 即发起读操作,而颗粒规格要求 tXSR 最小 50 ns。由于等待不足,颗粒内部刷新尚未完成,读出的数据错误,导致显示异常。

[ 12.345678] pm: enter self-refresh, cke=0
[ 12.345690] pm: wakeup irq, send SRX
[ 12.345710] ddr: read req addr=0x8000_1000
[ 12.345712] ddr: read data mismatch, expected 0xA5, got 0x00
[ 12.345730] ddr: controller timeout, retry

修复方式是在 SRX 后插入 tXSR 延时,并增加“刷新完成”状态位轮询。修改后连续待机唤醒 500 次未再复现。

误区提醒:不要认为“拉高 CKE 就等于颗粒已就绪”。CKE 只是使能信号,颗粒内部刷新、电压稳定、PLL 锁定都需要额外时间。必须严格按数据手册的时序参数等待。

五、复盘与检查清单

  • 进入 Power-Down 前是否确认无未决写操作?
  • Self-Refresh 退出后是否满足 tXSR?
  • Deep Sleep 退出后是否重新配置 MR 寄存器并执行 ZQ 校准?
  • PHY 时钟恢复与颗粒状态退出顺序是否正确?
  • 是否在固件中记录了每次状态迁移的时间戳与结果?
  • 是否对唤醒失败做了超时重试与错误上报?

掌握这四个状态的进入、退出与迁移关系,就能在唤醒失败时快速判断问题出在命令序列、时序等待还是 PHY 恢复环节,从而把调试从“盲试”变成“按图索骥”。