前言:本文主要演示i.MX 8M Mini基于OpenAMP的Cortex-A53和Cortex-M4核心的核间通信,其中Cortex-A53运行Linux系统,Cortex-M4运行FreeRTOS系统。

图 1
案例测试硬件平台:TLIMX8-EVM评估板(NXP i.MX 8M Mini)

图 2 TLIMX8-EVM评估板
案例详细说明、源码请扫描下方二维码或点击下载链接:
http://site.tronlong.com/pfdownload
1.1 案例功能
(1) Cortex-A53释放Cortex-M4,然后初始化RPMsg,并创建端点。
(2) Cortex-A53启动Linux系统,执行握手服务,创建通信信道,并发送一条信息至Cortex-M4。
(3) Cortex-M4接收到第一条信息时,计数器自加1,然后回发计数器值至Cortex-A53。
(4) Cortex-A53接收Cortex-M4发送的计数器数值,计数器自加1,然后回发计数器数值至Cortex-M4。
(5) 当计数器数值大于100时,通信结束。
1.2 案例测试
案例bin目录下分别提供了TCM版本程序镜像文件rpmsg_lite_pingpong_rtos_linux_remote.bin和DDR版本程序镜像文件rpmsg_lite_pingpong_rtos_linux_remote_ddr.bin。
在U-Boot命令行加载运行Cortex-M4程序镜像文件后,RS232 UART4调试串口打印如下信息。

图 3
运行boot命令,在Cortex-A53启动运行Linux系统。
U-Boot=> boot

图 4
进入评估板文件系统后,执行如下命令加载imx_rpmsg_pingpong模块,启动核间通信。
Target# modprobe imx_rpmsg_pingpong

图 5
加载模块后,Cortex-M4将接收Cortex-A53发送的数据,并将其转发回Cortex-A53,循环50次后结束。RS232 UART4调试串口打印信息如下。

图 6

图 7
1.3 关键代码
Linux驱动程序
驱动的实现在imx_rpmsg_pingpong.c中完成,此文件位于内核"drivers/rpmsg/"路径下。
(1) Linux系统加载驱动后,先发送一条helloMsg,然后发送第一条乒乓信息。

图 8
(2) 在回调函数中,每次接收到Cortex-M4的计数器数据后自加1,并回发至Cortex-M4,直到计数器数值大于100。

图 9
FreeRTOS程序
程序主体位于main函数中,定义位于main_remote.c中。
(1) 在main函数中首先初始化引脚等相关资源,然后创建app_task任务,并启动任务列表。

图 10
(2) 在app_task任务中定义共享内存基地址,需和设备树中指定地址一致,再初始化RPMsg资源,并等待连接上远程终端。

图 11
(3) 接收helloMsg,并循环收发乒乓信息。

图 12
(4) 信息以乒乓形式结束后注销RPMsg相关资源,并进入死循环。

图 13
2 rpmsg_lite_str_echo_rtos案例
2.1 案例功能
(1) Cortex-A53释放Cortex-M4,然后初始化RPMsg,并创建端点。
(2) Cortex-A53启动Linux,执行握手服务,并创建通信信道。
(3) Linux驱动生成"/dev/ttyRPMSG30"节点,将用户输入至该节点的数据发送至Cortex-M4。
(4) Cortex-M4接收数据并进行打印,再将数据回发至Cortex-A53。
(5) Cortex-A53(Linux驱动)接收数据并进行打印。
2.2 案例测试
案例bin目录下分别提供了TCM版本程序镜像文件rpmsg_lite_str_echo_rtos.bin和DDR版本程序镜像文件rpmsg_lite_str_echo_rtos_ddr.bin。
在U-Boot命令行加载运行Cortex-M4程序镜像文件后,RS232 UART4调试串口打印如下信息。

图 14
运行boot命令,在Cortex-A53启动运行Linux系统。
U-Boot=> boot

图 15
进入评估板文件系统后,执行如下命令加载imx_rpmsg_tty模块,启动核间通信。
Target# modprobe imx_rpmsg_tty

图 16
Linux系统加载模块后,会发送数据"hello world"至Cortex-M4。Cortex-M4接收到数据后,在RS232 UART4调试串口将数据进行打印。

图 17
在USB TO UART2调试串口执行如下命令,将接收到的数据发送至Cortex-M4。
Target# echo tronlong > /dev/ttyRPMSG30

图 18
Cortex-M4接收到数据后,在RS232 UART4调试串口将数据进行打印,同时将数据回发至Cortex-A53。

图 19
在USB TO UART调试串口执行如下命令,可查看Cortex-M4回发的数据。
Target# dmesg | grep rpmsg_tty

图 20
2.3 关键代码
Linux驱动程序
驱动的实现在imx_rpmsg_tty.c中完成,此文件位于内核"drivers/rpmsg/"路径下。
(1) imx_rpmsg_tty.c的写函数实现数据的发送,发送缓存最大设置为256Byte。

图 21
(2) 在回调函数中,每次接收到Cortex-M4的数据后,都以16进制的方式进行打印,打印等级为KERM_DEBUG。

图 22
FreeRTOS程序
程序主体位于main函数中,定义位于main_remote.c中。
(1) 在main函数中初始化引脚等相关资源,然后创建app_task任务,并启动任务列表。

图 23
(2) 在app_task任务中定义共享内存基地址,需和设备树中指定地址一致,再初始化RPMsg资源,并创建通信终端。

图 24
(3) 在for循环中实现数据收发。

图 25
-
ARM处理器
+关注
关注
6文章
361浏览量
43421 -
嵌入式主板
+关注
关注
7文章
6107浏览量
37206 -
Cortex-M4
+关注
关注
6文章
100浏览量
48728 -
Cortex-A53
+关注
关注
0文章
34浏览量
22270 -
imx8
+关注
关注
3文章
42浏览量
50955
发布评论请先 登录
在 i.MX8M Plus EVK 上刷新和调试 Cortex-M7 固件详细流程是什么?
如何在 Linux 中使用 imx8mm
如何下载 i.MX 8M Plus SDK?
是否可以将 UART4 与 Linux tty 设备绑定,并将其用于 EVK 板与主机 PC 以及 UART2 之间的通信?
深度解析LPC43S50/S30/S20:32位ARM Cortex-M4/M0微控制器的卓越性能与应用潜力
探秘NXP LPC435x/3x/2x/1x:32位ARM Cortex-M4/M0微控制器的卓越性能与应用潜力
最小化ARM Cortex-M CPU功耗的方法与技巧分享
Cortex-M产品的特色
Microchip SAM4C32 双核 Cortex-M4 微控制器:为智能电表与工业控制打造的高性能安全平台
恩智浦FRDM i.MX 8M Plus开发板上架
全国产!瑞芯微 RK3576 ARM 八核 2.2GHz 工业开发板—Linux应用开发手册
全国产!瑞芯微 RK3576 ARM 八核 2.2GHz 工业开发板—Linux开发环境搭建
全国产!瑞芯微 RK3576 ARM 八核 2.2GHz 工业开发板—Linux系统使用手册
全国产!瑞芯微 RK3576 ARM 八核 2.2GHz 工业开发板—LVGL应用开发案例
案例分享!IMX8 Cortex-A53与Cortex-M4多核通信开发详解
评论