你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【经验分享】七步实现STM32MP157多核协同工作

[复制链接]
STMCU-管管 发布时间:2021-6-1 17:21
STM32MP157是ST进军Linux的首款微处理器,采用MCU+MPU的组合,集成两颗主频微800MHz的Cortex-A7应用处理器内核(支持开源linux操作系统),和一颗主频微209M的Cortex-M4微控制器内核(完美沿用现有的STM32 MCU生态系统),既充分满足多种应用的灵活性需求,又实现了最佳性能和低功耗特性,还支持3D图形处理单元(3D GPU)。: j. o9 X. I- R
: S& q  I1 T6 q& n
那STM32MP1系列,A7和M4是如何进行通信的呢?' n* Q# i8 o1 I; F

7 v0 o* [3 A3 f简单的说,A7和M4两个核心的通信,是通过底层的IPCC控制器(Inter-Processor communication controller)去通信的,linux中使用RPMsg框架与用户进行交互。
* z5 }' @0 G! Z! I1 G% |+ y4 g, |( ~. q% _  N5 b
RPMsg框架(Remote Processor Messaging Framework)是实现对远程处理器信息传递。它是基于VirtIO的消息总线,允许内核驱动程序与系统上可用的远程处理器进行通信。' z+ m2 j6 @1 H5 b, C" p
; Y- i* r( x$ ^
STM32MP1多核通信框架如下图。
% t4 |& `4 n0 X 1.png   }3 d( U* f9 P6 k5 o+ v
A7在RPMsg和Virtio框架创建一个面向用户态的/dev/ttyRPMSG接口,ST提供OpenAMP相关库,M4在OpenAMP上创建虚拟串口,两个内核之间通过串口通信模式,速度非常快。
1 T9 W$ }9 I! k5 }* ?, h9 |/ q& Q3 T/ H: B% ^
Linux系统都封装好了,ST官方提供的内核已经默认配置了RPMSG_TTY驱动,这个环节我们就不需要做什么了。
$ \% {( ?. ~* I5 F7 z$ a# @
% l! E2 E0 ^5 E1 }6 y
下面我们就通过七个步骤来实现A7和M4之间的通信。
( ]/ I* o+ v2 m7 v' A7 T; ?( S7 W* G+ y6 Z
1. 启动STM32CubeIDE
' Y% p! X8 c" _- d/ { 2.png
$ M3 {8 ?" l, l$ f) T2. 导入已有工程
+ c, u0 o! J5 S0 m: H; @) ]+ f点击File->Import…,选择Existing Projects into Workspace,点击NEXT。. M* |1 h) {3 \! y6 C5 o+ I# ?
3.png
+ Y# J+ A: ?( j" l! a/ C& N浏览目录选择工程OpenAMP_ TTY _echo,光盘路径为:8 D' [. e* o/ ^2 j& H2 K/ M

0 V1 v' |) q, h【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-FSMP1\Applications\OpenAMP\OpenAMP_TTY_echo\STM32CubeIDE】; w  {, g5 m" Q2 g* p
4.png ; x" E, P! s3 G# Z
3. 编译工程% ?4 p. v2 g+ L1 O
选择项目OpenAMP_ TTY _echo_CM4并单击Build按钮
% O6 Q, V6 m7 A6 h 5.png 5 y. P9 j' M- b: t; M$ U% W! U
4. 开发板连接0 G4 _8 z0 {8 r. D9 \
这里使用的是华清远见FS-MP1A开发板。
) G, ?, d. D8 B
! w' _8 P) Q7 V2 F! U! O8 q确认开发板已烧写系统,可运行linux,启动拨码拨至010。
% N5 m9 Y; z( ^: J  p8 A2 p& T, a" P( J) x- b* \8 Q  b) O4 Z" @
开发板上电,并如下图连接开发板USB和ST-Link至PC。
3 g/ m4 c: I: D# z% q. T 6.png
! f& I8 J8 ], i* y可通过点击STM32 butterfly按钮来打开串口控制台
8 h8 D4 O1 ~# c5 T4 T 7.png ( u& l9 S: Y$ ^; J- N; C
如果控制台窗口显示linux日志或提示信息,则连接成功. s6 x: Q( a# o1 B( O% e
8.png
9 Y2 N+ n% }5 o1 M5. USB虚拟网线网络配置
: K) F" l' P$ X4 e打开控制面板的网络连接界面,在使用USBmini线连接开发板和PC后可以在网络连接界面可看到多了一个Remote NDIS网卡,如下图。6 I/ I# i0 M3 l+ v$ v( Y9 T5 F' Z
9.png + y: L9 m, R4 {% W) ]
选中Remot NDIS网卡,右键选择属性,配置IPv4,选中后点击属性,配置IP地址为192.168.7.100,如下图。/ O% K9 i5 j1 d# Z0 b* {
10.png
; q# J, Z: `7 z4 C6. 下载固件# U' K1 P9 g3 J* t( S8 m
选择项目OpenAMP_ TTY _echo_CM4
& T* N, N/ o1 m5 |, ?
3 V' m6 I/ S" P! c
" h5 x5 ?% A& t+ `# H+ P0 j
选择Debug按键! b1 O/ I: |+ f1 ?. u
11.png
( c5 i8 p3 }2 p$ S0 e$ r0 b8 K' [选择STM32 Cortex-M C/C++ Application
, b( e5 J9 P  h
. P( y% O: d, `# |8 O- n& Z调试器 下选择thru Linux core(Production mode)2 q0 j! @5 S# R! h+ V' Q

: A9 C: o0 H5 L( T5 h8 i9 e3 p选择Serial Port,可打开设备管理器查看3 T# n/ ^6 ?, i

2 J9 ^1 Z$ p0 c. z; K! c4 @检查IP地址,可通过串口控制台输入ifconfig指令查看usb0网卡IP地址3 t3 v2 {/ U9 \; V' ?3 z

9 S  f$ b& I$ _' b8 q如下图,配置完成后点击Debug
: o% m& ~  }! J; {: |/ v 12.png ! S/ B% @+ L3 _" y1 |
提示关闭控制台,点击Yes
) S% s  A5 v: n 13.png ( r" Z9 o$ f5 Y# e
弹出如下窗口,默认无密码,直接点击OK/ F( U+ w  h" U) Z( E4 J/ |
14.png
5 w. W4 \& X$ @+ ^  a( _点击Switch
* @' E9 I. Y8 W5 S, w1 y$ } 15.png * \- R& _4 M8 i
7. 测试固件' M* V6 _+ Q6 a# _/ s8 f! B# ]9 m4 I% z
OpenAMP_ TTY _echo_CM4固件主要功能:- o7 d( c: c1 w
CPU2(CM4)初始化OpenAMP MW,后者通过HAL初始化/配置IPCC外设并设置openamp-rpmsg框架基础结构  ~& H: J; \+ @6 X% ^  y
CPU2(CM4)为2个虚拟UART实例(UART0和UART1)创建2个 rpmsg通道. d# C7 q" L; r, }
CPU2(CM4)在这两个通道上等待来自CPU1(CA7)的消息
! _# v. q1 D1 ~% b当CPU2(CM4)在1个虚拟UART实例/ rpmsg通道上收到消息时,它将消息发送回同一虚拟UART实例上的CPU1(CA7)  X1 m( L5 `2 H/ X9 N: N
加载完固件后,重新打开STM32CubeIDE的串行控制台。
: ^+ f1 g  x" ^; M 16.png
3 ~: {" }2 }/ t( t7 d, q- O输入以下命令
6 O) J: ]- k2 _+ @9 ]  b3 `, u- L; N9 x4 @' m; N; j* O, u2 a
初始化ttyRPMSG0配置
/ o( Z, m' Q# v# R8 u
" B; z3 E3 g+ U+ }
stty -onlcr -echo -F /dev/ttyRPMSG0
" L+ h8 R1 ?, q1 U不断读取ttyRPMSG0通道
5 u; {* Y/ y, K" @- H! f5 t# Z% B- P8 f
cat /dev/ttyRPMSG0 &
. P+ m; a" O' y: Z' @& n5 H在一个ttyRPMSG0通道上发送消息”LED ON”或”LED OFF”可控制开发板上LED灯点灭状态,并在同一ttyRPMSG0通道上同时接收回显# z9 e7 x1 a6 D/ G2 @( \- Z/ t
17.png
! A6 X8 z0 R8 z3 y# o
) R: _% a) K3 C& W) q
赞 收藏 评论1 发布时间:2021-6-1 17:21

举报

1个回答
寒门过河卒 回答时间:2021-6-11 10:45:04
/dev/ttyRPMSG0和/dev/ttyRPMSG0是linux内核的驱动?是否在linux中编译?另外连接的stlink进行m4内核下载,M4没有对应的flash,怎么断电保存?" X2 ~8 T5 B( _) m/ t; Q

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版