与非网论坛

标题: ESP32 的 ULP 协处理器简介和汇编编译环境设置 [打印本页]

作者: qiaoweiyiyi    时间: 2019-2-28 17:02
标题: ESP32 的 ULP 协处理器简介和汇编编译环境设置
本文介绍 ESP32 强大的超低功耗协处理器 (ULP co-processor),给出汇编环境的搭建步骤。

1. ULP 协处理器简介

ULP 协处理器是一个功耗极低的协处理器设备,无论主 CPU 是处于正常运行模式还是 Deep-sleep 模式,ULP 协处理器都可以独立运行。超低功耗协处理器的补充使得 ESP32 能够胜任一些对低功耗要求较高的应用场合。

ULP 协处理器的主要特性有:


更多特性及介绍详见 ESP32 技术参考手册


2. ULP 协处理器电流消耗

鉴于以上的特性,ULP 协处理器能够在消耗较低电流的情况下,完成 ADC 采样,进行 I2C Sensor 的读写,驱动 RTC GPIO 口动作,可以在某些超低功耗场景中完全替代主 CPU。

下表给出一般测得的电流数值:


场景电流值
Deep-sleep6 μA
Delay Nop1.4 mA
GPIO Toggle1.4 mA
SAR_ADC Sampling2.3 mA

注意: 上表列出的电流消耗是在 ULP 协处理器引用 VDD3P3_RTC 工作电压,运行在 8 MHz,并且没有进入睡眠情况下测得的。当 ULP 协处理器设置为周期性的进入深度睡眠,在短时间内唤醒工作时,这些数字将会大大减少。因此,ULP 协处理器的理想工作状态是周期性唤醒,短暂工作之后,继续进入休眠状态,以短时间高效的工作和长时间的休眠换取低功耗平衡。

3. 配置 ULP 协处理器编译环境

ULP 协处理器目前只支持汇编开发,我们提供了三种不同平台(Linux,Windows,MacOS)的 ULP 协处理器编译环境的设置方法。

需说明:在安装汇编工具链之前,我们默认你已经安装和配置好 ESP32 ESP-IDF C 语言编译工具链,安装参考链接


3.1 Linux

Linux 下配置编译环境比较简单,只需要下载汇编编译工具链,解压到安装目录中,再添加环境变量即可完成设置。
1. 下载工具链 binutils-esp32ulp toolchain Linux(x64)
2. 解压到要安装的目录,添加工具链的 bin 目录到环境变量 PATH 中。例如,解压目录是 /opt/esp32ulp-elf-binutils 那么添加 export PATH=/opt/esp32ulp-elf-binutils/bin:$PATH 这一行到 .bashrc 文件中,运行 source .bashrc 使上述环境变量生效,这样,ULP 的汇编环境就设置完毕了。

3.2 Windows

首先安装 Windows / MSYS2 下的 C 编译工具链可参考说明链接 ,之后再安装 ULP 协处理器编译工具链链接
1. 解压 ULP 工具链 esp32ulp-elf-binutils-win32-... 到 MSYS2 的 opt 目录中,一般建议使用 C:\msys32\opt 目录,因为 ESP32 toolchain xtensa-esp32-elf 也在这个目录下。

2. 打开位于目录 C:\msys32\etc\profile.d 下的 esp32_toolchain.sh 文件,把 ULP 工具链的 bin/目录添加到 path 中,设置例如:

  1. # This file was created by ESP-IDF windows_install_prerequisites.sh
  2. # and will be overwritten if that script is run again.
  3. export PATH="$PATH:/opt/xtensa-esp32-elf/bin:/opt/esp32ulp-elf-binutils/bin"
复制代码
3. 保存文件并重新打开 MSYS2 控制台。

4.设置到此完成,你可以编译 ULP 协处理器的例程了,可尝试编译ULP ADC例子。

3.3 MacOS

MacOS 平台编译设置几乎是和 Linux 一样的,但需下载 MacOS 平台对应的编译工具链.
1. 下载 MacOS 平台的工具链
2. 解压工具链到安装目录,然后添加工具链的 bin/ 目录地址到 PATH 环境变量中,生效即可。



4. 编译 ULP 代码

如果把 ULP 汇编代码编译为应用组件的一部分,必须采取以下步骤:

  1. ULP_APP_NAME ?= ulp_$(COMPONENT_NAME)
  2. ULP_S_SOURCES = $(COMPONENT_PATH)/ulp/ulp_source_file.S
  3. ULP_EXP_DEP_OBJECTS := main.o
  4. include $(IDF_PATH)/components/ulp/component_ulp_common.mk
复制代码
3. 至此,可以编译包含 ULP 协处理器汇编代码的应用程序了。


5. ULP 协处理器的汇编指令

汇编指令目前有 24 条,在 ULP coprocessor instruction set 获得更详细的说明。


算数与逻辑类运算的指令
加载与数据储存类指令

跳转类指令

测量类指令

I2C 通讯指令

管理程序执行指令

控制协处理器睡眠周期

唤醒 CPU 及与 SOC 通信

6. ULP 协处理器的例程

esp-iot-solution 目录下目前有一些 ULP 协处理器使用的例子供参考



Num Examples Note
1 ulp_hall_sensor 在超低功耗模式下读取片内霍尔传感器例程
2 ulp_rtc_gpio 在 ULP mode 下操作 RTC GPIO 管脚翻转例子
3 ulp_tsens 在超低功耗模式下读片内温度传感器
4 ulp_watering_device 在超低功耗模式下使用 SAR_ADC 监测土壤湿度浇花的综合例程


7. 引用文档


本文作者 espressif
来源 CSDN

相关阅读:ESP32 AT 入门指南
ESP32 的 ULP 协处理器简介和汇编编译环境设置
ESP32 - ULP 协处理器在低功耗模式下操作 RTC GPIO






欢迎光临 与非网论坛 (https://www.eefocus.com/forum/) Powered by Discuz! X3.5