ESP 系列的产品 ULP 协处理器的应用

news2024/11/25 3:00:28

参考文档:

  • 《ESP32-S2 技术参考手册》 中 “1. 超低功耗协处理器 (ULP)” 章节
  • 《ESP32-S3 技术参考手册》 中 “2 超低功耗协处理器 (ULP­FSM, ULP­RISC­V)” 章节
  • 《ESP32-C6 技术参考手册》 中 “3 低功耗处理器” 章节
  • ULP 协处理器编程
  • ULP RISC-V 协处理器编程
  • Programming ULP FSM coprocessor using C macros (legacy)
  • ESP32-S3 ULP coprocessor instruction set
  • ULP 例程:esp-idf/examples/system/ulp
  • ULP FSM 例程:esp-iot-solution/examples/ulp_examples
  • 什么是 ULP 超低功耗协处理器?
  • 支持 ULP (超低功耗)协处理器的产品有哪些?
  • ULP-RISC-V 协处理器与 ULP-FSM 协处理器的区别
  • ULP-FSM 与 ULP-RISC-V 支持的具体特性
  • ESP32-S2 、ESP32-S3 与 ESP32-C6 的 ULP-FSMULP­-RISC­V 协处理器对比
  • ULP-RISC-V 协处理器工作流程
  • ULP-RISC-V 协处理器的具体应用
  • ULP 应用与 DeepSleep 的功耗对比

什么是 ULP (Ultra Low Power)超低功耗协处理器?


ULP 超低功耗协处理器 (ULP, Ultra-Low-Power coprocessor) 是一种功耗极低的处理器设备,可在芯片进入 Deepsleep 时保持上电,允许开发者将 ULP 协处理器的程序存放在 RTC 慢速存储器中,使其能够在 Deep-sleep 模式下访问 RTC 外设、内部传感器及 RTC 寄存器。在对功耗敏感的场景下,主 CPU 处于睡眠状态以降低功耗,ULP 协处理器可以由协处理器定时器唤醒,通过控制 RTC GPIO、RTC I2C、SAR ADC、温度传感器 (TSENS) 等外设监测外部环境或与外部电路进行交互,并在达到唤醒条件时主动唤醒主 CPU。

无论主 CPU 是否处于休眠状态,ULP 协处理器可独立于主 CPU 运行,是主 CPU 的有力补充,甚至可以在一些功耗敏感的设计中取代 主CPU。


支持 ULP (超低功耗)协处理器的产品有哪些?


产品ESP8266ESP32ESP32-S2ESP32-S3ESP32-C2ESP32-C3ESP32-C5ESP32-C6ESP32-H2
ULPNOYesYesYesNONOYesYesNO

ULP-RISC-V 协处理器与 ULP-FSM 协处理器的区别


目前,我们的产品提供了两种类型的 ULP 协处理器,分别是:

  • ULP-RISC-V (发音为"risk five")协处理器:基于 RISC-V 指令集 (ULP-RISC-V)
  • ULP-FSM (Finite State Machine)协处理器:基于有限状态机 FSM 架构 (ULP-FSM)
产品ESP32ESP32-S2ESP32-S3ESP32-C5ESP32-C6
ULP_FSMYesYesYesNONO
ULP_RISC-VNOYesYesYesYes

注意:两个 ULP 协处理器不能同时使用。用户只能选择其中一个 ULP 超低功耗协处理器工作。


ULP-FSM 与 ULP-RISC-V 的特性


ULP-FSM 协处理器不支持高级语言,用户需使用 ULP-FSM 专门指令集进行编程(汇编语言编写(必须使用 .S 扩展名))
在这里插入图片描述

  • ULP-­FSM 协处理器具有以下特性:

    • 支持常用指令,包括运算、跳转、控制等
    • 支持传感器专用指令
    • 支持被主 CPU、专用定时器、RTC GPIO 启动

ULP-RISC-V 协处理器支持用户使用 C 语言(或汇编语言)编写程序,然后使用编译器(基于 GCC 的 RISC-V 工具链)将程序编译成 RV32IMC 标准指令码。
在这里插入图片描述

  • ULP­-RISC­V 协处理器具有以下特性:
    • 支持 RV32IMC 指令集
    • 32 个 32 位通用寄存器
    • 32 位乘除法器
    • 支持中断
    • 支持被主 CPU、专用定时器、RTC GPIO 启动

