低功耗模式底层解析:从通用原理到 Pico RP2040 寄存器配置
1.低功耗模式
在单片机的应用中,低功耗模式是为了减少系统的功耗,延长电池寿命或降低能耗而设计的一系列工作状态。这些模式通过降低时钟频率、关闭不必要的外设和处理器核心、甚至进入深度睡眠状态等方式来实现低功耗操作。

1.1 低功耗模式定义和原理
低功耗模式是指单片机在降低功耗的前提下,仍然保持某些必要功能(如定时、计数或外部事件监控)运行的操作模式。这些模式通常用于电池供电的设备,如物联网传感器、可穿戴设备或便携式电子产品,以延长设备的电池寿命。
低功耗模式通过以下几种方式实现功耗的降低:
- 时钟管理:通过降低系统时钟频率或停止部分时钟信号,减少功耗
- 外设管理:关闭或暂停不需要的外设(如 ADC、UART、I2C 等),减少它们的功耗
- 处理器管理:使处理器进入低功耗状态,如睡眠或深度睡眠状态,减少处理器的动态功耗
- 电源管理:部分单片机支持对某些模块或外围设备进行电源门控,彻底关闭其电源以实现更低的静态功耗
1.2 单片机工作模式类型
从功耗的角度看,单片机工作模式可以分为以下几种:
- 运行模式 (Run Mode)
- 定义:这是单片机的正常工作模式,所有模块和外设都处于活动状态,系统运行在全速时钟频率下
- 特点:功耗最高,但性能也最高
- 空闲模式 (Idle Mode)
- 定义:在空闲模式下,单片机的 CPU 停止运行,但其他外设和时钟仍然保持活动
- 特点:相比运行模式,功耗降低,适合在等待外部事件或中断时使用
- 睡眠模式 (Sleep Mode)
- 定义:睡眠模式下,CPU 停止运行,大多数外设也进入低功耗状态,但某些关键外设(如定时器、RTC)仍然运行
- 特点:进一步降低功耗,适用于处理器暂时不需要执行任务的场景
- 深度睡眠模式 (Deep Sleep Mode)
- 定义:深度睡眠模式下,CPU 和大部分外设都被关闭,仅保留极少数的外设(如 RTC)和 RAM 数据
- 特点:功耗极低,适用于长时间不需要处理任务的情况。通常依赖外部中断或定时器唤醒系统
- 休眠模式 (Hibernate Mode)
- 定义:这是功耗最低的模式,在该模式下,大多数系统模块和电源都被关闭,只保留极少数的唤醒源(如 RTC 或外部中断)
- 特点:静态功耗最低,适用于极长时间的休眠状态。唤醒后通常需要重新初始化系统
- 停止模式 (Stop Mode)
- 定义:停止模式下,所有时钟信号都被停止,只有特定的唤醒源能够唤醒单片机
- 特点:系统几乎不消耗动态功耗,静态功耗非常低,适合长时间无活动的场景
1.3 唤醒机制
单片机的唤醒机制涉及将系统从低功耗模式(如睡眠模式、休眠模式等)恢复到正常运行状态。常见的单片机唤醒来源包括:
- 外部中断:外部中断源(如 GPIO 引脚)连接到单片机的外部中断线,低功耗模式下,外部中断源可以继续监测外部事件,当检测到中断条件时,外部中断会触发中断请求,使系统从低功耗模式中唤醒
- 定时器:定时器可以在预定时间间隔后触发中断,从而唤醒系统;定时器在低功耗模式下继续运行,当定时器达到预设的时间间隔时,会生成一个中断信号,系统接收到定时器中断后,从低功耗模式中唤醒
- 实时时钟:RTC 时钟在低功耗模式下继续运行,通常具有非常低的功耗,当达到设定的时间点或周期时,RTC 生成中断信号,系统通过 RTC 中断从低功耗模式中唤醒
- 内部事件:某些内部事件(如外设完成操作、数据准备好等)也可以触发唤醒,内部事件通过设置内部标志位或寄存器来触发,当事件发生时,系统检测到内部中断,从低功耗模式中唤醒
2.树莓派 Pico 中的低功耗模式
RP2040 微控制器提供了一系列降低动态功耗和静态功耗的选项,以帮助设备在不同的操作场景下实现更高的能效。
动态功耗降低选项包括:
- 顶级时钟门控:可以单独控制各个外围设备和功能块的时钟,通过启用或禁用时钟来减少不必要的功耗
- 自动时钟门控:根据处理器的睡眠状态自动控制顶级时钟门控,当处理器进入睡眠时自动关闭不必要的时钟
- 动态调整系统时钟频率或时钟源:例如,可以切换到内部振荡器并禁用 PLL 和晶体振荡器来减少功耗
- 零动态功耗的休眠状态:在此状态下,所有时钟和振荡器都被禁用,系统可以通过 GPIO 事件或 RTC 中断唤醒,恢复正常操作
静态功耗降低选项包括:
- 存储器进入状态保持的低功耗状态:在不影响数据保存的情况下降低存储器的功耗
- 外围设备的电源门控:例如 ADC 和温度传感器支持电源门控,可以在不使用时关闭电源,降低功耗

