
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通道上同时接收回显 ![]() |
/dev/ttyRPMSG0和/dev/ttyRPMSG0是linux内核的驱动?是否在linux中编译?另外连接的stlink进行m4内核下载,M4没有对应的flash,怎么断电保存? |
基于STM32MP1和STM32MP2在嵌入式Linux平台上部署有效的安全保护机制
利用STM32MP1和STM32MP2为嵌入式Linux提供有效的安全措施:供当今决策者参考的3条宝贵经验
STM32MP1 WiFi连接
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习笔记之optee 如何加载CORTEX-M核和使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU 安全启动》课程学习心得+开启一扇通往嵌入式系统安全领域深处的大门。
《STM32MPU安全启动》 课程学习心得