ESP32-S2 、ESP32-S3 与 ESP32-C6 的 ULP-FSMULP­-RISC­V 协处理器对比

在这里插入图片描述


ULP-RISC-V 协处理器工作流程

在这里插入图片描述

  • 编写 ULP 协处理器运行的用户程序
  • 使用 ulp_riscv_load_binary() 将程序下载到 ULP 存储器中,即 RTC_SLOW_MEM
  • 使用 ulp_set_wakeup_period() 设置 ULP 定时器唤醒时间周期,即通过 ULP 定时器定时唤醒 ULP­-RISC­V 协处理器
  • 使用 ulp_riscv_run 运行 ULP­-RISC­V 协处理器的用户程序。
  • 使用 esp_sleep_enable_ulp_wakeup() 使能 ULP 唤醒源,用于唤醒 DeepSleep 模式

在这里插入图片描述

  • 使用 esp_deep_sleep_start() 进入 deepsleep 模式

ULP-RISC-V 协处理器的具体应用

ESP32-S2 与 ESP32-S3 的 ULP-RISC-V 协处理器应用例程

  • esp-idf/examples/system/ulp/ulp_riscv/gpio

通过检测 RTC GPIO 的电平状态来唤醒 Deepsleep

  • esp-idf/examples/system/ulp/ulp_riscv/gpio_interrupt

这里的程序看上去使用 RTC GPIO 中断来唤醒 ULP-RISC-V 协处理器的,但其实 ULP-RISC-V 协处理器只有一个唤醒源就是 ULP Timer,但是这个 ULP Timer 可以通过软件设置触发或者 RTC GPIO 中断触发,也就是整个唤醒过程是 RTC GPIO 中断 --> ULP Timer --> ULP ULP-RISC-V 协处理器,可以理解为是利用 RTC GPIO 间接唤醒了 ULP ULP-RISC-V 协处理器

  • esp-idf/examples/system/ulp/ulp_riscv/adc

通过检测 RTC ADC 通道的电压大小,当电压达到软件设置的 ADC 阈值时将唤醒 Deepsleep

  • esp-idf/examples/system/ulp/ulp_riscv/uart_print

演示了对 ULP-RISC-V 协处理器进行编程以对 UART TX 线进行位控制。即使主 CPU 处于深度睡眠状态,也可用于直接记录来自 ULP 的输出。

  • esp-idf/examples/system/ulp/ulp_riscv/i2c

使用 ULP 协处理器在低功耗模式下模拟 I2C 主机读取 BMP180 温度传感器和压力传感器的数据。定期测量 BMP180 传感器的温度和压力值,并在值高于某个阈值时唤醒主 CPU。
适用场景:

  • 健康监测:比如心率、血氧传感器,当数据高于某个阈值时唤醒 CPU,进行上报,以检测身体状态。
  • 消防安全:比如烟雾监测传感器,当烟雾达到一定浓度时,唤醒 CPU 进行报警。
  • 工业环境:比如恒温车间,通过温度传感器监测环境温度,当温度高于某个阈值时,唤醒 CPU 进行报警。
  • 畜牧养殖:比如孵化小鸡,通过光照传感器监测光照强度,当光照强度高于某个阈值时,唤醒 CPU 停止外部光照
  • esp-idf/examples/system/ulp/ulp_riscv/touch

对 ULP RISC-V 协处理器进行编程以读取触摸板传感器。

  • 水位监测:比如鱼缸应用,通过设置不同高度的触摸滑条,来监测水位,当水位到达设定的触摸滑条高度时,唤醒 CPU 停止外部供水。
  • esp-idf/examples/system/ulp/ulp_riscv/ds18b20_onewire

通过 RTC GPIO 模拟 OneWire 协议来读取 DS18B20 温度传感器的数据,当数据超过设定的限制时,唤醒 CPU 进行数据上报。

ESP32-C6 的 ULP-RISC-V 协处理器应用例程

  • esp-idf/examples/system/ulp/lp_core/gpio

  • esp-idf/examples/system/ulp/lp_core/lp_i2c

  • LP_I2C 和 I2C 的功能差异如下:

    在这里插入图片描述

  • LP I2C 可以在 HP CPU 下运行,使用 LP I2C 只需要注意:

    • 硬件上需要使用 LP I2C 管脚
    • lp_i2c_num 设置为 LP_I2C_NUM_0
    • LP I2C 默认使用 RC_FAST_CLK,如果需要改为 XTAL_CLK ,则在 i2c_config_t 里配置 .soc_periph_i2c_clk_src_t = I2C_CLK_SRC_XTAL; 即可。
    • LP I2C 相关的 API 带有 LP 前缀的,比如 i2c_master_init()i2c_slave_init()I2C 可使用;lp_core_i2c_master_init()LP I2C 可使用。
  • esp-idf/examples/system/ulp/lp_core/lp_uart/lp_uart_echo
  • esp-idf/examples/system/ulp/lp_core/lp_uart/lp_uart_print

