ESP 低功耗入门

[English]

概述

根据功能和供电域的不同,ESP32 系列芯片可以大致分为以下五个模块:

  • RF 模块:即射频模块,用于蓝牙 / Wi-Fi 的收发(TX / RX)功能。

  • CPU:如 Xtensa 内核 (ESP32 / ESP32-S2 / ESP32-S3 等),RISC-V 内核(ESP32-C3 / ESP32-C2 等)。

  • 无线数字模块:包括 Wi-Fi 和蓝牙的物理层,如 Wi-Fi 的 MAC,蓝牙的 Link controller。

  • 非 RTC 外设:如常用的 SPI, I2C, LEDC 等。

  • RTC 相关:包括 RTC GPIO, ULP 等。

芯片的功耗主要由各功能模块的工作状态决定。通常,处于工作状态的模块越多,芯片的整体功耗越高。

ESP32 系列芯片支持四种工作模式,按照运行时的平均功耗由高到底排序,依次为 Active, Modem sleep, Light sleep 和 Deep sleep。不同模式下各功能模块的上电与运行状态不同,从而产生功耗差异。下图展示了不同工作模式下的各模块运行状态:

不同工作模式下的模块运行状态

Active 模式

在该模式下,芯片的所有模块均处于上电工作状态,此时芯片的底电流大约为 20 ~ 40 mA。

Modem sleep 模式

Modem sleep 模式 下,当无线模块没有数据传输任务或不进行扫描时,RF 射频模块会自动关闭以降低功耗,而 CPU 保持运行,芯片仍能处理应用任务。芯片的底电流可参考各型号 datasheet 中的功耗参数。

可使用 hello_world 示例 测试 Modem sleep 模式下的功耗数据。

Light sleep 模式

Light sleep 模式 下,数字外设、CPU、以及大部分 RAM 都使用时钟门控,同时其供电电压降低,RF 模块会被关闭,以此来达到功耗降低的结果。此时的芯片底电流可以参考各芯片的 datasheet 上的功耗,如 ESP32-C3 为 130 μA,ESP32-S3 为 240 μA。

Deep sleep 模式

Deep sleep 模式 下,除 RTC 模块外,其他模块全部被下电,底电流可以参考各芯片的 datasheet,如 ESP32-C3 为 5 μA,ESP32-S3 为 7 μA。

唤醒源

处于 Light sleep 和 Deep sleep 状态的芯片可以通过唤醒源被唤醒,不同芯片的 Light sleep 和 Deep sleep 唤醒源分别如下表所示。各唤醒源的具体使用可以查看 Light sleepDeep sleep 例程以及 IDF 编程指南中的 唤醒源 小节。

Light sleep 唤醒源

ESP32

ESP32-S2

ESP32-S3

ESP32-C3

ESP32-C2

ESP32-C6

ESP32-C5

ESP32-C61

ESP32-H2

ESP32-P4

RTC Timer

GPIO

EXT0 (仅限 RTC GPIO)

EXT1 (仅限 RTC GPIO)

UART

Touch

ULP-FSM

ULP-RISCV/LP core

Deep sleep 唤醒源

ESP32

ESP32-S2

ESP32-S3

ESP32-C3

ESP32-C2

ESP32-C6

ESP32-C5

ESP32-C61

ESP32-H2

ESP32-P4

Timer

GPIO(仅限 RTC GPIO)

EXT0 (仅限 RTC GPIO)

EXT1 (仅限 RTC GPIO)

Touch

ULP-FSM

ULP-RISCV/LP core

注意事项

  • EXT0 和 EXT1 唤醒只能作用于 RTC GPIO,和 GPIO 唤醒相比,它们依赖的硬件电源域不同,但实际使用体验差异不大。

  • UART 中断需要一定数量字节用于唤醒,所以如果想要使用 UART 中断,需要约定好唤醒规则,更多说明可参考 UART 唤醒

  • 在 Deep sleep 模式下,GPIO 唤醒需要使用 RTC GPIO。

  • 除 GPIO 外,Deep Sleep 的唤醒源与 Light Sleep 类似,但增加了 ULP(协处理器)唤醒。ESP32 仅支持 ULP-FSM,需要用汇编编写唤醒程序;而 ESP32-S2/S3 支持 ULP-RISCV,可使用 C 语言编写协处理器程序。