
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框架与用户进行交互。" U8 f" {: s* W' H RPMsg框架(Remote Processor Messaging Framework)是实现对远程处理器信息传递。它是基于VirtIO的消息总线,允许内核驱动程序与系统上可用的远程处理器进行通信。 STM32MP1多核通信框架如下图。 ![]() A7在RPMsg和Virtio框架创建一个面向用户态的/dev/ttyRPMSG接口,ST提供OpenAMP相关库,M4在OpenAMP上创建虚拟串口,两个内核之间通过串口通信模式,速度非常快。 ; h, {4 v" m& J) Y6 j! y) I Linux系统都封装好了,ST官方提供的内核已经默认配置了RPMSG_TTY驱动,这个环节我们就不需要做什么了。8 I Q5 j. B, l, k- v# j$ T . ^4 X# K1 U. u. e+ |/ F, B# e 下面我们就通过七个步骤来实现A7和M4之间的通信。9 b4 d) Z' j/ I3 R* h* r 2 R" d. ?% M: X0 g5 d W6 p 1. 启动STM32CubeIDE ![]() 2. 导入已有工程 点击File->Import…,选择Existing Projects into Workspace,点击NEXT。 ![]() 浏览目录选择工程OpenAMP_ TTY _echo,光盘路径为: + Y. `2 q, ]; B4 _ 【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-FSMP1\Applications\OpenAMP\OpenAMP_TTY_echo\STM32CubeIDE】9 J2 T7 K: n" }: U( L' f- ] ![]() 3. 编译工程0 y% u# A$ u* ~! W0 q 选择项目OpenAMP_ TTY _echo_CM4并单击Build按钮 ![]() 4. 开发板连接' W& D# C( T( s9 r( j4 M: N; ]" X 这里使用的是华清远见FS-MP1A开发板。- A3 J7 H7 o, q' S6 P* g- k 确认开发板已烧写系统,可运行linux,启动拨码拨至010。 ' n+ T3 L5 b: X% @6 }2 T 开发板上电,并如下图连接开发板USB和ST-Link至PC。4 X( }' F+ s2 u! l8 l, ] ![]() 可通过点击STM32 butterfly按钮来打开串口控制台+ q6 v3 k* a; [: j( W+ u* { ![]() 如果控制台窗口显示linux日志或提示信息,则连接成功3 r1 W$ j; a' K P. |3 U7 d3 x' q ![]() 5. USB虚拟网线网络配置 打开控制面板的网络连接界面,在使用USBmini线连接开发板和PC后可以在网络连接界面可看到多了一个Remote NDIS网卡,如下图。2 K* S0 N7 B* R6 }! _ ![]() 选中Remot NDIS网卡,右键选择属性,配置IPv4,选中后点击属性,配置IP地址为192.168.7.100,如下图。9 m! `. D- W, {3 z9 J, C ![]() 6. 下载固件0 C3 M7 {/ i0 \5 b, N 选择项目OpenAMP_ TTY _echo_CM4) d, P( m8 {7 ?2 k- S0 ^5 u0 S- j + x) H9 f( \- o 4 S* [. `" W; e7 l7 b1 y6 T 选择Debug按键 ![]() 选择STM32 Cortex-M C/C++ Application* @0 f( v2 f% C! \ 调试器 下选择thru Linux core(Production mode)/ m6 R4 O2 r( J3 v8 a) i - o8 x- e! i! G5 k% O0 l7 B, x 选择Serial Port,可打开设备管理器查看 检查IP地址,可通过串口控制台输入ifconfig指令查看usb0网卡IP地址 + }/ G2 f- x3 f: W; w 如下图,配置完成后点击Debug1 _$ T& k2 M$ m h9 w3 \# U5 _! z4 R" |; M+ M ![]() 提示关闭控制台,点击Yes( \7 j1 G+ ~5 y2 W ![]() 弹出如下窗口,默认无密码,直接点击OK ![]() 点击Switch0 g. A2 x6 h9 Y* a3 ? ![]() 7. 测试固件 OpenAMP_ TTY _echo_CM4固件主要功能:6 \ I4 ^; S, o$ w0 m( f CPU2(CM4)初始化OpenAMP MW,后者通过HAL初始化/配置IPCC外设并设置openamp-rpmsg框架基础结构# E2 b1 _! d5 H( w, a CPU2(CM4)为2个虚拟UART实例(UART0和UART1)创建2个 rpmsg通道( o0 x( t- K0 j/ i# a4 n4 v CPU2(CM4)在这两个通道上等待来自CPU1(CA7)的消息) [# J! O7 i( p& j! Y 当CPU2(CM4)在1个虚拟UART实例/ rpmsg通道上收到消息时,它将消息发送回同一虚拟UART实例上的CPU1(CA7)+ X+ ~: A. [* T9 X6 d! _ 加载完固件后,重新打开STM32CubeIDE的串行控制台。& J. P, f$ [ W' \ ![]() 输入以下命令' _$ S* ^* {6 h8 N0 X 初始化ttyRPMSG0配置) w2 C R0 o; Y7 T6 D ; a' Q$ K& n" X$ |; q7 K4 v" T! b stty -onlcr -echo -F /dev/ttyRPMSG0 不断读取ttyRPMSG0通道/ G; A+ ?0 Y* V+ j, O cat /dev/ttyRPMSG0 & 在一个ttyRPMSG0通道上发送消息”LED ON”或”LED OFF”可控制开发板上LED灯点灭状态,并在同一ttyRPMSG0通道上同时接收回显1 ~$ u9 j6 E* a4 d0 {9 ?; S3 K ![]() |
/dev/ttyRPMSG0和/dev/ttyRPMSG0是linux内核的驱动?是否在linux中编译?另外连接的stlink进行m4内核下载,M4没有对应的flash,怎么断电保存?. M$ _. f+ J+ C# Y: } |
基于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安全启动》 课程学习心得