在 RP2040 微控制器中,睡眠模式(SLEEP State)和休眠模式(DORMANT State)是两种用于降低系统功耗的状态:
- 睡眠模式(
SLEEP State):当两个 Cortex-M0+ 处理器都处于睡眠状态(例如执行 WFI 或 WFE 指令)且系统 DMA 没有任何传输时,RP2040 进入睡眠模式;当任意一个处理器因中断唤醒时,RP2040 退出睡眠模式。- 时钟管理:在睡眠模式下,系统的顶级时钟门控由 SLEEP_ENx 寄存器控制,而不是 WAKE_ENx 寄存器。这允许在处理器休眠时对时钟树进行更积极的裁剪,以降低功耗
- 使用场景:例如,如果系统处于睡眠状态,等待 UART 的字符中断,那么整个系统(除了 UART)都可以进行时钟门控。UART 中断后唤醒处理器,系统退出睡眠模式,并切换回 WAKE_ENx 时钟掩码
- 休眠模式(
DORMANT State):休眠模式是一种真正的零动态功耗睡眠状态,所有时钟(包括所有振荡器)都被禁用,系统可以通过 GPIO 事件(高/低电平或上升/下降沿)或 RTC 中断来唤醒;唤醒后,重新启动一个振荡器,并在稳定后解锁振荡器输出,系统状态保持不变,代码执行从休眠前的位置继续。- 时钟管理:在休眠模式下,所有时钟和振荡器都被禁用。如果依赖 RTC 来唤醒系统,则 RTC 必须有一个外部时钟源。此外,进入休眠模式前应关闭 PLLs 以避免不必要的功耗,退出休眠模式后需要重新启动和配置 PLLs
- 使用场景:这种模式非常适合在系统长时间不活动但仍需快速恢复时使用,例如待机时的深度睡眠
树莓派 Pico 各个模式下的功耗如下表所示(工作频率为 48MHz):

以下是与睡眠模式和休眠模式相关的一些关键寄存器:
- SLEEP_ENx(SLEEP_EN0、SLEEP_EN1)寄存器:这些寄存器用于在处理器进入睡眠模式(SLEEP state)时控制各个时钟域的开启和关闭。通过在 SLEEP_ENx 寄存器中设置相应的位,可以指定哪些时钟在处理器进入睡眠模式时继续运行,而哪些时钟将被关闭。这样可以减少不必要的功耗


- WAKE_ENx(WAKE_EN0、WAKE_EN1)寄存器:这些寄存器用于控制系统在唤醒模式下(Wake state)哪些时钟域应该开启。当处理器从睡眠状态(SLEEP state)中唤醒时,系统将切换到 WAKE_ENx 寄存器定义的时钟配置,从而重新启用必要的时钟域

- ENABLEDx(ENABLED0、ENABLED1)寄存器:这些寄存器指示了当前各个时钟域的使能状态。它们显示了在当前状态下(无论是睡眠模式还是唤醒模式)哪些时钟域是启用的,哪些是禁用的


- CLK_SYS_RESUS_CTRL 和 CLK_SYS_RESUS_STATUS 寄存器:这些寄存器与系统时钟恢复功能相关。当系统因某些条件进入一个极低功耗状态时,这些寄存器可以帮助管理系统时钟的重新启用,确保系统在需要时能够正常恢复运行


- CLK_RTC_CTRL、CLK_RTC_DIV 和 CLK_RTC_SELECTED 寄存器:这些寄存器控制实时时钟(RTC)的时钟源选择和分频器设置。在处理器进入 DORMANT(休眠)状态时,如果依赖 RTC 来唤醒系统,则必须确保这些寄存器已正确配置,RTC 有一个外部时钟源以维持其运行。


- DORMANT 模式控制:通过向 DORMANT 寄存器写入特定的关键字,系统可以进入真正的零动态功耗休眠状态(DORMANT state)。在这种状态下,所有时钟(包括振荡器)都被禁用,系统仅在 GPIO 事件或 RTC 中断时被唤醒

DORMANT_WAKE_INTEx 寄存器用于启用 DORMANT 模式的唤醒中断,DORMANT_WAKE_INTFx 寄存器用于强制触发 DORMANT 模式唤醒中断,而 DORMANT_WAKE_INTSx 寄存器用于显示 DORMANT 模式唤醒中断的状态:


在单片机的应用中,低功耗模式是为了减少系统的功耗,延长电池寿命或降低能耗而设计的一系列工作状态。这些模式通过降低时钟频率、关闭不必要的外设和处理器核心、甚至进入深度睡眠状态等方式来实现低功耗操作。
浙公网安备 33010602011771号