ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

七步实现STM32MP157多核协同工作(Cortex-A7与Cortex-M4通信)

2021-06-14 16:01:39  阅读:326  来源: 互联网

标签:echo STM32MP157 七步 开发板 M4 Cortex ttyRPMSG0 CM4 OpenAMP


 

华清远见IT开放实验室 2020-11-12 17:40:46 1211 收藏 9
分类专栏: stm32mp157 linux stm32mp157 cortex m4 文章标签: 嵌入式 linux stm32 单片机 arm
版权
写在前面:
STM32MP157是ST进军Linux的首款微处理器,采用MCU+MPU的组合,集成两颗主频微800MHz的Cortex-A7应用处理器内核(支持开源linux操作系统),和一颗主频微209M的Cortex-M4微控制器内核(完美沿用现有的STM32 MCU生态系统),既充分满足多种应用的灵活性需求,又实现了最佳性能和低功耗特性,还支持3D图形处理单元(3D GPU)。

那STM32MP1系列,A7和M4是如何进行通信的呢?

简单的说,A7和M4两个核心的通信,是通过底层的IPCC控制器(Inter-Processor communication controller)去通信的,linux中使用RPMsg框架与用户进行交互。

RPMsg框架(Remote Processor Messaging Framework)是实现对远程处理器信息传递。它是基于VirtIO的消息总线,允许内核驱动程序与系统上可用的远程处理器进行通信。

STM32MP1多核通信框架如下图。

 

A7在RPMsg和Virtio框架创建一个面向用户态的/dev/ttyRPMSG接口,ST提供OpenAMP相关库,M4在OpenAMP上创建虚拟串口,两个内核之间通过串口通信模式,速度非常快。

Linux系统都封装好了,ST官方提供的内核已经默认配置了RPMSG_TTY驱动,这个环节我们就不需要做什么了。

下面我们就通过七个步骤来实现A7和M4之间的通信。

1. 启动STM32CubeIDE


2. 导入已有工程
点击File->Import…,选择Existing Projects into Workspace,点击NEXT。

 

浏览目录选择工程OpenAMP_ TTY _echo,光盘路径为:

【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-FSMP1\Applications\OpenAMP\OpenAMP_TTY_echo\STM32CubeIDE】

 

3. 编译工程
选择项目OpenAMP_ TTY _echo_CM4并单击Build按钮

 

 

4. 开发板连接
这里使用的是华清远见FS-MP1A开发板。

确认开发板已烧写系统,可运行linux,启动拨码拨至010。

开发板上电,并如下图连接开发板USB和ST-Link至PC。

 

可通过点击STM32 butterfly按钮来打开串口控制台

 

如果控制台窗口显示linux日志或提示信息,则连接成功

 

5. USB虚拟网线网络配置
打开控制面板的网络连接界面,在使用USBmini线连接开发板和PC后可以在网络连接界面可看到多了一个Remote NDIS网卡,如下图。

 

选中Remot NDIS网卡,右键选择属性,配置IPv4,选中后点击属性,配置IP地址为192.168.7.100,如下图。

 

6. 下载固件
选择项目OpenAMP_ TTY _echo_CM4

选择Debug按键

 

选择STM32 Cortex-M C/C++ Application

调试器 下选择thru Linux core(Production mode)

选择Serial Port,可打开设备管理器查看

检查IP地址,可通过串口控制台输入ifconfig指令查看usb0网卡IP地址

 

如下图,配置完成后点击Debug

 

提示关闭控制台,点击Yes

 

弹出如下窗口,默认无密码,直接点击OK

点击Switch

 

7. 测试固件
OpenAMP_ TTY _echo_CM4固件主要功能:
CPU2(CM4)初始化OpenAMP MW,后者通过HAL初始化/配置IPCC外设并设置openamp-rpmsg框架基础结构
CPU2(CM4)为2个虚拟UART实例(UART0和UART1)创建2个 rpmsg通道
CPU2(CM4)在这两个通道上等待来自CPU1(CA7)的消息
当CPU2(CM4)在1个虚拟UART实例/ rpmsg通道上收到消息时,它将消息发送回同一虚拟UART实例上的CPU1(CA7)
加载完固件后,重新打开STM32CubeIDE的串行控制台。

 

输入以下命令

初始化ttyRPMSG0配置

stty -onlcr -echo -F /dev/ttyRPMSG0
不断读取ttyRPMSG0通道

cat /dev/ttyRPMSG0 &
在一个ttyRPMSG0通道上发送消息”LED ON”或”LED OFF”可控制开发板上LED灯点灭状态,并在同一ttyRPMSG0通道上同时接收回显

echo "LED ON" > /dev/ttyRPMSG0


本文摘自《华清远见FS-MP1A开发板实验指导手册》第42章
————————————————
版权声明:本文为CSDN博主「华清远见IT开放实验室」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u014170843/article/details/109648700

标签:echo,STM32MP157,七步,开发板,M4,Cortex,ttyRPMSG0,CM4,OpenAMP
来源: https://www.cnblogs.com/aker-whale/p/14882615.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有