STM32H7双核:如何在CM4和CM7之间进行通信?

本常见问题解答是针对STM32H7、CM4和CM7双核通信的相关问题而提出的。
 

1.为什么要使用STM32H7双核设备?

STM32H745/755和STM32H747/757是双核产品,支持Arm Cortex-M7内核和Arm Cortex-M4内核。M7的工作频率高达480MHz,M4的工作频率则高达240MHz。
双核设备非常灵活,设计时具有显著的性能提升,因为双核处理器可以将两个核心合并后的信息划分为多个单元进行处理。
 

2.如何在两个核心之间进行通信?

为了确保两个核心之间的通信,STM32H7可以实现许多解决方案:
 
  • 使用设备硬件资源的通信/同步协议
信号量和中断允许与其他处理器同步。
以下路径下的多维数据集包中提供了一些示例:“\存储库\STM32Cube_FW_H7\Projects\STM32H745I-DISCO\Examples\HSEM(HSEM_ResourceSharing、HSEM_CoreSync、HSEM_Core Notification”。
 
  • FreeRTOS工控机模块。
处理器间通信(IPC)机制由不同的处理器用于通信或交换数据。
该机制允许通过发送和接收来自其他处理器的消息以及与其他处理器一起使用公共存储区域来传递消息。
FreeRTOS示例展示了如何使用嵌入式硬件信号量在两个内核之间发送通知。
多维数据集包示例也可以在本地路径下找到:“\存储库\ STM32Cube_FW_H7\Projects\STM32H2747I-EVAL\Applications”。
您可以参考AN5617的4.2节:“FreeRTOS消息缓冲区”。
 
  • OpenAMP(开放式非对称多处理)框架。
OpenAMP是一个提供所需软件组件的框架,用于开发非对称多处理(AMP)系统的应用程序。
它提供了生命周期管理和处理器间通信功能,用于管理远程计算资源及其相关软件上下文。此外,它还通过RemoteProc和RPMsg等开源组件标准化了异构嵌入式系统中操作环境之间的交互。
通过OpenAMP从CPU1向CPU2发送消息主要有两个步骤:
-CPU1表示发送数据的主核心,从用于传输的共享存储器中分配缓冲区,向其写入RPMsg报头和数据有效载荷。
-然后,它将缓冲区排入环形缓冲区,以使其可用于CPU2。
RPMsg(远程处理器消息传递)是一种协议,作为OpenAMP框架的组成部分,提供核心之间的消息传递基础设施。它允许在不同CPU上运行的应用程序之间进行处理器间通信。
GitHub STMicroelectronics STM32CubeH7库中提供了几个通信示例。
-在GitHub路径下提供了OpenAMP框架的两个示例,展示了如何使用它在核心之间创建通信通道并在两个方向上发送相互消息。
-多维数据集包示例也可以在本地路径下找到:“\Repository\STM32Cube_FW_H7_V1.9.0\Projects\STM32H747I-EVAL\Applications”。
您可以参考AN5617的4.1部分:“打开AMP”。
 

3.参考文献:

  • AN5557应用说明:STM32H745/755和STM32H747/757线路双核架构。
  • AN5617应用说明:STM32H745/755和STM32H747/757线路处理器间通信
  • AN5361开始在STM32CubeIDE中使用基于双核STM32H7微控制器的项目。