ESP32-C6 的 UART 控制器LP UART 控制器的特性区分见下表:

在这里插入图片描述

  • LP UART 可以在 HP CPU 下运行,使用 LP UART 只需要注意:
    • 硬件上需要使用 LP UART 管脚
    • lp_uart_num 设置为 LP_UART_NUM_0
    • LP UART 默认使用 RC_FAST_CLK,如果需要改为 XTAL_CLK ,则在 uart_config_t 里配置 .lp_source_clk = LP_UART_SCLK_XTAL_D2; 即可。
    • LP UART 相关的 API 带有 LP 前缀的,比如 uart_read_bytes()uart_write_bytes()UART 可使用;lp_core_uart_write_bytes()lp_core_uart_read_bytes()LP UART 可使用。

ULP-RISC-V 应用与 Deepsleep 功耗对比

Deep Sleep 模式下使用 ULP 协处理器,底电流的大小和 Deep Sleep 相同,同时从图中可以看出,还会有定期的 ULP 处理器唤醒的功耗。因此平均功耗比起普通的 Deep Sleep 要高一点,但是当唤醒的间隔足够长时,就无限接近于 Deep Sleep 的底电流。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/876582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

leetcode2024. 考试的最大困扰度(java)

考试的最大困扰度 leetcode2024. 考试的最大困扰度题目描述滑动窗口最大值 经典算法 leetcode2024. 考试的最大困扰度 难度 - 中等 原题链接 - 考试的最大困扰度 题目描述 一位老师正在出一场由 n 道判断题构成的考试,每道题的答案为 true (用 ‘T’ 表示…

程序设计 堆

✅作者简介:人工智能专业本科在读,喜欢计算机与编程,写博客记录自己的学习历程。 🍎个人主页:小嗷犬的个人主页 🍊个人网站:小嗷犬的技术小站 🥭个人信条:为天地立心&…

代码随想录算法训练营第三十四天 | 1005.K次取反后最大化的数组和,134. 加油站 ,135. 分发糖果

代码随想录算法训练营第三十四天 | 1005.K次取反后最大化的数组和,134. 加油站 ,135. 分发糖果 1005.K次取反后最大化的数组和:eyes:题目总结:eyes: 134. 加油站暴力方法贪心算法(方法一)贪心算法(方法二):…

Stable Diffusion+Temporal-kit 半虚半实应用

1.先下载temporal-kit,重启webui 2.下载好ffmpeg,配置好环境,下载Ebsynth 3.准备好你需要的视频,拖到预处理视频位置 4.填写参数,点解保存设置,然后并点击生成,会生成到目标文件夹的input位置 5.然后拉出input文件夹里面你想切换成处理的帧图片,然后填写prompt查看效…

分布式 - 服务器Nginx:一小时入门系列之HTTP反向代理

文章目录 1. 正向代理和反向代理2. 配置代理服务3. proxy_pass 命令解析4. 设置代理请求headers 1. 正向代理和反向代理 正向代理是客户端通过代理服务器访问互联网资源的方式。在这种情况下,客户端向代理服务器发送请求,代理服务器再向互联网上的服务器…

将会计转移到 cloud:远程访问软件的作用

在不断变化的金融和技术格局中,会计行业经历了重大演变。账簿和人工计算在金融界占据主导地位的日子已经一去不复返了。如今,随着企业寻求更高效、更准确、更具协作性的财务管理方式,数字化转变比以往任何时候都更加明显。我们正处于会计复兴…

C# Linq源码分析之Take (一)

概要 在.Net 6 中引入的Take的另一个重载方法,一个基于Range的重载方法。因为该方法中涉及了很多新的概念,所以在分析源码之前,先将这些概念搞清楚。 Take方法基本介绍 public static System.Collections.Generic.IEnumerable Take (this …

jeecgboot table 单元格横向和纵向合并

customRender: (value, row, index) > {const obj {children: ¥200200火力值,attrs: {}}if (index 0) {// obj.attrs.rowSpan this.dataSource.length // 合并数量 纵向合并obj.attrs.colSpan 3 // 横向合并}if (index > 1) {// obj.attrs.rowSpan 0 // …

2023上半年京东手机行业品牌销售排行榜(京东数据平台)

后疫情时代,不少行业都迎来消费复苏,我国智能手机市场在今年上半年也实现温和的复苏,手机市场的出货量回暖。 根据鲸参谋平台的数据显示,2023年上半年,京东平台上手机的销量为2830万,环比增长约4%&#xf…

注解@ConfigurationProperties获取配置文件内容 (demo)

1. 自定义配置文件内容 2. ConfigurationProperties import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;Data Component ConfigurationProperties(prefix"wx-pay.v3&qu…

从密码重置打到Getshell和其它漏洞打包

前言: 前几天是准备上点edusrc的分的所以就准备用手上还没刷的Nday继续上分,然后就有了今天这个案例: 信息收集: 之前在挖某体育学院证书的时候就挖到过一个通过修改html文件更改密码修改步骤的漏洞 所以就准备测绘一下这个资产…

dataset中图像处理提速小技巧

图像增广中,边缘填充颜色写元组还是写单一数值 一,写元组: self.border_fill_value 114, 114, 114 # 定义为元组# 仿射变换的时候的写法:merge_mosaic_image cv2.warpAffine(merge_mosaic_image, M, (self.image_size, self.…

【uniapp】微信小程序,取视频第一帧,前提是 图片是在 阿里云的oss上

上传视频等,默认为黑色,无法用视频的第一帧作为封面,以及视频的video为原生组件,层级很高无法覆盖问题,虽然有cover-view,但很多场景还是不灵活 实现的前提条件是 图片是在 阿里云的oss上 自己服务器是…

SpringCloud中 Sentinel 限流的使用

引入依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency>手动编写限流规则&#xff0c;缺点是不够灵活&#xff0c;如果需要改变限流规则需要修改源码…

【GitOps系列】如何解决 GitOps 的秘钥存储问题?

文章目录 简介GitOps 密钥管理方案安装 Sealed-Secrets安装 CLI 工具安装 Controller 控制器 示例应用介绍创建 ArgoCD 应用创建加密后的 Secret 对象创建 Image Pull Secret 对象创建 Secret 对象推送到代码仓库验证 Secret 原理解析核心关注点 简介 在实际的业务场景下&…

1.SpringMVC接收请求参数及数据回显:前端url地址栏传递参数通过转发显示在网页

1、SpringMVC 处理前端提交的数据 1.1 提交的域名和处理方法的参数不一致&#xff0c;使用注解解决 1.2 提交的域名和处理方法的参数不一致&#xff0c;使用注解解决 1.3 提交的是一个对象 2、前端url地址栏传递的是一个参数 请求地址url&#xff1a;http://localhost:8080/s…

openGauss学习笔记-39 openGauss 高级数据管理-分区表

文章目录 openGauss学习笔记-39 openGauss 高级数据管理-分区表39.1 范围分区表的分类39.2 创建范围分区39.2.1 创建VALUES LESS THAN范围分区表语法格式39.2.2 创建VALUES LESS THAN范围分区表参数说明39.2.3 创建VALUES LESS THAN范围分区表示例 39.3 询分区表39.3.1 查询分区…

el-table自适应缩放大小

安装依赖 npm install --save vue-draggable-resizable //或 cnpm install --save vue-draggable-resizablemain.js引入依赖 import VueDraggableResizable from vue-draggable-resizable import "vue-draggable-resizable/dist/VueDraggableResizable.css"; Vue.c…

Haproxy+Keepalived高可用部署

环境准备&#xff1a; IPVIPmasterhaproxy192.168.134.170192.168.134.100backuphaproxy192.168.134.172192.168.134.100web1192.168.134.171web2192.168.134.173web3192.168.134.174 1、首先配置啊三台web服务器&#xff0c;并写好测试页面。 web1&#xff08;配置jsp页面&…

Wlan——CAPWAP协议的报文格式与报文封装

目录 CAPWAP报文携带信息 Discovery报文&#xff08;AP先发&#xff09; Join报文&#xff08;AP先发&#xff09; Configuration Status报文&#xff08;AP先发&#xff09; Change State报文&#xff08;AP先发&#xff09; Echo报文&#xff08;AP和AC都可以先发&…