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

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

[复制链接]
STMCU-管管 发布时间:2021-6-1 17:21
STM32MP157是ST进军Linux的首款微处理器,采用MCU+MPU的组合,集成两颗主频微800MHz的Cortex-A7应用处理器内核(支持开源linux操作系统),和一颗主频微209M的Cortex-M4微控制器内核(完美沿用现有的STM32 MCU生态系统),既充分满足多种应用的灵活性需求,又实现了最佳性能和低功耗特性,还支持3D图形处理单元(3D GPU)。
! q8 P# U* M% \7 E$ W
3 j. q; y+ ^/ d) k* H3 Q那STM32MP1系列,A7和M4是如何进行通信的呢?
8 S& \; z6 F# z* C# U
' @& K( X  _* L1 i5 j1 M" Y简单的说,A7和M4两个核心的通信,是通过底层的IPCC控制器(Inter-Processor communication controller)去通信的,linux中使用RPMsg框架与用户进行交互。" U8 f" {: s* W' H

7 H: t8 d5 H! @RPMsg框架(Remote Processor Messaging Framework)是实现对远程处理器信息传递。它是基于VirtIO的消息总线,允许内核驱动程序与系统上可用的远程处理器进行通信。
" p, o2 W, `  E" c
  K& s0 e# k4 n1 C4 c/ g. a" X# o; aSTM32MP1多核通信框架如下图。
# D5 N& T' c. P2 p, G+ O) Q 1.png 0 p8 @* _0 E3 C6 t
A7在RPMsg和Virtio框架创建一个面向用户态的/dev/ttyRPMSG接口,ST提供OpenAMP相关库,M4在OpenAMP上创建虚拟串口,两个内核之间通过串口通信模式,速度非常快。
2 ^! R  d# U. A8 d; 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
5 F; c2 t' \0 A) y! X3 { 2.png ' x- S  W# P% V0 f
2. 导入已有工程
0 F. z  Y; K! n6 |- H点击File->Import…,选择Existing Projects into Workspace,点击NEXT。
2 Z/ W0 i8 q1 L8 |1 W7 q 3.png
) |  |+ ]. N7 M" X) Y- f浏览目录选择工程OpenAMP_ TTY _echo,光盘路径为:
" X$ T6 Z  v* V3 p+ 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- ]
4.png " u, O! W  `. A/ d$ l* m" R
3. 编译工程0 y% u# A$ u* ~! W0 q
选择项目OpenAMP_ TTY _echo_CM4并单击Build按钮
' t! \4 Q8 J! H) v4 {, E 5.png 1 I7 X7 t1 D& I1 H% D
4. 开发板连接' W& D# C( T( s9 r( j4 M: N; ]" X
这里使用的是华清远见FS-MP1A开发板。- A3 J7 H7 o, q' S6 P* g- k

" E; V! ^2 v: _; Z9 S确认开发板已烧写系统,可运行linux,启动拨码拨至010。
6 K2 [. j- o0 j+ g8 n' n+ T3 L5 b: X% @6 }2 T
开发板上电,并如下图连接开发板USB和ST-Link至PC。4 X( }' F+ s2 u! l8 l, ]
6.png : T9 u1 P9 ?. v7 J) T" h- ?" ~
可通过点击STM32 butterfly按钮来打开串口控制台+ q6 v3 k* a; [: j( W+ u* {
7.png 0 E" v7 {& G. A9 g
如果控制台窗口显示linux日志或提示信息,则连接成功3 r1 W$ j; a' K  P. |3 U7 d3 x' q
8.png
# @4 N7 {4 M' Y5. USB虚拟网线网络配置
7 c1 i$ d# U  q$ L0 Z. C; X& T打开控制面板的网络连接界面,在使用USBmini线连接开发板和PC后可以在网络连接界面可看到多了一个Remote NDIS网卡,如下图。2 K* S0 N7 B* R6 }! _
9.png 4 u9 p4 h) |$ ^* p& ^3 l
选中Remot NDIS网卡,右键选择属性,配置IPv4,选中后点击属性,配置IP地址为192.168.7.100,如下图。9 m! `. D- W, {3 z9 J, C
10.png ! ?7 U$ A" |, A/ U: v
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按键
! R: c5 F/ c" @  }2 b* Z 11.png
0 ]6 a% w# j  z8 Y+ j3 z选择STM32 Cortex-M C/C++ Application* @0 f( v2 f% C! \

) x$ ~* F! Q" o8 Q! |) j( A调试器 下选择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,可打开设备管理器查看
: w" U1 b1 I3 I6 O
! f- j! U* s  k1 O- P检查IP地址,可通过串口控制台输入ifconfig指令查看usb0网卡IP地址
; L- |* G5 k$ w  J6 r, Q
+ }/ G2 f- x3 f: W; w
如下图,配置完成后点击Debug1 _$ T& k2 M$ m  h9 w3 \# U5 _! z4 R" |; M+ M
12.png * N; \- m3 g+ _+ |  w! f
提示关闭控制台,点击Yes( \7 j1 G+ ~5 y2 W
13.png
) w* n- V  y3 S1 D* Y* \$ ?3 p) {/ r2 h弹出如下窗口,默认无密码,直接点击OK
7 ?+ u( y0 Z: M3 b" A& l4 S" B 14.png
# \/ B1 T. \. e" x2 ]2 r点击Switch0 g. A2 x6 h9 Y* a3 ?
15.png
$ a6 z4 n( u$ `$ a/ |1 T& w% J7. 测试固件
8 y4 p' C! \! i. J' C/ JOpenAMP_ 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' \
16.png
; `. C4 `# U" I1 u输入以下命令' _$ S* ^* {6 h8 N0 X

- H9 z8 _$ D6 f9 [# o初始化ttyRPMSG0配置) w2 C  R0 o; Y7 T6 D
; a' Q$ K& n" X$ |; q7 K4 v" T! b
stty -onlcr -echo -F /dev/ttyRPMSG0
" ]5 u! `4 y2 d9 A( u6 _不断读取ttyRPMSG0通道/ G; A+ ?0 Y* V+ j, O

) v" f  N7 M, u" Y( Tcat /dev/ttyRPMSG0 &
9 T' _9 d3 q  V7 U& W在一个ttyRPMSG0通道上发送消息”LED ON”或”LED OFF”可控制开发板上LED灯点灭状态,并在同一ttyRPMSG0通道上同时接收回显1 ~$ u9 j6 E* a4 d0 {9 ?; S3 K
17.png 1 s* @- J1 {# t* Q" |

) p1 r& p9 H. S( ?/ A
收藏 评论1 发布时间:2021-6-1 17:21

举报

1个回答
寒门过河卒 回答时间:2021-6-11 10:45:04
/dev/ttyRPMSG0和/dev/ttyRPMSG0是linux内核的驱动?是否在linux中编译?另外连接的stlink进行m4内核下载,M4没有对应的flash,怎么断电保存?. M$ _. f+ J+ C# Y: }

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版