在嵌入式系统设计中,如何平衡高性能计算与实时控制一直是工程师面临的挑战。STM32MP257的异构架构为这一难题提供了优雅的解决方案,而其中的Cortex-M33实时核更是实现硬实时性能的关键所在。
一、异构架构:分工明确,效能卓越
STM32MP257采用创新的双核子系统设计:
Cortex-A35应用核(双核1.5GHz):运行Linux系统,负责复杂UI、网络通信、文件管理等非实时任务。
Cortex-M33实时核(400MHz):专攻实时控制,具备纳秒级中断响应,集成FPU和DSP指令集。
二、架构优势凸显:
硬件级资源隔离:通过RIF单元确保M33核独占关键外设,避免核间冲突
能效精细控制:支持独立电源域,M33可在A核休眠时单独运行
安全可靠:TrustZone技术,为关键代码提供硬件级保护
三、OpenAMP:异构通信的桥梁
OpenAMP是异构系统中核心间消息通信的开源框架,基于RPMsg+共享内存+中断,让Linux核和Cortex-M核可以可靠地传递消息和数据,高效地共享数据或协调任务的机制,简化异构多核开发。
在STM32MP257中,典型实现方式包括remoteproc+virtio+RPMsg等。它的核心目标是让Cortex-A核和Cortex-M核协同工作,同时保持资源隔离和实时性能。
Remoteproc框架
STM32MP257使用了RemoteProc框架让A核运行的Linux系统可以更加轻松的和M核进行通信控制,RemoteProc主要作用就是对远程处理器的生命周期进行管理,即启动、停止远程处理器。该框架还会创建 RPMsg Virtio 设备。以下是RemoteProc的逻辑框图:

图1 RemoteProc运行逻辑
在RemoteProc框架中,需要在Linux系统中将M核的固件通过命令加载到M核的内存中。
RPMsg框架
RPMsg框架( Remote Processor Messaging Framework )则是实现对远程处理器信息传递。RPMsg是基于VirtIO的消息总线,它允许内核驱动程序与系统上可用的远程处理器进行通信。通讯框架入下图:

图2 RPMSG框架
消息服务基于共享内存,使用 RPMsg 和 Virtio 框架,RemoteProc框架则控制远程处理器生命周期。信号通知( Mailbox )服务则基于内部IPCC( Inter-Processor communication controller ),ST提供 OpenAMP相关库。
Virtio(虚拟化模块)
Virtio 是一个支持虚拟化的 I/O 框架,通过共享环形缓冲区(vring)提供高效的消息传输层。Virtio中有两个单向的vring,分别用于处理器之间的消息传递,RX VRING 用于接收来自远程处理器的消息,TX VRING专用于将消息发送到远程处理器。
四、实战演练:异核控制LED
基于异构通讯框架,A核通过发送LED控制命令,驱动M33核响应并实现LDE灯的开关操作。
在构建前需要将开发板设备树中的gpio_led的蓝灯关闭,关闭A核占用,设备树中修改位置具体如下:

图3 设备树屏蔽蓝灯
关闭后将设备树单独构建并更新到开发板中,具体方式请查阅《MYD-LD25X Linux 软件开发指南》中4.3章节。
在IDE中导入OpenAMP_TTY_echo_Led例程,导入完成后如下所示:

图4 例程导入
该例程由官方例程OpenAMP_TTY_echo修改,主要修改即为下图中虚拟串口回调函数的框选部分:

图5 回调函数修改
实现过程比较简单,基本是对A核的消息进行了判断处理,针对GPIO的主要控制使用了HAL_GPIO_WritePin函数,该函数位于Drivers/BSP/stm32mp2xx_hal_gpio.c:

图6 函数实现
程序运行流程图:

图7 OpenAMP_TTY_echo_Led流程图
然后继续构建,点击上图4中的OpenAMP_TTY_echo_Led_CM33_NonSecure,然后点击上方锤子右边箭头并选择CA35TDCID_m33_ns_sign:

图8 编译选择
选择后会立即构建编译,完成后在CA35TDCID_m33_ns_sign目录中拷贝elf文件到开发板中:

图9 拷贝文件
确保在开发板中目录结构如下:

图10 目录结构
输入以下内容执行脚本,运行后如图所示:
root@myd-ld25x:~/OpenAMP_TTY_echo_Led# ./fw_cortex_m33.sh start

图11 运行程序
在A核输入以下命令后台监控M核虚拟串口反馈:
root@myd-ld25x:~/OpenAMP_TTY_echo_Led# cat /dev/ttyRPMSG0 &
root@myd-ld25x:~/OpenAMP_TTY_echo_Led#
输入以下命令控制Led蓝灯亮灭:
root@myd-ld25x:~/OpenAMP_TTY_echo_Led# echo on > /dev/ttyRPMSG0
root@myd-ld25x:~/OpenAMP_TTY_echo_Led# echo off > /dev/ttyRPMSG0
结果如下:

图12 运行结果
图13 米尔基于STM32MP257核心板及开发板
上一篇:复杂系统需求下,机电设计需要协同
下一篇:迎接物理AI时刻,ADI推出CodeFusion Studio 2.0加速嵌入式AI开发
- 热门资源推荐
- 热门放大器推荐
- 边缘计算主机盒选购指南:五大核心指标解析
- Arm AGI CPU 更多细节:台积电 3nm 制程、Neoverse V3 微架构
- Arm AGI CPU 重磅发布:构筑代理式 AI 云时代的芯片基石
- Arm 拓展其计算平台矩阵,首次跨足芯片产品
- 阿里达摩院发布RISC-V CPU玄铁C950,首次原生支持千亿参数大模型
- 边缘 AI 加速的 Arm® Cortex® ‑M0+ MCU 如何为电子产品注入更强智能
- 阿里达摩院发布玄铁C950,打破全球RISC-V CPU性能纪录
- VPU中的“六边形战士”:安谋科技Arm China发布“玲珑”V560/V760 VPU IP
- 利用锚定可信平台模块(TPM)的FPGA构建人形机器人安全
- LDK120M12R 1.2V低压降稳压器典型应用(可调版)电路
- EVB-UTC2000-DFP、EVK-UTC2000 评估套件基于 UTC2000 USB 3.0/2.0 Type-A,即插即用 Type-C DFP
- LTC3219 演示板、250mA 通用九通道 LED 驱动器
- DC919A-D,LTC2204 CMOS 输出演示板,直流输入,40Msps 16 位 ADC,DC
- AD8618ARZ-REEL 二阶低通滤波器运算放大器的典型应用电路
- 使用 NXP Semiconductors 的 PCA9511A 的参考设计
- LT3091MPDE 恒流恒压实验室电源的典型应用
- ADR392B 4.096 Vout 微功率、低噪声精密电压基准的典型应用
- LT3470HDDB 5V 降压转换器的典型应用电路
- 使用 Diodes Incorporated 的 AZ7042ZTR-E1 的参考设计

非常经典的关于LLC的杨波博士论文
MB47082PS

ASM10DTBD-S664






京公网安备 11010802033920号