ESP32 低功耗模式下,RTC 内存与 ULP 协处理器协同保存传感器数据的实战方案

· 2 浏览

回答(4)

别忘了RTC内存数据在Deep Sleep后保持,但复位(如看门狗)会清空,可在ULP中定期将关键数据写入RTC_NO_MEM(4KB),双备份防丢失。
芯海拾贝 · 2026-08-27
建议用esp_sleep_get_wakeup_cause()区分ULP唤醒和定时器唤醒,在ULP程序中用RTC_CNTL寄存器设置不同唤醒源标志,便于主CPU调试功耗异常。
低功耗攻城狮 · 2026-08-27
补充:ULP可直接操作ADC和触摸传感器,若用外部ADC(如ADS1115),需在ULP中实现I2C主模式,注意时钟速率降到100kHz以下,避免时序冲突。
嵌入式老周 · 2026-08-27
在ESP32低功耗设计中,RTC内存(RTC_SLOW_MEM)与ULP协处理器是黄金搭档。实战方案:1)将传感器(如BME280)挂到I2C,ULP周期唤醒读取原始数据,直接写入RTC_SLOW_MEM的预分配结构体(注意4字节对齐,避免跨bank访问)。2)主CPU在Deep Sleep前,初始化ULP程序并设置唤醒周期(如10s),同时将RTC内存中的“数据有效标志”清零。3)ULP每次采样后更新标志和计数,当计数达阈值或数据溢出时,通过RTC_CNTL触发主CPU唤醒。4)主CPU醒来后,从RTC内存批量读取数据,经WiFi/蓝牙上传,再清空缓冲重新进入睡眠。实操建议:用ulp-riscv工具链编译ULP程序,RTC内存访问用volatile指针;测试时用逻辑分析仪抓I2C时序,确认ULP唤醒间隔稳定;注意RTC内存总容量8KB,预留20%余量防止堆栈溢出。
mcuku 阿沐 · 2026-08-27