随着市场对嵌入式设备功能需求的提高,市面上出现了集成嵌入式处理器和单片机的主控方案,以兼顾性能和效率。

在实际应用中,嵌入式处理器和单片机之间需要进行大量且频繁的数据交换,如果采用低速串行接口,则数据传输效率低,这将严重影响产品的性能;而如果采用高速并口,则占用管脚多,硬件成本将会增加。

为解决这一痛点,各大芯片公司陆续推出了兼具A核和M核的多核异构处理器,如NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等。虽然这些处理器的品牌及性能有所不同,但多核通信原理基本一致,都是基于寄存器和中断传递消息,基于共享内存传输数据。

以配电终端产品为例,A核负责通讯和显示等人机交互任务,M核负责采样和保护等对实时性要求较高的任务,双核间交互模拟量、开关量和录波文件等多种信息,A核+M核的方案既满足了传统采样保护功能,又支持多种接口通信及新增容器等功能,符合国家电网现行配电标准。

通信过程整体架构说明

一、 硬件层通信实现机制

通过物理内存DDR分配,将硬件层分为了两部分:TXVring Buffer(发送虚拟环状缓冲区)和RXVring Buffer(接收虚拟环状缓冲区);其中M核从TXVring区发送数据,从RXVring区读取接收数据,A核反之。

处理器支持消息传递单元(MessagingUnit,简称MU)功能模块,通过MU传递消息进行通信和协调,芯片内的M7控制核和A53处理核通过通过寄存器中断的方式传递命令,最多支持4组MU双向传递消息,既可通过中断告知对方数据传递的状态,也可发送最多4字节数据,还可在低功耗模式下唤醒对方,是保证双核通信实时性的重要手段。

寄存器输入输出通信模型

(1)CoreA写入数据;
(2)MU将Tx 空位清0,Rx满位置1;
(3)产生接收中断请求,通知CoreB接收状态寄存器中的接收器满,可以读取数据;
(4)CoreB响应中断,读取数据;
(5)CoreB读完数据后,MU将Rx满位清0,Tx空位置1;
(6)状态寄存器向CoreA生成发送中断请求,告知CoreB读完数据,发送寄存器空。

通过以上步骤,就完成了1次从CoreA向CoreB 传递消息的过程,反之亦然。

二、驱动层Virtio下RPMsg通信实现

Virtio是通用的IO虚拟化模型,位于设备之上的抽象层,负责前后端之间的通知机制和控制流程,为异构多核间数据通信提供了层的实现。

RPMsg消息框架是Linux系统基于Virtio缓存队列实现的主处理核和协处理核间进行消息通信的框架,当客户端驱动需要发送消息时,RPMsg会把消息封装成Virtio缓存并添加到缓存队列中以完成消息的发送,当消息总线接收到协处理器送到的消息时也会合理地派送给客户驱动程序进行处理。

在驱动层,对A核,Linux采用RPMsg框架+Virtio驱动模型,将RPMsg封装为了tty文件供应用层调用;在M核,将Virtio移植,并使用简化版的RPMsg,因为涉及到互斥锁和信号量,最终使用FreeRTOS完成过程的封装,流程框图如下方所示。

主处理核与协处理核数据传递流程图

(1)Core0向Core1发送数据,通过rpmsg_send函数将数据打包至Virtioavail链表区;
(2)在avail链表寻找共享内存中空闲缓存,将数据置于共享内存中;
(3)通过中断通知Core1数据到来,共享内存由avail链表区变至used区;
(4)Core1收到中断,触发rpmsg的接收回调函数,从used区获取数据所在的共享内存的物理地址,完成数据接收;
(5)通过中断通知Core0数据接收完成,共享内存缓存由used区变为avail区,供下次传输使用。

三、应用层双核通信实现方式

在应用层,对A核可使用open、write和read函数对 /dev下设备文件进行调用;对M核,可使用rpmsg_lite_remote_init、rpmsg_lite_send和rpmsg_queue_recv函数进行调用,不做重点阐述。

四、实际使用效果

通过程序实测,M核和A核可以批量传输大数据。同样以配电产品为例——128点采样的录波文件大约为43K,若通过传统的串行总线传输方式,需要数秒才可完成传输。

而使用i.MX8MP的双核异构通信方案,只需要不到0.5秒即可传输完成,数据传输效率提升数十倍!同时还避免了串行总线易受EMC干扰的问题,提高了数据传输稳定性,简化了应用编程,可满足用户快速开发的需求。

以上就是关于多核异构处理器中A核与M核通信过程的解析,飞凌多核异构平台有NXP的i.MX8系列、瑞萨的RZ/G2L系列以及TI的AM62x系列等等,您可关注了解。

本篇文章我们一起了解了多核异构处理器中A核与M核的通信原理及过程,在另一篇《基于RPMsg的i.MX8MP双核通信实现程序解析》中小编将为大家详细讲解基于飞凌嵌入式iMX8MP开发板的双核通信程序实例

