乐鑫科技ESP-AMP框架详解!两款已支持的ESP32-P4C5开发板推荐!启明云端乐鑫科技代理

描述

 

在多核嵌入式开发中,如何实现任务的高效分工与跨核通信,一直是开发者关注的重点。ESP-AMP 作为专为 ESP32 系列打造的非对称多处理框架,现已支持主核运行 FreeRTOS、从核运行裸机或其他实时操作系统,并提供完整的核间通信机制。

启明云端旗两款高性能开发板——WT99P4C5-S1与 WTDKP4C5-S1,搭载乐鑫科技ESP32-P4芯片和ESP32-C5芯片,均已支持 ESP-AMP 框架,为开发者提供即插即用的多核开发体验,助力项目快速落地。


 

 

ESP-AMP介绍

ESP-AMP 是一款开源框架,适用于在多处理核心的 ESP32 系列片上系统(SoC)上构建非对称多处理(AMP)应用。该框架支持一个核心运行 IDF FreeRTOS 固件,另一个核心运行裸机或其他实时操作系统(RTOS)等不同软件环境,并提供了一套用于核心间通信与同步的 API。本文档后续将运行 IDF FreeRTOS 的核心称为主核(maincore),运行其他软件环境的核心称为从核(subcore)。

与 ESP-IDF 提供的默认对称多处理(SMP)系统相比,ESP-AMP 具有以下差异化特性:

核心功能定制选择:在单高性能(HP)核心的 SoC 中,低功耗(LP)核心可作为从核,为从主核分担部分任务;在多 HP 核心系统中,ESP-AMP 支持将一个 HP 核心作为主核,其余 HP 核心作为从核运行。

灵活性更高:支持在两个核心上并行部署不同配置、运行专用应用,以适配更复杂的使用场景(目前从核仅支持裸机环境)。

 

ESP-AMP架构

ESP-AMP 提供了一套完整的核心间通信(IPC)和同步组件,采用分层架构设计,如下图所示:

ESP

你可选择不同层级的 API,或组合多层级 API,以满足特定需求或使用场景。从下至上,各组件如下:

共享内存(Shared Memory):跨核心通信的基础数据共享机制。

软件中断(Software Interrupt):跨核心通信的基础通知机制。

事件(Event):包含主核与从核间同步的 API。

队列(Queue):无锁队列,支持核心间单向通信。

远程处理器消息传递(RPMsg):远程处理器消息传递协议的实现,支持应用中并发通信流。

远程过程调用(RPC):基于 RPMsg 构建的简易远程过程调用框架。

此外,ESP-AMP 还提供了端口层(Port Layer),用于抽象不同环境和 SoC 之间的差异,为上层提供统一接口。

 

构建系统

ESP-AMP 配备灵活的构建系统,可轻松构建主核和从核固件,核心特性包括:

采用标准 ESP-IDF 构建系统构建主核固件。

从核固件支持两种构建模式:统一构建模式(单条命令同时构建主核和从核固件)和独立构建模式(单独构建从核固件)。

从核固件支持两种存储方式:嵌入主核固件中,或写入闪存分区。

为裸机环境下的从核构建提供专用工具链配置。

 

系统组件

系统组件包含主核用于管理从核生命周期、处理从核系统事件的 API,目前支持的功能如下:

启动和停止从核。

将从核固件加载到 HP RAM 或 RTC RAM。

从核异常事件通知主核,并调用可自定义的异常处理器。

将从核的 printf 消息路由至主核控制台。

 

支持的ESP-IDF版本及SoC系统

目前 ESP-AMP 支持以下主核-从核配置组合,后续将持续扩展,支持更多 SoC 及配置方案。

SOC

版本

主核

从核

ESP32-C5

v5.5及以后版本

HP核心

LP核心

ESP32-C6

v5.3.1及以后版本

HP核心

LP核心

ESP32-P4

v5.3.1及以后版本

HP核心

HP核心

启明云端推出的 WT99P4C5-S1和 WTDKP4C5-S1开发板搭载乐鑫科技ESP32-P4芯片和ESP32-C5芯片,均已适配 ESP-AMP 框架,为开发者提供稳定、高效的多核开发硬件平台。无论是高性能计算还是低功耗协处理,这两款开发板都能轻松胜任。

ESP

入门指南

如需快速上手,可按以下步骤构建并运行示例:

搭建 IDF 环境

  •  
  •  
  •  
  •  
  •  

git clone --recursive https://github.com/espressif/esp-idf.gitcd esp-idfgit checkout v5.3.1 # for ESP32-C6/ESP32-P4 or v5.5 for ESP32-C5./install.sh. export.sh

克隆本仓库

  •  

git clone https://github.com/espressif/esp-amp.git


 

开始构建示例

  •  
  •  
  •  
  •  

cd esp-amp/examples/idf.py set-target idf.py buildidf.py flash monitor


 

 

从核应用构建技巧

从核应用受资源限制且有特殊工具链需求,需专用构建配置。

 

已知限制

ESP-AMP 仍在积极开发中,目前存在以下限制:

ESP32-P4 相关限制:

从核类型:目前 ESP32-P4 仅支持 HP 核心作为从核,暂不支持 LP 核心。

缺少 XIP 和 PSRAM 支持:从核暂未启用缓存,因此不支持从 PSRAM 访问数据及从闪存执行片上执行(XIP)。

主核缓存容量受限:ESP32-P4 SoC 内置 768 KB 内部 L2MEM,缓存内存从中分配,用户可通过 sdkconfig 中的 CONFIG_CACHE_L2_CACHE_SIZE 配置 128KB、256KB 或 512KB 缓存。但由于 256KB L2MEM 需预留用于从核固件,启用 ESP-AMP 后,缓存最大容量将降至 256KB。

 

常见问题(FAQ)

 为何不使用 OpenAMP?

OpenAMP 是一款广泛用于多核心 SoC 构建 AMP 应用的开源框架,ESP-AMP 正是受其启发开发。

未直接复用 OpenAMP 而选择独立开发的核心原因是,我们需要一款轻量级的 AMP 框架 ——OpenAMP 的丰富功能不仅增加了使用复杂度,还导致代码体积臃肿,难以移植到资源受限的系统(尤其是 ESP32-C5 和 ESP32-C6 的 LP 核心,默认仅 16KB RTC RAM 作为内部 RAM)。

ESP-AMP 设计初衷即为轻量化,同时提供构建 AMP 应用所需的核心功能。
 

能否将 RTC RAM 用作共享内存?

不建议将 RTC RAM 用作共享内存,因为 HP 核心与 LP 核心之间无法保证操作的原子性,且 RTC RAM 不支持比较并交换(CAS)操作。

 如何为从核开发外设驱动?

对于 HP 外设:ESP-IDF 的 hal 组件包含底层驱动,提供与操作系统无关、接口统一的 API,可在任意环境中操作不同 SoC 的 HP 外设寄存器。

对于 LP 外设:ESP-IDF 的 ulp 组件已实现即用型驱动。

 

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分