1. 电源域介绍
2. 功耗模式介绍
ESP32-S3 有一个先进的电源管理单元 (PMU),可以灵活地给芯片的不同电源域供电,在芯片性能、功耗和唤醒延迟之前取得最佳平衡。
睡眠模式下,大多数电源域已关闭。此时, ESP32-S3 中集成的超低功耗协处理器 (ULP) 仍可运行,从而实现极低的功耗。
配置 PMU 的程序较为复杂。为针对典型场景简化电源管理, ESP32-S3 具有以下预设功耗模式,可给不同电源域组合供电:
- Active 模式 – CPU、 RF 电路和所有外设均上电。芯片可以处理数据、接收、发射和侦听信号。
- Modem-sleep 模式 – CPU 上电,时钟频率下降。 RF 电路在需要时间歇性开启,因此无线可保持连接。
- Light-sleep 模式 – CPU 停止工作,可选择上电。 RTC 外设及 ULP 协处理器可由定时器间歇性唤醒。芯片可由所有唤醒机制唤醒,包括 MAC、 RTC 定时器或外部中断。无线可保持连接。部分数字外设可选择关
闭。 - Deep-sleep 模式 – 仅 RTC 上电。无线连接数据存储在 RTC 存储器中。
3. 超低功耗协助处理器(ULP)
3.1. ULP
超低功耗协处理器 (ULP, Ultra-Low-Power coprocessor) 是一种功耗极低的处理器设备,可在芯片进入 Deepsleep 时保持上电,允许开发者通过存储在 RTC 存储器中的专用程序,访问 RTC 外设、内部传感器及 RTC 寄存器。在对功耗敏感的场景下,主 CPU 处于睡眠状态以降低功耗,协处理器可以由协处理器定时器唤醒,通过控制 RTC GPIO、 RTC I2C、 SAR ADC、温度传感器 (TSENS) 等外设监测外部环境或与外部电路进行交互,并在达到唤醒条件时主动唤醒主 CPU。
ESP32-S3 搭载了基于有限状态机 (FSM) 实现的 ULP 协处理器(以下简称 ULP-FSM)和基于 RISC-V 指令集的ULP 协处理器(以下简称 ULP-RISC-V),用户可根据需求灵活选择。
3.2. 特性
- 可访问最多 8 KB SRAM RTC 慢速内存,用于储存指令和数据
- 时钟采用 17.5 MHz RTC_FAST_CLK
- 支持正常模式和 Monitor 模式
- 可唤醒 CPU 或向 CPU 发送中断
- 可访问外设、内部传感器及 RTC 寄存器
ULP-FSM 和 ULP-RISC-V 不能同时工作,用户只能选择其中一个作为 ESP32-S3 的超低功耗协处理器。 ULP-FSM与 ULP-RISC-V 特性比较如下:
ESP32-S3 协处理器的功能灵活,可以通过 RTC 寄存器控制 RTC 域中的模块。协处理器可独立于 CPU 运行,是 CPU 的有力补充,甚至可以在一些功耗敏感的设计中取代 CPU。 ESP32-S3 协处理器的基本架构可见图下图:
3.3. ULP睡眠和唤醒流程
ESP32-S3 的协处理器经过专门设计,无论 CPU 是否处于休眠状态,均可独立于 CPU 运行。
在典型场景中,为了降低功耗,系统可进入 Deep-sleep 模式。系统进入睡眠模式前需完成以下操作:
- 将协处理器需要执行的程序载入到 RTC 慢速内存;
- 配置 RTC_CNTL_COCPU_SEL 寄存器,选择协处理器;
- 0:选择使用 ULP-RISC-V
- 1:选择使用 ULP-FSM
- 如果选择使用 ULP-RISC-V,则还需要:
- 置位再复位 RTC_CNTL_COCPU_CLK_FO;
- 置位 RTC_CNTL_COCPU_CLKGATE_EN。
- 配置 RTC_CNTL_ULP_CP_TIMER_1_REG 寄存器来设置硬件定时器的唤醒间隔时间;
- 选择定时器使能方式:
- 软件使能:软件置位 RTC_CNTL_ULP_CP_SLP_TIMER_EN;
- RTC GPIO 使能:软件配置 RTC_CNTL_ULP_CP_GPIO_WAKEUP_ENA 开启通过 RTC GPIO 使能硬件定时器选项。
- 配置系统进入睡眠状态,主 CPU 休眠。
在 Deep-sleep 模式下:
- 硬件定时器周期性地将低功耗控制器置于 Monitor 状态,然后唤醒协处理器。
- 协处理器唤醒后执行一些必要操作,例如通过低功耗传感器监控芯片外部环境等操作;
- 操作完成后,系统返回 Deep-sleep 模式;
- 协处理器进入休眠,等待下一次唤醒。
进入 Monitor 模式后,协处理器的唤醒和睡眠流程见下图:
-
使能硬件定时器,定时器开始计数;
-
硬件定时器过期,唤醒协处理器。协处理器进入 Run 状态,执行预先烧写的程序;
-
协处理器执行 HALT 相关操作进入 HALT 状态;协处理器程序停止运行开始休眠。定时器再次启动,重复以上流程;
• ULP-RISC-V 的 HALT 操作:置位寄存器 RTC_CNTL_COCPU_DONE;
• ULP-FSM 的 HALT 操作:执行 HALT 指令。 -
通过协处理器程序或软件关闭硬件定时器,协处理器将不再进入 Monitor 状态。
• 软件关闭:软件清零 RTC_CNTL_ULP_CP_SLP_TIMER_EN;
• RTC GPIO 关闭:软件清零 RTC_CNTL_ULP_CP_GPIO_WAKEUP_ENA,并置位 RTC_CNTL_ULP_CP_GPIO_WAKEUP_CLR。注:硬件定时器的关闭方法需要与使能方法一致。
上述信号与寄存器之间的关系可见图 2-5。
4. 低功耗软件框架
低功耗软件框架部分代码在IDF文件目录:Espressif\frameworks\esp-idf-v5.1.2\components\esp_pm下,注意包含以下几个部分:
- PM_TRACE
- PM_LOCK
- PM_IMPL
源码实现方式,可直接阅读源码,原理不并不复杂。