STM32MP157 异核通信

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

驱动文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

worthsen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值