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

2023-05-16

写在前面:

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章

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • centos6下配置softap需关闭NetworkManager服务

    最近在linux上使用了 fast 150us无线网卡 在网上找了一大堆资料 找到了8188eu驱动 安装成功 在配置hostapd服务时 xff0c 老是启动不起来 xff0c 或者是启动之后别的机器连不上热点 xff0c 当我将Netw
  • 不重新编译为PHP安装MySQL模块

    当初安装PHP的源码目录我没有删除 xff0c 直接在此基础上安装 xff1a 1 进入php ext mysql xff1a cd php ext mysql 2 执行phpize命令 xff0c 这个命令一定得在php的模块目录下执行
  • Linux 下 netbeans 字体抗锯齿正解

    在netbeans安装目录找到 etc 目录下的 netbeans conf 文件 xff0c 用你喜欢的编辑器打开这个文件 xff0c 在其中加入这个选项 J Dawt useSystemAAFontSettings 61 on 这里你要
  • 如何在CentOS系统中安装字体

    以linux下安装宋体 xff0c 黑体为例 xff0c 介绍字体安装方法 xff1a 第一步 拷贝 把对应字体的的ttf文件拷到 usr share fonts 的任意目录下 xff0c 假设宋体已拷贝到 usr share fonts
  • Intel CPU简介

    现在Intel已然成了CPU的代名词 xff0c 但当年的Intel并没有现在这么风光 从1978年发布的8086到2013年的四代i7 xff0c 整整35年 xff0c 她见证了从PC到互联网 移动互联网的几次巨变 xff1b 这些年的
  • 让AndroidX86竖屏显示

    以VirtualBox为例 xff0c Android X86的下载地址可以百度搜索 这种界面非常不爽 xff0c 尤其在调试程序时 xff0c 如何才能显示成竖屏呢 xff1f 先把AndroidX86装到硬盘上 然后进行下面设置 1 完
  • Call to undefined function imagettftext()

    今天将公司官网弄到本地测试到时候 xff0c 发现验证码无法显示 xff0c 公司的官网以前是用dede做的 xff0c 找到dede中的include vdimgck php 单独运行 xff0c 没有报错 xff0c 也不显示 顺着文件
  • 在linux下安装glut包

    转自 xff1a http blog csdn net delacroix xu article details 5478429 在linux下opengl编程 xff0c 首先需要安装glut包 1 安装glut xff08 1 xff0
  • configure: error: could not find working GL library

    plib1 8 3下载地址 xff1a http pkgs fedoraproject org repo pkgs plib plib 1 8 3 tar gz de10b19dfcee5da7115ee2a69656f34c plib 1
  • 一篇关于su和sudo以及visudo的很好的介绍性文档

    一 使用 su 命令临时转换用户身份 1 su 的适用条件和威力 su命令就是转换用户的工具 xff0c 怎么理解呢 xff1f 比如我们以普通用户beinan登录的 xff0c 但要添加用户任务 xff0c 执行useradd xff0c
  • 微信公众号开发中的openid值并不是固定的

    在做微信开发时 xff0c 今天犯了一个错误 xff0c 检查了半天才检查出来 微信在向第三方推送信息时会带上一个openid 这是发送信息者的唯一标识 xff0c 看文档说是唯一标识 就以为这个id只与微信号有关 xff0c 而今天才发现
  • linux下单独编译安装Apache rewrite_module

    转自 xff1a http blog chinaunix net uid 25266990 id 145266 html Apache已经编译安装完了 xff0c 上传程序 xff0c 发现必须得用rewrite xff0c 重新上载模块
  • linux 下安装php的openssl扩展

    1 安装openssl 解压php的源码包 tar zxvf php 5 3 8 tar gz cd soft php 5 3 8 ext openssl mv config0 m4 config m4 否则报错 xff1a 找不到conf
  • php安装 出现Sorry, I cannot run apxs. ***错误解决方法

    tar zvxf php 5 1 2 tar gz cd php 5 1 2 configure prefix 61 usr local php with mysql 61 usr local mysql with apxs2 61 usr
  • linux下mysql的root密码忘记解决方

    1 xff0e 首先确认服务器出于安全的状态 xff0c 也就是没有人能够任意地连接MySQL数据库 因为在重新设置MySQL的root密码的期间 xff0c MySQL数据库完全出于没有密码保护的 状态下 xff0c 其他的用户也可以任意
  • Pandas DataFrame

    http pandas pydata org pandas docs stable api html dataframe 构造函数 方法描述DataFrame data index columns dtype copy 构造数据框 属性和数
  • Apache域名自动指向虚拟主机目录

    用apache做项目时 xff0c 是经常需要在httpd vhost conf文件中配置虚拟主机 xff0c 用于单独的项目 xff0c 每新开一个项目就需要重新加一个配置 xff0c 着实麻烦 xff0c apache2其实是支持在配置
  • CentOS上升级PHP5.3至PHP5.5

    最近想玩玩儿symfony2 发现自己CentOS上的PHP版本还是5 3不符合要求 xff0c 所以想升级至5 5 但是 CentOS通过yum更新的源最新版本是5 3 无法升级 xff0c 通过网上查找资料 发现 更新下yum的源后 可
  • 启动docker web服务时 虚拟机端口转发 外部无法访问

    centos 7 docker 启动了一个web服务 但是启动时 报 WARNING IPv4 forwarding is disabled Networking will not work 网上查询了下 需要做如下配置 解决办法 xff1
  • CentOS7下docker启动报Error starting daemon: Error initializing network controller: could not delete ...v

    前一天晚上强制关闭了虚拟机 CentOS7 导致早上启动docker 报Error starting daemon Error initializing network controller could not delete ve endp

