低功耗模式 Sleep/Stop/Standby:进入退出时序与唤醒源设计
更新时间:2026-09-19。前置:低功耗设计直觉、UPF/电源域。本文从 SoC/MCU 使用者与微架构角度讲模式切换。
本文要回答的问题
- Sleep/Stop/Standby 各自关了什么、保住了什么、唤醒要多久?
- 进入低功耗的握手(WFI、SLEEPDEEP、PWR、时钟门控/电源门控)怎么走?
- 哪些源能唤醒,引脚/RTC/事件的电平与脉冲要求?
- 深睡时 SRAM 保持与寄存器丢失,软件和 RTL 要怎么处理?
一、典型功耗模式阶梯(以 Cortex-M 家族为例)
| 模式 | CPU | 高速时钟/PLL | 稳压器 | SRAM/寄存器 | 唤醒 | 功耗 |
|---|---|---|---|---|---|---|
| Run | 运行 | 开 | 主稳压器 | 全保持 | — | 最高 |
| Sleep | 停(时钟门控) | 开 | 主 | 全保持 | 中断即续(数周期) | 略降 |
| Stop/Deep Sleep | 停 | 关 PLL/高速时钟,留低速 | 低功耗稳压器 | 大部分保持(retention) | 外部中断/RTC,数 μs | 低 |
| Standby/Shutdown | 掉电 | 全关 | 关/仅备域 | SRAM 内容丢失(仅备份寄存器/RTC) | 复位级唤醒,重新初始化 | 最低 |
本质对应硬件动作:Sleep≈时钟门控、Stop≈时钟门控+部分 retention、Standby≈电源门控(门控与电源域概念见 UPF/低功耗、低功耗直觉)。
二、进入时序(以 Cortex-M 为例)
bash
1. 配置 PWR/PMU:选模式、稳压器低功耗、使能 SRAM retention、使能唤醒源
2. 置 SCR.SLEEPDEEP(深睡)/SLEEPONEXIT
3. 确保关键写完成:DSB(写缓冲排空,见内存屏障)
4. 执行 WFI(中断唤醒)/ WFE(事件唤醒)
CPU 申请睡眠 → PMU 握手 → 门控时钟/降稳压器/(关电源)RTL 侧 PMU(电源管理单元)是一个 FSM,收到 CPU 的 sleep request 后与各时钟/电源/稳压器握手确认(clock/iso/retention/power enable 按 UPF 标准序列:关时钟→插隔离 isolation→开 retention→切电;上电反序:上电→关 retention→撤隔离→开时钟)。
三、唤醒源与唤醒延迟
- 中断(NVIC 使能的 EXTI/WKUP 引脚、外设):Sleep 下直接续跑;Stop 下引脚需配成事件/中断模式(上升/下降沿),先重启时钟再服务。
- RTC/闹钟/看门狗:低速 LSE/LSI 在 Stop 仍运行,定时唤醒。
- 比较器/比较事件、以太网 PHY、USB 恢复等专用唤醒。
- 唤醒延迟构成:HSE/PLL 启动锁定(ms 级,最主要)+ 稳压器唤醒 + retention 恢复 + 向量取指。用即时唤醒可选保留 PLL 的更浅模式。
Standby 唤醒≈复位:程序从复位向量开始,靠备份寄存器/复位标志判断「冷启动还是唤醒」。
四、状态保持与软件责任
- Stop:寄存器/SRAM 通常保持,唤醒后程序继续,但用到高速外设(USB/PLL)要重新选系统时钟。
- Standby:仅备份寄存器、RTC、待机电路有电;普通 SRAM/寄存器内容丢,唤醒等于复位,需保存状态到备份寄存器或非易失存储。
- 引脚在深睡默认态由数字/模拟 I/O 配置决定,必须防止悬空与倒灌。
五、常见的坑
- 忘开唤醒源/NVIC 使能就 WFI:芯片睡死,只能复位。
- WFI 前缺 DSB:唤醒配置写还在 store buffer,进入了错误/旧配置。
- 悬空引脚漏电:GPIO 高阻悬空让输入缓冲在阈值区导通;休眠前配上下拉/模拟模式,见 PinMux。
- 引脚倒灌(power injection):外设/对端在本芯片掉电时仍驱动 IO,经 ESD 钳位向内部供电,损坏或漏电。
- Stop 唤醒后没重配时钟:系统还跑在 HSI/MSI 低速,串口波特率/时序全错。
- 把 Standby 当 Stop:期待 SRAM 还在,醒来变量全是随机值。
- SysTick 在深睡停:基于 tick 的延时在 Stop 期间不计时,RTC 才可靠。
- 使能了无关外设时钟/模拟模块:深睡前未 gate 未用时钟/ADC/比较器,省不下来。
- 唤醒引脚沿/电平配错:只配下降沿但信号给上升沿,或抖动反复唤醒。
- retention/隔离序列错误(RTL/UPF):电源门控前没开 retention/隔离,恢复后是 X,见 UPF 概念。
- 调试连接阻止深睡:调试器保持时钟,功耗测不下来,需释放调试或允许调试时睡眠。
- PLL 启动时间算进实时窗口:唤醒延迟超预算,需选更浅模式或常开低速时钟快速响应。
相关与延伸
硬件机制见 低功耗设计直觉、UPF 电源域与时钟/电源门控;时钟恢复见 SoC 时钟控制器;进入前写完成见 内存屏障。
总结
低功耗阶梯对应硬件动作:Sleep 门控 CPU 时钟、Stop 关高速时钟/PLL 并让逻辑进 retention、Standby 直接电源门控导致 SRAM 丢失;进入是「配 PMU/唤醒源→置 SLEEPDEEP→DSB 排空写→WFI/WFE→PMU 按时钟→隔离→保持→切电序列握手」,唤醒则反序恢复,PLL 锁定和稳压器启动是延迟大头;Sleep 可即续、Stop 要重配系统时钟、Standby 等同复位——悬空/倒灌漏电、忘开唤醒源、醒来不重配时钟和误当 SRAM 保持是四大坑。