低功耗模式底层解析:从通用原理到 Pico RP2040 寄存器配置

1.低功耗模式

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

1.PNG

1.1 低功耗模式定义和原理

低功耗模式是指单片机在降低功耗的前提下,仍然保持某些必要功能(如定时、计数或外部事件监控)运行的操作模式。这些模式通常用于电池供电的设备,如物联网传感器、可穿戴设备或便携式电子产品,以延长设备的电池寿命。

低功耗模式通过以下几种方式实现功耗的降低:

  • 时钟管理​:通过降低系统时钟频率或停止部分时钟信号,减少功耗
  • 外设管理​:关闭或暂停不需要的外设(如 ADC、UART、I2C 等),减少它们的功耗
  • 处理器管理​:使处理器进入低功耗状态,如睡眠或深度睡眠状态,减少处理器的动态功耗
  • 电源管理​:部分单片机支持对某些模块或外围设备进行电源门控,彻底关闭其电源以实现更低的静态功耗

1.2 单片机工作模式类型

从功耗的角度看,单片机工作模式可以分为以下几种:

  1. 运行模式 (Run Mode)
    1. 定义​:这是单片机的正常工作模式,所有模块和外设都处于活动状态,系统运行在全速时钟频率下
    2. 特点​:功耗最高,但性能也最高
  2. 空闲模式 (Idle Mode)
    1. 定义​:在空闲模式下,单片机的 CPU 停止运行,但其他外设和时钟仍然保持活动
    2. 特点​:相比运行模式,功耗降低,适合在等待外部事件或中断时使用
  3. 睡眠模式 (Sleep Mode)
    1. 定义​:睡眠模式下,CPU 停止运行,大多数外设也进入低功耗状态,但某些关键外设(如定时器、RTC)仍然运行
    2. 特点​:进一步降低功耗,适用于处理器暂时不需要执行任务的场景
  4. 深度睡眠模式 (Deep Sleep Mode)
    1. 定义​:深度睡眠模式下,CPU 和大部分外设都被关闭,仅保留极少数的外设(如 RTC)和 RAM 数据
    2. 特点​:功耗极低,适用于长时间不需要处理任务的情况。通常依赖外部中断或定时器唤醒系统
  5. 休眠模式 (Hibernate Mode)
    1. 定义​:这是功耗最低的模式,在该模式下,大多数系统模块和电源都被关闭,只保留极少数的唤醒源(如 RTC 或外部中断)
    2. 特点​:静态功耗最低,适用于极长时间的休眠状态。唤醒后通常需要重新初始化系统
  6. 停止模式 (Stop Mode)
    1. 定义​:停止模式下,所有时钟信号都被停止,只有特定的唤醒源能够唤醒单片机
    2. 特点​:系统几乎不消耗动态功耗,静态功耗非常低,适合长时间无活动的场景

1.3 唤醒机制

单片机的唤醒机制涉及将系统从低功耗模式(如睡眠模式、休眠模式等)恢复到正常运行状态。常见的单片机唤醒来源包括:

  • 外部中断​:外部中断源(如 GPIO 引脚)连接到单片机的外部中断线,低功耗模式下,外部中断源可以继续监测外部事件,当检测到中断条件时,外部中断会触发中断请求,使系统从低功耗模式中唤醒
  • 定时器​:定时器可以在预定时间间隔后触发中断,从而唤醒系统;定时器在低功耗模式下继续运行,当定时器达到预设的时间间隔时,会生成一个中断信号,系统接收到定时器中断后,从低功耗模式中唤醒
  • 实时时钟​:RTC 时钟在低功耗模式下继续运行,通常具有非常低的功耗,当达到设定的时间点或周期时,RTC 生成中断信号,系统通过 RTC 中断从低功耗模式中唤醒
  • 内部事件​:某些内部事件(如外设完成操作、数据准备好等)也可以触发唤醒,内部事件通过设置内部标志位或寄存器来触发,当事件发生时,系统检测到内部中断,从低功耗模式中唤醒

2.树莓派 Pico 中的低功耗模式

RP2040 微控制器提供了一系列降低动态功耗和静态功耗的选项,以帮助设备在不同的操作场景下实现更高的能效。

动态功耗降低选项包括:

  • 顶级时钟门控​:可以单独控制各个外围设备和功能块的时钟,通过启用或禁用时钟来减少不必要的功耗
  • 自动时钟门控​:根据处理器的睡眠状态自动控制顶级时钟门控,当处理器进入睡眠时自动关闭不必要的时钟
  • 动态调整系统时钟频率或时钟源​:例如,可以切换到内部振荡器并禁用 PLL 和晶体振荡器来减少功耗
  • 零动态功耗的休眠状态​:在此状态下,所有时钟和振荡器都被禁用,系统可以通过 GPIO 事件或 RTC 中断唤醒,恢复正常操作

静态功耗降低选项包括:

  • 存储器进入状态保持的低功耗状态​:在不影响数据保存的情况下降低存储器的功耗
  • 外围设备的电源门控​:例如 ADC 和温度传感器支持电源门控,可以在不使用时关闭电源,降低功耗

2.png

在 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):

3.png

以下是与睡眠模式和休眠模式相关的一些关键寄存器:

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

4.png

5.png

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

6.png

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

7.png

8.png

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

9.png

10.png

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

11.png

12.png

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

13.png

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

14.png

posted @ 2026-09-02 18:21  FreakStudio  阅读(14)  评论(0)    收藏  举报