news 2026/9/15 16:03:00

Zephyr 在 Arm MPS3 平台上的开发指南:Corstone-300/Corstone-310 与 AN536 的构建、烧录与仿真

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Zephyr 在 Arm MPS3 平台上的开发指南:Corstone-300/Corstone-310 与 AN536 的构建、烧录与仿真

Zephyr 在 Arm MPS3 平台上的开发指南:Corstone-300/Corstone-310 与 AN536 的构建、烧录与仿真

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

导读

本文围绕 Zephyr RTOS 官方仓库中boards/arm/mps3的板级支持文档展开,系统讲解在 Arm MPS3 FPGA 原型验证板与 Corstone 系列 Fixed Virtual Platform(FVP)上开发 Zephyr 应用的完整流程。你将掌握mps3/corstone300/*mps3/corstone310/*mps3/an536/*各板级目标(BOARD qualifier)的适用场景、Secure/Non-Secure 固件构建差异、FPGA 通过 Micro SD 卡上传固件的方法,以及如何借助 QEMU 与 FVP 在无硬件的情况下完成开发验证。

MPS3 平台概览

MPS3(Arm MPS3 FPGA Prototyping Board)板卡配置由 Zephyr 官方仓库的 boards/arm/mps3 目录提供,被 Zephyr 应用用于运行在 MPS3 硬件上。它同时支持多种 Arm FPGA 镜像(FPGA image)与仿真模型:

  • AN536支持 Arm Cortex-R52 CPU(Cortex-R52x2 双核子系统示例)
  • AN547 与 AN552支持 Arm Cortex-M55 CPU(SSE-300 子系统 Soft Macro Model,SMM)
  • AN555支持 Arm Cortex-M85 CPU(SSE-310 子系统)
  • Corstone-300 与 Corstone-310 FVP(Fixed Virtual Platform,固定虚拟平台)支持所选的 Cortex-M 配置

根据所选板级目标的不同,Zephyr 提供以下设备支持:

  • Nested Vectored Interrupt Controller(NVIC)
  • System Tick System Clock(SYSTICK)
  • Generic Interrupt Controller v3(GICv3,用于 AN536)
  • Arm architectural timer(架构定时器)
  • Cortex-M System Design Kit GPIO(CMSDK GPIO)
  • Cortex-M System Design Kit UART(CMSDK UART)
  • Ethos-U55 NPU(神经网络处理单元)

Corstone-300 / Corstone-310 FVP 是对 Arm 系统的完整仿真,包括处理器、内存与外围设备,免费提供给 Linux 与 Windows 主机使用。Zephyr 选择 FVP 作为仿真手段,是因为它能访问 Ethos-U55 NPU——这是 QEMU 或其他仿真平台不具备的能力。而 AN536 的 Cortex-R52x2 子系统则可以通过 QEMU 的mps3-an536机器支持。

板级目标(BOARD options)总览

Zephyr 为 MPS3 提供了多个 board 目标,其中corstone300corstone310系列均区分Secure(安全态)Non-Secure(非安全态)固件。board.ymlsocs的层级结构印证了这一点:corstone300之下有an547an552fvp三个变体,且各自再派生ns变体;corstone310之下有an555fvp及对应ns变体;an536则为独立 SoC 条目,见 boards/arm/mps3/board.yml。

MPS3 Corstone-300(AN547)

MPS3+ AN547 是 Cortex-M55 架构 SoC,Zephyr 同时支持构建 Secure 与 Non-Secure 固件:

BOARD说明
mps3/corstone300/an547构建 Secure(或仅 Secure)固件
mps3/corstone300/an547/ns构建 Non-Secure 固件
  • FPGA 用法:按照本文「编程与调试」章节的构建与烧录步骤执行。
  • FVP 用法:该变体不支持 FVP。
  • QEMU 用法:若希望用 QEMU 替代默认仿真器,可在构建时通过-DEMU_PLATFORM=qemu覆盖仿真平台选择:
$ west build -b mps3/corstone300/an547 samples/hello_world -DEMU_PLATFORM=qemu -t run

MPS3 Corstone-300(AN552)

MPS3+ AN552 同样是 Cortex-M55 架构 SoC,支持 Secure 与 Non-Secure 固件构建:

BOARD说明
mps3/corstone300/an552构建 Secure(或仅 Secure)固件
mps3/corstone300/an552/ns构建 Non-Secure 固件
  • FPGA 用法:按「编程与调试」章节执行。
  • FVP 用法:该变体不支持 FVP。
  • QEMU 用法:该板级变体不支持 QEMU。

MPS3 Corstone-300(FVP)

MPS3+ FVP 是 Cortex-M55 架构的仿真模型,支持 Secure 与 Non-Secure 固件构建:

BOARD说明
mps3/corstone300/fvp构建 Secure(或仅 Secure)固件
mps3/corstone300/fvp/ns构建 Non-Secure 固件
  • FPGA 用法:不适用(N/A)。
  • FVP 用法:使用 FVP 前,先设置环境变量ARMFVP_BIN_PATH,然后通过west build -t run运行:
export ARMFVP_BIN_PATH=/path/to/fvp/directory west build -b {BOARD qualifier from table above} samples/hello_world -t run

要运行 Fixed Virtual Platform 仿真工具,需从 Arm 下载并安装「FVP model for the Corstone-300 MPS3」。官方测试使用的版本为11.24.13(2024-01-04)

  • QEMU 用法:不适用(N/A)。

MPS3 Corstone-310(AN555)

MPS3+ AN555 是 Cortex-M85 架构 SoC,支持 Secure 与 Non-Secure 固件构建:

BOARD说明
mps3/corstone310/an555构建 Secure(或仅 Secure)固件
mps3/corstone310/an555/ns构建 Non-Secure 固件
  • FPGA 用法:按「编程与调试」章节执行。
  • FVP 用法:该变体不支持 FVP。
  • QEMU 用法:该板级变体不支持 QEMU。

MPS3 Corstone-310(FVP)

MPS3+ FVP 是 Cortex-M85 架构的仿真模型,支持 Secure 与 Non-Secure 固件构建:

BOARD说明
mps3/corstone310/fvp构建 Secure(或仅 Secure)固件
mps3/corstone310/fvp/ns构建 Non-Secure 固件
  • FPGA 用法:不适用(N/A)。
  • FVP 用法:同样先设置环境变量ARMFVP_BIN_PATH,再用west build -t run运行:
export ARMFVP_BIN_PATH=/path/to/fvp/directory west build -b {BOARD qualifier from table above} samples/hello_world -t run

运行 Corstone-310 FVP 需下载并安装「FVP model for the Corstone-310 MPS3」,官方测试版本同为11.24.13(2024-01-04)

  • QEMU 用法:不适用(N/A)。

MPS3 AN536

MPS3 AN536 是 Cortex-R52x2 双核子系统示例。Zephyr 目前支持为CPU0构建固件:

BOARD说明
mps3/an536/cpu0为 R52 CPU0 构建固件
  • FPGA 用法:不适用(N/A)。
  • FVP 用法:不适用(N/A)。
  • QEMU 用法:通过 QEMU 运行:
west build -b mps3/an536/cpu0 samples/hello_world -t run

注意:板级限定符(Board qualifier)必须包含上述完整板名。仅写mps3/corstone300mps3/corstone310mps3/an536而不带完整限定符是无效的。仓库 boards/arm/mps3/board.cmake 中对此有硬性校验——若只指定到 SoC 层级,构建系统会直接FATAL_ERROR并列出可用目标。

硬件组成

Arm MPS3 板卡提供以下硬件组件(详见 boards/arm/mps3/doc/index.rst):

  • CPU

    • AN547 / AN552:Arm Cortex-M55 CPU + SSE-300 子系统的 Soft Macro Model(SMM)实现
    • AN555:Arm Cortex-M85 CPU + SSE-310 子系统的 SMM 实现
    • AN536:Arm Cortex-R52 CPU + Cortex-R52x2 子系统示例
  • 内存

    • 8MB BRAM
    • 4GB DDR4 SODIMM(默认,可升级至 8GB)
    • 16GB eMMC
    • 8MB QSPI Flash
  • 调试

    • P-JTAG、F-JTAG、SWD、4-bit trace、16-bit trace
    • 通过 USB 提供四个串口
  • 接口

    • AHB GPIO、UART、SPI、I2C、I2S
    • Color LCD 串行接口、Ethernet、VGA
  • 板载外设

    • Color LCD、10 个 LED、8 个开关、2 个用户按键

这些板载 LED 与按键在设备树中有完整的节点定义。从 boards/arm/mps3/mps3_common.dtsi 可以看到 10 个gpio-ledsled_0~led_7为 USERLED0~7,led_8/led_9对应 PB1LED/PB2LED,由gpio_led0驱动)以及 2 个gpio-keys用户按键(USERPB0/USERPB1,由gpio_button驱动),并提供了led0led1sw0sw1别名,方便应用通过gpio_dt_spec等 API 直接使用。

支持的设备特性

MPS3 板级支持的特性包括 CMSDK UART、CMSDK GPIO、NVIC、SYSTICK、Ethos-U55 NPU 等,均由 Zephyr 板级文档中的zephyr:board-supported-hw指令自动汇总生成。以 AN547 的设备树 boards/arm/mps3/mps3_corstone300_an547.dts 为例:

  • 兼容字符串为arm,mps3-an547,CPU 为arm,cortex-m55,MPU 采用arm,armv8.1m-mpu
  • chosen节点将zephyr,console/zephyr,shell-uart指向uart0,将zephyr,sram指向dtcmzephyr,flash指向itcm
  • Ethos-U55arm,ethos-u兼容字符串定义在0x48102000,中断号为 56,并启用secure-enableprivilege-enable
  • NVIC 配置为arm,num-irq-priority-bits = <3>

内存布局(Corstone-300 示例)

AN547 设备树中的内存区域定义(Secure 地址,减去0x10000000即得到 Non-Secure 别名):

区域地址大小说明
ITCM0x10000000(别名0x0512KBZephyr flash 区域
SRAM0x11000000(别名0x010000002MB(FVP 为 1MB)通用 SRAM
DTCM0x30000000(别名0x20000000512KBZephyr SRAM 区域
ISRAM0x31000000(别名0x210000004MB(FVP 为 2MB)额外 SRAM
DDR40x600000002GB,每 256MB 交替 Non-Secure/Secure外部内存

此外,Non-Secure 构建会引入 8MBsoc-nv-flash控制器(基址0x28000000,擦除块 64KB、写块 4 字节),并定义 TF-M 多镜像启动所需的分区:slot0_partition(512KB @0x0)、slot0_ns_partition(3MB @0x80000)、slot1_partition(512KB @0x380000)、slot1_ns_partition(3MB @0x400000)与scratch_partition(512KB @0x700000),详见 boards/arm/mps3/mps3_common_ns.dtsi。这些分区布局需要与 TF-M 工程在flash_layout.h中的定义保持一致。

串口布局

MPS3 共有6 个 UART。Zephyr 控制台输出默认使用UART0,通过 Debug USB 接口(J8)对外暴露。Debug USB 接口上的串口映射如下:

Debug USB 串口连接
Serial port 0MCC 板级控制控制台
Serial port 1UART 0(Zephyr 默认控制台)
Serial port 2UART 1
Serial port 3UART 2

对于AN536,Cortex-R52x2 子系统提供 LLPP UART0 与 LLPP UART1 作为 CPU 私有 UART,另有共享的 CMSDK UART。mps3/an536/cpu0目标使用LLPP UART0作为 Zephyr 控制台。从 boards/arm/mps3/mps3_an536_cpu0.dts 可以看到,uart0位于0xe7c00000,兼容arm,cmsdk-uart,中断挂在 GIC 上(GIC_PPI 2),波特率115200

编程与调试

MPS3 通过 USB 连接主机,暴露Mass Storage(大容量存储)CMSIS-DAP以及串口。

使用 AN547 构建应用

应用可以按常规方式构建。以hello_world示例 + AN547 为例:

west build -b mps3/corstone300/an547 samples/hello_world

打开串口终端(minicom、putty 等),使用以下设置:

  • 波特率(Speed):115200
  • 数据位(Data):8 bits
  • 校验(Parity):None
  • 停止位(Stop bits):1

复位板卡后,在对应串口上应看到如下输出:

Hello World! mps3

上传应用到 MPS3 AN547

应用固件可以是elf、hex 或 bin格式。二进制文件在板卡启动时,从板载 Micro SD 卡上的文件加载烧录。Motherboard Configuration Controller(MCC)负责加载 FPGA 镜像与二进制文件。

将 MPS3 通过 USB 连接到主机后,会出现一个大容量存储设备(默认设备名为V2M-MPS3)。更新固件共需3 步

  1. 将应用文件复制到<MPS3 device name>/SOFTWARE/目录;
  2. 打开<MPS3 device name>/MB/HBI0309C/AN547/images.txt
  3. 按下述内容更新images.txt
TITLE: Versatile Express Images Configuration File [IMAGES] TOTALIMAGES: 1 ;Number of Images (Max: 32) IMAGE0ADDRESS: 0x01000000 ;Please select the required executable program IMAGE0FILE: \SOFTWARE\zephyr.elf

复位板卡后,即可在对应串口看到Hello World! mps3输出。这里IMAGE0ADDRESS: 0x01000000对应设备树中 SRAM 的 Non-Secure 别名地址(0x11000000减去0x10000000),与 boards/arm/mps3/mps3_corstone300_an547.dts 的 SRAM 定义一致。

使用 AN536 构建并运行应用

同样以hello_world为例构建 AN536 固件:

west build -b mps3/an536/cpu0 samples/hello_world

使用 QEMU 运行:

west build -b mps3/an536/cpu0 samples/hello_world -t run

运行后应看到:

Hello World! mps3/an536/cpu0

源码级深入:仿真平台的选择机制

文档中提到的「AN547 默认 QEMU、FVP 变体默认 FVP」的机制,实现在 boards/arm/mps3/board.cmake 中:

  • mps3/an536/cpu0mps3/corstone300/an547SUPPORTED_EMU_PLATFORMSqemu,QEMU 分别使用-cpu cortex-r52 -machine mps3-an536-cpu cortex-m55 -machine mps3-an547
  • mps3/corstone300/fvp/_nsSUPPORTED_EMU_PLATFORMSarmfvp,根据是否启用 Ethos-U65 选择FVP_Corstone_SSE-300_Ethos-U55FVP_Corstone_SSE-300_Ethos-U65二进制;
  • mps3/corstone310/fvp/_ns:使用FVP_Corstone_SSE-310,并针对 Zephyr 的 MPU 测试需求设置-C cpu0.MPU_S=16等参数;启用 PAC/BTI 时追加-C cpu0.CFGPACBTI=1
  • 所有 FVP 运行均配置-C mps3_board.uart0.out_file=-等参数将 UART0~UART2 输出重定向到终端,并关闭可视化与 telnet;
  • 若以BUILD_WITH_TFM构建 Non-Secure 镜像,QEMU/FVP 会加载合并后的tfm_merged.hex(Secure TF-M + Non-Secure Zephyr)。

Secure / Non-Secure 构建的默认配置

从 boards/arm/mps3/Kconfig.defconfig 可以看出:

  • 当目标为 Non-Secure(TRUSTED_EXECUTION_NONSECURE)时,默认强制使用 TF-M 作为安全执行环境BUILD_WITH_TFM=y),并从设备树 flash 分区获取 NS 镜像配置(USE_DT_CODE_PARTITION=y);
  • 在 QEMU 目标下,MPU 的空指针解引用检测无法生效(0x0-0x400未映射但 QEMU 仍允许总线访问),因此默认关闭NULL_POINTER_EXCEPTION_DETECTION
  • 启用串口时默认开启UART_INTERRUPT_DRIVEN
  • 对 AN555/FVP 且启用 ROM 重定位时,ROMSTART 区域地址取自设备树itcm节点。

在 defconfig 层面,Secure 目标(如 boards/arm/mps3/mps3_corstone300_an547_defconfig)会显式设置CONFIG_ARM_TRUSTZONE_M=yCONFIG_ARM_MPU=yCONFIG_RUNTIME_NMI=y以及CONFIG_TRUSTED_EXECUTION_SECURE=y(配合QEMU_ICOUNT_SHIFT=7);Non-Secure 目标(如 boards/arm/mps3/mps3_corstone300_an547_ns_defconfig)则不再声明TRUSTED_EXECUTION_SECUREQEMU_ICOUNT_SHIFT=6),交由 TF-M 承担 Secure 侧职责。SOC 层级的选择逻辑(SOC_CORSTONE300/SOC_CORSTONE310/SOC_AN536_CPU0)位于 boards/arm/mps3/Kconfig.mps3。

延伸参考

如需更深入的信息,可查阅以下官方资料(均为 Arm 公开发布的文档,需自行从 Arm 官网获取):MPS3 AN536 Application Note、MPS3 AN547 / AN552 / AN555 Technical Reference Manual(TRM)、MPS3 FPGA Prototyping Board TRM、Cortex-R52 TRM、Cortex-M55 / Cortex-M85 Generic User Guide,以及 CoreLink SSE-300 / SSE-310 Example Subsystem 文档。这些资料对理解 FPGA 镜像的加载流程、内存映射与外设寄存器细节很有帮助。

小结

  • AN547 / AN552 / AN555 实体 FPGA 板上开发,使用mps3/corstone300/an547(或ns后缀变体)等目标,按「构建 → 拷贝到 Micro SD → 修改images.txt→ 复位」的流程烧录;
  • 需要Ethos-U55 NPU仿真时,使用mps3/corstone300/fvpmps3/corstone310/fvp目标并安装对应 FVP 模型(测试版本 11.24.13);
  • 快速无硬件验证时,mps3/corstone300/an547可直接用 QEMU 运行,mps3/an536/cpu0(Cortex-R52)则必须通过 QEMU 的mps3-an536机器;
  • 所有板级限定符必须写完整(如mps3/corstone300/an547),省略变体名会触发构建错误。

通过本文,你已经可以依据目标硬件形态(FPGA 板 / FVP / QEMU)和固件形态(Secure / Non-Secure)选择合适的 MPS3 板级目标,并完成从编译到部署、调试的完整闭环。

【免费下载链接】zephyrPrimary Git Repository for the Zephyr Project. Zephyr is a new generation, scalable, optimized, secure RTOS for multiple hardware architectures.项目地址: https://gitcode.com/GitHub_Trending/ze/zephyr

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/15 16:02:35

51单片机读取BMP280气压计:从I2C驱动到校准公式完整解析

简介&#xff1a;面向51单片机学习者和嵌入式开发者的BMP085/BMP280气压计读取工程资源&#xff0c;围绕I2C通信协议&#xff0c;完整实现传感器初始化、读取温度与气压原始数据、换算为实际物理量、结合标准大气模型估算海拔高度&#xff0c;并利用传感器内部温度测量进行补偿…

作者头像 李华
网站建设 2026/9/15 16:02:26

CHB-MIT脑电数据集详解:从数据读取到癫痫发作检测预处理

1. 为什么CHB-MIT至今仍是发作检测入门的首选数据集做脑电数据处理的人&#xff0c;绕不开CHB-MIT这个经典数据集。它由波士顿儿童医院发布&#xff0c;收录了多位癫痫患儿的头皮EEG记录。我们课题组刚开始接触癫痫自动检测时&#xff0c;翻遍公开数据&#xff0c;最后也是从CH…

作者头像 李华
网站建设 2026/9/15 16:02:17

ECharts模板实战:拆解option、地图与伪3D饼图,迁移Vue3

简介&#xff1a;39套超炫ECharts大数据可视化模板源码&#xff0c;定位为数据大屏与可视化项目设计参考。面向Web前端开发者、数据分析师&#xff0c;以及需要搭建运营监控、销售分析、地理分布等驾驶舱界面的工程师。整套源码包共含2000个文件&#xff0c;压缩包约248.5MB&am…

作者头像 李华
网站建设 2026/9/15 16:00:18

Flink CDC同步性能瓶颈:Sink并行度未生效的排查与调优

先说结论&#xff1a;这个坑我踩了整整一天&#xff0c;如果你也遇到FlinkCDC同步任务吞吐上不去、延迟持续增长、并行度怎么调都没用的情况&#xff0c;大概率和我遇到的是同一个原因——写入端的并行度并没有真正生效。先说下我当时的场景&#xff1a;源端是MySQL&#xff0c…

作者头像 李华
网站建设 2026/9/15 15:57:59

语音预处理关键:分帧加窗原理、参数与Python实战

语音处理里干了大半年&#xff0c;最容易被忽略、却又最影响后续效果的一步&#xff0c;就是分帧和加窗。很多初学者把网络上下好的音频直接丢给模型&#xff0c;出来的结果乱七八糟&#xff0c;回头怀疑是模型不行&#xff0c;实际上一大半问题出在预处理没做好。语音信号的分…

作者头像 李华