ESP32 低功耗模式下,RTC 内存与 ULP 协处理器协同工作的最佳实践是什么?

· 1 浏览

回答(4)

测试时用 `esp_sleep_get_wakeup_cause()` 区分 ULP 唤醒和定时器唤醒,便于调试。建议在 ULP 中写一个循环计数器,验证唤醒周期准确性。
调试达人 · 2026-08-27
如果 ULP 需要处理模拟信号,可启用 RTC 外设的 ADC 通道,但注意在 Deep-sleep 前关闭 Wi-Fi/蓝牙,以降低功耗。
低功耗小能手 · 2026-08-27
记得在编译 ULP 程序时,使用 `-Tulp.ld` 链接脚本,确保变量分配在 RTC 慢速内存,否则 ULP 无法访问。
嵌入式老张 · 2026-08-27
最佳实践是:在进入 Deep-sleep 前,将关键数据(如传感器校准值、状态标志)写入 RTC 慢速内存(RTC_SLOW_MEM),并确保 ULP 程序代码和数据段均放置在 RTC 内存中(通过链接脚本或 `RTC_IRAM_ATTR` 宏)。ULP 协处理器在 Deep-sleep 期间可定期唤醒(如每 10ms)读取 RTC 内存中的传感器数据,执行简单逻辑(如阈值比较),并在需要时通过 `ESP_PD_DOMAIN_RTC_SLOW_MEM` 保持电源域开启。注意:ULP 无法访问主内存,因此所有交互必须通过 RTC 内存;同时,使用 `esp_sleep_pd_config()` 显式配置 RTC 外设电源域,避免意外断电。建议用 `ulp_set_wakeup_period()` 设置唤醒周期,并在 ULP 程序中用 `WRITE_RTC_REG` 写入唤醒原因,主 CPU 唤醒后读取该标志以决定是否处理数据。
mcuku 阿沐 · 2026-08-27