随机推荐

  • 在ubuntu1404下安装PHP AMQP拓展 并进行docker容器封装

    有项目用到过rabbitmq 是技术负责人搭建好环境 xff0c 今天自己在本地 ubuntu 开发 xff0c 重新搞了下 xff0c 在网上查了下资料 xff0c 把安装重点记录下来 项目开发语言PHP 需要与一台rabbitmqser
  • centos7下将docker的storage 由loop-lvm 更改为 direct-lvm

    本机服务器环境是centos7 xff08 vbox虚拟机 xff09 安装docker后 运行正常 xff0c 某次强行关闭了虚拟机 导致后续docker运行不起来 xff0c 发现报错是与storage有关 xff0c 所以网上查原因是
  • ubuntu1604下添加自启动项 开机启动docker开发环境

    在win7下安装的vbox虚拟机 xff0c 虚拟机起了一个ubuntu1604作为宿主机 xff0c 安装的docker服务 通过vbox的挂载工具将win7下的程序开发目录挂载到了ubuntu下 作为共享目录 docker安装的开发环境
  • apache2自签名证书开启ssl

    生成私钥文件 需要输入密码 openssl genrsa des3 out apache key 1024 防止APACHE启动 读取私钥文件也需要输入密码 去除密码输入 openssl rsa in apache key out apac
  • alpine 下编译php5.4的源码报Invalid configuration `x86_64-linux-musl'错误

    Invalid configuration 96 x86 64 linux musl 39 system 96 musl 39 not recognized configure error bin bash 在alpine3 7上编译php
  • golang GRPC安装

    1 下载protoc编译器 https github com protocolbuffers protobuf releases 将protoc exe放到系统环境变量设置的目录下 2 安装golang相关的package go get g
  • reStructuredText

    段落 段落必须由空行代替 段落1 段落2 内联标记 span class hljs emphasis 斜体 span span class hljs strong 粗体 span span class hljs code 96 96 代码块
  • win10下安装kubernets

    win10下安装docker for windows后 xff0c 新版是有一个kubernets选项 xff0c 选择启动后 xff0c 一直报 kubernets is starting 的错误 xff0c 原因是 xff0c kube
  • 嵌入式工程师的自我修养

    文章目录 前言一 认知的四个阶段1 不知不知2 知道不知3 知道己知3 1 软硬件3 2 网络3 3 安全技术 xff08 换成你自己的领域 xff09 3 4 真正知道的三个阶段3 4 1 会用3 4 2 了解怎么实现3 4 3 明白为什
  • 利用uORB机制实现数据在不同进程中通信

    uORB实际上是一种设计模式中的观察者模式 xff0c 用于实现一种一对多的依赖关系 xff0c 让多个观察者 xff08 Observer xff09 同时监听某一主题对象 xff08 Subject xff09 当这个主题对象 xff0
  • Android-注解篇

    1 什么是注解 从JDK 5 开始 xff0c Java 增加了注解 xff0c 注解是代码里的特殊标记 xff0c 这些标记可以在编译 类加载 运 行时被读取 xff0c 并执行相应的处理 通过使用注解 xff0c 开发人员可以在不改变原
  • 新品BCM6755A1KFEBG/MT7921LE/MT7921AU WiFi芯片

    博通在WiFi市场具有相当的实力 在WiFi6上有下面这几个解决方案 xff1a 型号 xff1a BCM6755 BCM6755A1KFEBG 类型 xff1a 四核1 5GHz CPU 封装 xff1a BGA 批次 xff1a 新 B
  • Ubuntu : GPG签名验证错误 解决之道sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 6DFBCBAE

    Ubuntu GPG签名验证错误 解决之道 转载 sudo apt key adv keyserver keyserver ubuntu com recv keys Key Where key 61 61 the gpg key id Th
  • T265深度图像输出

    1 T265深度图像输出 1 1 环境依赖 T265摄像头python3pip3opencv pythonpyrealsense2 1 2 安装运行环境 安装秘钥 span class token function sudo span ap
  • Linux版本号串记录(ubuntu系列)

    Linux version 4 4 0 112 generic buildd 64 lgw01 amd64 010 gcc version 5 4 0 20160609 Ubuntu 5 4 0 6ubuntu1 16 04 5 135 U
  • 死锁的四个必要条件

    死锁 在高并发中是一个常见的名词 产生的四个必要条件如下 xff1a 互斥条件 xff1a 一个资源同一时间能且只能被一个线程访问 xff1b 不可掠夺 xff1a 当资源被一个线程占用时 xff0c 其他线程不可抢夺该资源 xff1b 请
  • Sphinx index.rst

    假设我们有两个文本file1 rst和file2 rst他们的内容如下 file1 rst span class hljs header file1 title1 61 61 61 61 61 61 61 61 61 61 61 61 sp
  • Git - 图形化界面操作

    目录 1 新建仓库 2 代码提交 3 代码回滚 4 新建分支 5 合并分支 6 重置合并 7 分支变基 8 分支优选 Git 的图形化界面操作 xff0c 使用 Idea 进行演示 1 新建仓库 对于一个代码仓库 Create Git re
  • CMakeLists

    1 指定 cmake 的最小版本 cmake minimum required VERSION 3 4 1 2 设置项目名称 xff0c 它会引入两个变量 demo BINARY DIR 和 demo SOURCE DIR xff0c 同时
  • 七步实现STM32MP157多核协同工作(Cortex-A7与Cortex-M4通信)

    写在前面 xff1a STM32MP157是ST进军Linux的首款微处理器 xff0c 采用MCU 43 MPU的组合 xff0c 集成两颗主频微800MHz的Cortex A7应用处理器内核 xff08 支持开源linux操作系统 xf