ESP32 是设计用来应对移动设备、可穿戴电子设备和物联网(IoT)芯片,作为一款超低功耗芯片,具有许多特定,比如精细的时钟门控、节能模式和动态电压调整等。
在使用超低功耗的IoT传感器Hub应用时,ESP32只有在某些特定情况下才会被周期性唤醒,能够极大地降低消耗。通过调整射频放大器的输出功率,还能实现通信距离、数据传输速度和功耗的最佳平衡。
ESP32先进的电源管理技术,可以在不同的功耗模式之间切换,乐鑫目前的ESP系列芯片都支持三种低功耗模式:
-
Modem-sleep 模式:CPU 可运行,时钟频率可配置。Wi-Fi 及 Bluetooth LE 的基带和射频关闭, 但 Wi-Fi 或 Bluetooth LE 可保持连接。
-
Light-sleep 模式:CPU 暂停运行。任何唤醒事件(MAC、主机、RTC 定时器或外部中断)都会唤 醒芯片。Wi-Fi 或 Bluetooth LE 可保持连接。
-
Deep-sleep 模式:CPU 和大部分外设都会掉电,只有 RTC 存储器处于工作状态。Wi-Fi 连接数据 存储在 RTC 中。RTC 时钟定时器或RTC GPIO 可以将芯片从 Deep-sleep 模式中唤醒。
01
02
03
04
不同模式下的ESP32功能框图
其中在 Modem-sleep 模式和 Light-sleep 模式下WiFi、蓝牙可以保持连接(详细功耗数据可以参考规格书)以ESP32为例,功耗可以参考下表
Light-sleep 模式下保持连接
硬件准备
ESP32/ESP32C3/ESP32S3系列模组既支持外置 32.768 kHz 的时钟振荡器作为 RTC 睡眠时钟,也支持外 部激励信号(如有源晶振)作为 RTC 睡眠时钟。外置 32.768 kHz 晶振的电路如下图所示:
32.768 kHz 晶振选择要求:
-
等效内阻 (ESR) ⩽ 70 KΩ。
-
两端负载电容值根据晶振的规格要求进行配置。
-
并联电阻 R18 用于偏置晶振电路,电阻值要求 5 MΩ < R18 ⩽ 10 MΩ。
-
ESP32-D0WD-V3 外接 32.768 kHz 晶振时,并联的电阻必须上件;ESP32 系列其他芯片建议预留。
软件配置
编译时可使用 CONFIG_PM_ENABLE 选项启用电源管理功能。
启用电源管理功能将会增加中断延迟。额外延迟与多个因素有关,例如:CPU频率、单/双核模式、是否需要进行频率切换等。CPU 频率为 240 MHz 且未启用频率调节时,最小额外延迟为0.2 us;如果启用频率调节,且在中断入口将频率由40 MHz 调节至 80 MHz,则最大额外延迟为 40 us。
通过调用 esp_pm_configure()函数可以在应用程序中启用动态调频(DFS) 功能和自动Light-sleep 模式。此函数的参数 esp_pm_config_t 定义了频率调节的相关设置。在此参数结构中,需要初始化以下三个字段:
-
Max_freq_mhz:最大CPU 频率 (MHz),即获取 ESP_PM_CPU_FREQ_MAX 锁后所使用的频率。该字段通常设置为 CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ。
-
Min_freq_mhz:最小CPU 频率 (MHz),即仅获取 ESP_PM_APB_FREQ_MAX 锁后所使用的频率。该字段可设置为晶振 (XTAL) 频率值,或者 XTAL 频率值除以整数。注意,10 MHz 是生成 1 MHz 的 REF_TICK 默认时钟所需的最小频率。
-
Light_sleep_enable:没有获取任何管理锁时,决定系统是否需要自动进入Light-sleep 状态 (true/false)。
如果在menuconfig中启用了CONFIG_PM_DFS_INIT_AUTO选项,最大 CPU 频率将由CONFIG_ESP_DEFAULT_CPU_FREQ_MHZ设置决定,最小 CPU 频率将锁定为 XTAL 频率。
需要注意的是:
自动 Light-sleep 模式基于FreeRTOS Tickless Idle功能,因此如果在menuconfig 4中没有启用CONFIG_FREERTOS_USE_TICKLESS_IDLE选项,在请求自动 Light-sleep 时,esp_pm_configure() 将会返回 ESP_ERR_NOT_SUPPORTED错误。Light-sleep 状态下,外设设有时钟门控,不会产生来自GPIO 和内部外设的中断。睡眠模式 文档中所提到的唤醒源可用于从 Light-sleep 状态触发唤醒。
Menuconfig配置
蓝牙还需要配置 Modem-sleep 相关配置
具体可以参考ESP-IDF下的 power_save 例程