ESP32的ULP 协处理器笔记
1.ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行。超低功耗协处理器的补充使得 ESP32 能够胜任一些对低功耗要求较高的应用场合。ULP 协处理器的主要特性有:
- 采用 8 MHz 频率和 8 KB 内存
- 内建 ADC 和 I2C 接口
- 支持正常模式和 Deep-sleep 模式
- 可唤醒主 CPU 或向主 CPU 发送中断
- 能够访问主 CPU 的外围设备、内部传感器及 RTC 寄存器
2.ULP 协处理器能够在消耗较低电流的情况下,完成 ADC 采样,进行 I2C Sensor 的读写,驱动 RTC GPIO 口动作,可以在某些超低功耗场景中完全替代主 CPU。ULP 协处理器的理想工作状态是周期性唤醒,短暂工作之后,继续进入休眠状态,以短时间高效的工作和长时间的休眠换取低功耗平衡。
3.ULP(Ultra Low Power 超低功耗)协处理器是一种简单的有限状态机 (FSM),可以在主处理器处于深度睡眠模式时,使用 ADC、温度传感器和外部 I2C 传感器执行测量操作。ULP 协处理器可以访问 RTC_SLOW_MEM 内存区域及 RTC_CNTL、RTC_IO、SARADC 等外设寄存器。ULP 协处理器使用 32 位固定宽度的指令,32 位内存寻址,配备 4 个 16 位通用寄存器。
4.ULP 协处理器由定时器启动,而调用 ulp_run 则可启动此定时器。定时器为 RTC_SLOW_CLK 的 Tick 事件计数(默认情况下,Tick 由内部 150 KHz 晶振器生成)。使用 SENS_ULP_CP_SLEEP_CYCx_REG 寄存器 (x = 0..4) 设置 Tick 数值。第一次启动 ULP 时,使用 SENS_ULP_CP_SLEEP_CYC0_REG 设置定时器 Tick 数值,之后,ULP 程序可以使用 sleep 指令来另外选择 SENS_ULP_CP_SLEEP_CYCx_REG 寄存器。