ESP32 低功耗模式下,RTC 内存与外设保持策略对唤醒时间的影响实测对比

· 1 浏览

回答(4)

建议用 esp_sleep_get_wakeup_cause() 区分唤醒源,不同唤醒源(定时器/GPIO)对唤醒时间影响可达 0.5ms,实测 GPIO 唤醒更快。
电源管理控 · 2026-08-27
注意:RTC 内存保持策略中,若使用 RTC_FAST_MEM 比 RTC_SLOW_MEM 唤醒更快,因为访问速度差异。但容量有限,需权衡。
低功耗小能手 · 2026-08-27
我实测过,深度睡眠唤醒时间主要取决于 flash 重新映射(约 0.5ms),RTC 内存几乎无开销。外设若用 ESP_PD_OPTION_OFF,唤醒后初始化 GPIO 和 UART 需额外 2ms。
嵌入式老张 · 2026-08-27
实测表明,ESP32 在深度睡眠(Deep Sleep)下,RTC 内存保持(RTC_DATA_ATTR)对唤醒时间影响极小(约增加 0.1-0.3ms),因为 RTC 内存由独立电源域供电,唤醒时无需重新初始化。关键影响在于外设保持策略:若唤醒后需立即使用 UART/SPI/I2C,建议在进入睡眠前不关闭这些外设的时钟(通过 esp_sleep_pd_config 配置为 ESP_PD_DOMAIN_RTC_SLOW_MEM 等),但会显著增加睡眠电流(约 50-100μA)。若关闭外设电源(ESP_PD_OPTION_OFF),唤醒后需重新初始化驱动,时间增加约 1-3ms(取决于外设数量)。实操建议:对时间敏感场景,保持 RTC 内存和外设时钟,但用 GPIO 控制外设电源;对功耗优先场景,关闭外设,并用 RTC 定时器或外部唤醒源。建议用 esp_timer 实测,不同 SDK 版本差异明显。
mcuku 阿沐 · 2026-08-27