STM32MP157 异核通信
1 介绍
STM32MP157 通过 共享内存方式实现异核通信。
2 构建工程
参考文档
《【正点原子】STM32MP1 M4裸机HAL库开发指南》
《【正点原子】STM32MP1 M4裸机CubeIDE开发指南》
软件环境
-
STM32CubeIDE 1.4.0:
这是一个集成开发环境,用于STM32微控制器的开发。包含 STM32CubeMX。 -
STM32CubeMX 6.0.0:
这是一个图形化配置工具,用于配置STM32微控制器的外设和中间件。 -
MDK5.31:这是一个用于嵌入式开发的集成开发环境,通常用于ARM微控制器。
配置资源
- LED1 (DS1–PF3):配置LED1,连接到PF3引脚。
- USART3 (PD8, PD9):配置USART3,用于串行通信,连接到PD8和PD9引脚。
- IPCC:配置进程间通信(Inter-Processor Communication)。
- HSEM:配置硬件信号量(Hardware Semaphore)。
- OpenAMP:配置开放AMP(Open Asymmetric Multi-Processing),用于多核处理器的通信。
操作步骤
1 新建CubeIDE工程:
- 打开STM32CubeIDE。
- 选择“File” > “New” > “STM32 Project”。
- 选择您的STM32微控制器型号。
- 点击“Next”。
2 配置工程:
使用STM32CubeMX配置您的项目。
在CubeMX中,选择并配置所需的外设和中间件。
保存配置。
3 保存配置:
在CubeMX中,点击“Project” > “Generate Code”。
选择STM32CubeIDE作为IDE。
点击“Generate Code”。
4 生成工程代码:
CubeMX将生成代码并自动在STM32CubeIDE中打开项目。
5 导出MDK工程(如有需要):
在STM32CubeIDE中,选择“File” > “Export”。
选择“MDK-ARM”。
配置导出选项并点击“Finish”。
3 STM32MP157 资源分配
整体资源
外设分配
- 红色:安全 A7 内核
- 黑色:非安全 A7 内核
- 蓝色:M4 内核
资源有哪些颜色,代表能被哪些对应的内核访问;
斜线划分意味着多核能同时访问,垂直划分意味着资源在同一时间段只能被一种内核访问。
存储分配
4 异核通信框架
核心问题【生命周期管理、核间通信】
生命周期管理也就是内核启动顺序的问题;
核间通信。
同构和异构
SMP 和 AMP
从软件的角度来分,多核处理器平台的操作系统体系有:SMP(Symmetric multiprocessing,对称多处理)结构、AMP(Asymmetric Multi-Processing,非对称多处理)结构和BMP(bound multi-processing,边界多处理)结构。
多SOC和多核SOC
IPCC
介绍
IPC(Inter-Process Communication,进程间通信)是指两个进程的数据之间发生交互,它是通过处理器间通信控制器IPCC(Inter-Process Communication controller,IPC控制器)来实现的,IPCC属于硬件部分,用于在两个CPU之间进行信号交换。这6个双向通道有中断信令机制,允许处理器以非阻塞的方式交换信息。
IPCC通道
IPCC 单工发送模式
IPCC 单工接收模式
IPCC 半双工发送模式
IPCC 半双工接收模式
共享内存和核间中断
Mailbox 框架
OpenAMP 框架
概述
1、OpenAMP(开放非对称多处理)最初是由Mentor Graphics与Xilinx公司为解决AMP系统中的RTOS或者裸机程序与Linux接口能进行通信而开发的一个软件框架。
2、目前OpenAMP可用在ST、NXP、TI和Xilinx等平台上,这些厂商已经提供了移植好的OpenAMP的开发实例,用户可参考实例来进行开发。
3、OpenAMP为AMP系统开发应用程序提供了三个重要组件:Virtio、RPMsg和Remoteproc。
Virtio 虚拟化模块
RPMsg 远程处理器消息传递
RemoteProc(远程处理)
Remoteproc框架的作用:
1、A7将M4的固件加载到M4的内存中去执行;
2、解析M4的固件资源表以设置关联的资源;
3、控制M4内核的启动和关闭;
4、为A7和M4的核间通信建立一个RPMsg通道;
5、提供监视和调试服务,在Linux下有sysfs和debugfs这两个文件系统,这两个文件系统提供了监视和调试功能。
stm32_rproc是M4的驱动程序,其作用:
1、向Remoteproc框架注册特定的功能(如回调函数部分);
2、处理和M4关联的平台资源(例如寄存器,看门狗,复位,时钟和存储器);
3、通过邮箱框架(Mailbox)将通知转发到M4。
M4固件:
MDK下编译出来的.axf文件
STM32CubeIDE下编译出来的.elf文件
基于RemoteProc和RPMsg的大概通信过程:
1、A7先启动;
2、A7通过Remoteproc加载M4的固件;
3、A7解析M4固件资源表,并创建Virtio;
4、A7启动协处理器。
5、A7和M4之间创建RPMsg驱动;
6、A7给M4发送第一条消息(数据),相当于激活RPMsg通道,接下来A7和M4可以互发数据。
异核信息
root@ATK-MP157:~# cat /proc/cpuinfo
processor : 0
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 48.00
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
processor : 1
model name : ARMv7 Processor rev 5 (v7l)
BogoMIPS : 48.00
Features : half thumb fastmult vfp edsp thumbee neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm
CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc07
CPU revision : 5
Hardware : STM32 (Device Tree Support)
Revision : 0000
Serial : 002D001B3132510C35383834