MCU多核异构通信原理

摘要:

本文结合瑞萨RZ/G2L 多核处理器,给大家讲述一下多核异构设计及通信的原理。

随着电子技术的不断发展,以及市场需求的日益增长,嵌入式系统不仅要求执行复杂的控制任务,还需要实时地采集和处理数据。

为了满足这些需求,多核异构处理器成为了一种流行的解决方案。这类处理器通常结合了ARM架构的A系列核心(用于处理高级计算任务)以及M系列或R系列核心(专注于实时操作)。

图片

在这种架构下,复杂的控制任务可以由搭载Linux的A核心处理,而实时数据的采集和处理则可以交由运行RTOS的M核或R核来完成。

本文结合瑞萨RZ/G2L 多核处理器,给大家讲述一下多核异构设计及通信的原理。

瑞萨多核处理器概述

在传统设计中,两颗芯片之间需要通过外部接口交换大量数据,这不仅占用了宝贵的引脚资源,而且数据传输效率低下。

相反,集成了A核和M核或R核的多核异构处理器利用内部总线结构实现了快速通信,并共享内部资源,从而避免了对外部引脚的占用。

这种多核异构的系统设计不仅降低了通信过程中的信息安全风险,还减少了芯片采购和管理成本,缩减了PCB板的成本和尺寸,并简化了开发流程。

瑞萨RZ/G2L处理器概述

配备双核Arm® Cortex®-A55 (1.2 GHz) CPU和单核Arm® Cortex®-M33 (200 MHz) CPU、3D图形加速引擎和视频编码解码引擎器的通用微处理器。

G2L框图

图片

异构通信机制

异构通信机制(OPENAMP Open Asymmetric Multi-Processing)的方案越来越成熟了。

在RZ/G2L系列的MPU中,我们可以看到多核异构架构的一个实际应用。这款MPU拥有一个大核Cortex-A55,频率高达1.2GHz,能够运行Linux操作系统,以及一个小核Cortex-M33,频率为200MHz,专门用于运行RTOS或裸机(bare-metal)程序。这两个核心之间的异构通信是通过OpenAMP软件框架实现的。

OpenAMP是一个轻量级的通信协议,它使得不同的处理器能够通过共享内存或消息传递机制来进行交流。在一个多核处理系统中,各个处理器可能会运行不同的软件模块,而OpenAMP框架则为这些模块之间的数据交换和协作提供了一种有效的手段。通过这种方式,OpenAMP不仅简化了多处理器间的通信,还增强了整个系统的协同效率和功能性。见图1。

图片

图1

Virtio 虚拟化模块


Virtio是一个共享内存管理的虚拟设备框架,Virtio中的vring是指向数据缓冲区指针的FIFO队列,有两个单向的vring,一个vring专用于发送到远程处理器的消息,另一个vring用于从远程处理器接收的消息, 数据就存放于共享的内存中,即Vring buffers, 一半用于发送,一半用于接收。
 

RPMsg远程处理器消息传递

RPMsg框架位于Virtio的上层,RPMsg(Remote Processor Messaging)框架是一种基于Virtio的消息总线。见图2。

图片

图2

Remoteproc

主处理器上的Linux操作系统可以对远程处理器及其相关软件环境进行生命周期管理,即启动或关闭远程处理器。见图3。

图片

图3

IPCC处理器间通信控制器

MHU(Message Handling Unit)是MPU芯片内的一个IP模块,担任IPCC角色,用于Cortex-A55(CA55)之间或与Cortex-M33(CM33)之间的消息通信。数据传输通过共享内存方式实现。

一个通道由一对数据传输处理寄存器和响应传输处理寄存器组成,共挂载12个通道(CA55 Core0/Core1 CM33,安全和非安全区域)。见图4。

图片

图4

以上介绍了RZ/G2L双核异构的通信方式,同时RZ/G2L产品也提供相应的软件支持。

Multi-os (CA55 Linux + CM33 RTOS)

客户可以使用灵活的软件包(FSP)快速开发应用程序,使用OpenAMP创建与Linux配合使用的应用程序。见图5。

图片

图5

Cortex-M33开发环境

图片

图6

相应硬件板及软件工具可以通过瑞萨官网获得。

JTAG在线调试

当连接JTAG时,必须如下设置DIP SW1。见图7。

图片

图7

CORTEX-M33启动方式

● CM33由CA55加载启动● 引导过程中有多个时间点可以执行此操作:

● Arm Trusted Firmware

 启动CM33的最快方法

 允许将代码加载到安全RAM中

● u-boot -> Multi OS SW package默认方式

 CM33 固件容易更新

 二进制文件存储在u-boot可以访问的文件系统中

● Linux (remoteproc)

 最方便维护,软件升级改动少

共享资源

资源共享时,请注意如下分配

1、引脚复用

2、内存分配

3、外设分配

### FreeRTOS 多核调度机制与实现 #### 中断处理和内核架构差异 所有运行 FreeRTOS 的 MCU 架构都能够处理中断,但与中断进入和中断优先级分配相关的细节因 MCU 的架构而异[^1]。这意味着不同类型的多核处理器可能具有不同的硬件特性来支持中断管理。 对于多核系统而言,FreeRTOS 支持两种主要模式下的操作: - **对称多处理(SMP)**:在这种配置下,多个相同的核心共享相同的内存空间并可以执行同一份操作系统实例的任务。然而,值得注意的是,标准版本的 FreeRTOS 并不直接提供完整的 SMP 调度器;而是通过第三方扩展或修改版才能获得这种功能。 - **不对称多处理(AMP)**:这里每个核心独立运作着自己的 RTOS 实例或是裸机程序,它们之间仅通过特定接口通信协作完成复杂应用需求。这种方式更贴近于实际产品开发中的常见做法,在某些情况下也更容易移植现有单片机项目到多核平台上去。 #### 异构多核的支持 考虑到现代 SoC 设计中经常采用大小核(Big.LITTLE)架构的情况——即在一个芯片上集成高性能的大核以及低功耗的小核组合工作以达到性能与能耗之间的平衡优化目的——Nvidia 曾经在其 Tegra 3 SoC 上实现了类似的低功率伴随核心方案[^2]。针对此类结构特点,开发者可以根据具体应用场景灵活调整任务分布策略,比如将实时性强、计算密集型的工作交给大核承担,而对于那些相对简单的后台维护类作业则安排给小核去负责。 为了适应上述各种情况,当在多核环境中部署 FreeRTOS 时,通常会采取如下措施之一来进行有效的跨核资源管理和负载均衡: - 使用消息队列或其他形式的消息传递机制让各个 CPU 核心间能够安全可靠地交换数据; - 借助事件标志组(Event Groups) 或者信号量(Semaphores),使得某个线程可以在一个核心上等待另一个核心产生的条件满足后再继续前进; - 利用软件定时器(Timers) 和回调函数(Callback Functions), 安排周期性的活动跨越不同CPU单元同步发生。 ```c // 创建用于两个核心间通讯的消息队列 QueueHandle_t xQueue = xQueueCreate(10, sizeof(uint8_t)); if (xQueue != NULL){ // 向队列发送消息 BaseType_t xStatus; uint8_t ucMessageToSend = 99; xStatus = xQueueSendToBack(xQueue, &ucMessageToSend, portMAX_DELAY); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yessunday

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

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

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

打赏作者

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

抵扣说明:

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

余额充值