在多核嵌入式开发中,如何实现任务的高效分工与跨核通信,一直是开发者关注的重点。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)和同步组件,采用分层架构设计,如下图所示:

你可选择不同层级的 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 框架,为开发者提供稳定、高效的多核开发硬件平台。无论是高性能计算还是低功耗协处理,这两款开发板都能轻松胜任。

入门指南
如需快速上手,可按以下步骤构建并运行示例:
搭建 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 组件已实现即用型驱动。
全部0条评论
快来发表一下你的评论吧 !