兼具A核和M核的多核异构处理器,A核与M核如何通讯?相关推荐

  1. MPU进化,多核异构处理器有多强?A核与M核通信过程解析

    内容来源:www.forlinx.com 随着市场对嵌入式设备功能需求的提高,市面上出现了集成嵌入式处理器和单片机的主控方案,以兼顾性能和效率. 在实际应用中,嵌入式处理器和单片机之间需要进行大量且频 ...

  2. 多核异构处理器对共享外设和资源的调配方法-飞凌嵌入式

    来源:飞凌嵌入式官网 www.forlinx.com 在多核异构CPU中,多个内核就如同多个大脑,而外设和内存等资源就如同手足,那么多个大脑该如何控制手足才能保证它们正常有序地运行呢? 以NXP i. ...

  3. am5718_TI Cortex-A15 AM5718 AM57x 多核异构开发板免费试用

    原标题:TI Cortex-A15 AM5718 AM57x 多核异构开发板免费试用 活动介绍 在当前工业4.0趋势下,中国制造业正在加快转型升级,机器人.工业互联.大数据成为了工业界最热门的方向.& ...

  4. am5718_Cortex-A15 AM57x系列 ARM+DSP 多核异构 OK5718-C开发板

    本帖最后由 飞凌-marketing 于 2018-5-11 18:10 编辑 ( X& A. G' m; W * E2 E' F) B1 J3 _& Z" w' E OK5 ...

  5. 局域网SDN技术硬核内幕 - 前传 突破多核的瓶颈——虚拟化

    局域网SDN技术硬核内幕 - 前传 突破多核的瓶颈--虚拟化 在前一篇<局域网SDN技术硬核内幕 - 前传 多核技术为摩尔定律延寿>中提到了,通过多核可以突破主频物理限制的瓶颈,提升单台计 ...

  6. 多核异构核间通信-mailbox/RPMsg 介绍及实验

    1. 多核异构核间通信 由于MP157是一款多核异构的芯片,其中既包含的高性能的A7核及实时性强的M4内核,那么这两种处理器在工作时,怎么互相协调配合呢? 这就涉及到了核间通信的概念了. IPCC ( ...

  7. 创龙带您解密TI、Xilinx异构多核SoC处理器核间通讯

    1.什么是异构多核SoC处理器 顾名思义,单颗芯片内集成多个不同架构处理单元核心的SoC处理器,我们称之为异构多核SoC处理器,比如: TI的OMAP-L138(DSP C674x + ARM9).A ...

  8. 第十八节 多核异构核间通信–ipcc

    由于MP157 是一款多核异构的芯片,其中既包含的高性能的A7 核及实时性强的M4 内核,那么这两种处理器在工作时,怎么互相协调配合呢?这就涉及到了核间通信的概念了. IPCC (inter-proc ...

  9. 华为自研凌霄四核内芯+四信号放大器:249元华为路由WS5200四核版正式开售

    [TechWeb]作为一年365天,24小时不断输出Wi-Fi信号的路由器,在现代家庭生活中担任着越来越重要的角色.随着老百姓家中智能设备数量成倍增加,它们可以是大到电视,也可以是小到灯泡;这些设备都 ...

最新文章

  1. Android编译系统分析四:实战-新增一个产品
  2. mysql 的 sql 执行计划详解
  3. 腾讯视频怎么删除收藏的内容
  4. ASP.NET弹出对话框并跳转页面
  5. 使用XStream对Java对象进行序列化和反序列化
  6. 元年·潮湃 首届搜狐5G峰会倒计时 参会大咖揭晓
  7. Android 怎么退出整个应用程序?[转]
  8. Go语言爱好者周刊:第 131 期 — 这道题你做对了吗?
  9. 红外图像特点及识别方法
  10. 利用Pano2VR在全景图中添加视频,音频,图片
  11. scratch win10 环境搭建
  12. MATLAB图片处理(上)
  13. oracle pq distribute,详解Oracle hints PQ_DISTRIBUTE
  14. 电脑如何防蹭网?使用防蹭网功能杜绝未知设备连接WiFi
  15. html设置可编辑状态,HTML5 - 使某个页面元素或整个页面可编辑
  16. 科目三考试挂掉原因分析
  17. 财务管理专业计算机要学什么,我是学财务管理专业的,我想考计算机二级,请问考哪个比较好...
  18. 2.4G与5GWiFi频段的区别
  19. 研一(研究生)看论文文献必须要知道的几个网站
  20. 好用计算机,六款让你电脑更好用的软件

热门文章

  1. C#,格式化json数据的源代码
  2. 冒泡排序C语言实现 - 源码详解
  3. 嵌入式工程师16个问题
  4. Funcode海底世界c++(vc6)
  5. FORTRAN动态链接库DLL from《FORTRAN95 程序设计》
  6. Window环境下卸载Python3.6
  7. Java、JSP美食网站的设计与实现
  8. windows10系统显示浏览器未连接到互联网?手把手教你如何解决
  9. Android/Linux 全志平台摄像头sensor调试记录(一)
  10. android打电话 接电话 挂电话流程分析