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

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

[复制链接]
STMCU-管管 发布时间:2021-6-1 17:21
STM32MP157是ST进军Linux的首款微处理器,采用MCU+MPU的组合,集成两颗主频微800MHz的Cortex-A7应用处理器内核(支持开源linux操作系统),和一颗主频微209M的Cortex-M4微控制器内核(完美沿用现有的STM32 MCU生态系统),既充分满足多种应用的灵活性需求,又实现了最佳性能和低功耗特性,还支持3D图形处理单元(3D GPU)。6 f$ E" ~  @  {; k; ~

1 h# d& F- F. A. P# M那STM32MP1系列,A7和M4是如何进行通信的呢?! k# G, T( C7 D4 C  d

# H: y0 M% h' f- |简单的说,A7和M4两个核心的通信,是通过底层的IPCC控制器(Inter-Processor communication controller)去通信的,linux中使用RPMsg框架与用户进行交互。  p) @; x0 \2 t/ w: Q& T) G

6 I4 o, b3 s$ D3 a9 X+ W4 E" u" QRPMsg框架(Remote Processor Messaging Framework)是实现对远程处理器信息传递。它是基于VirtIO的消息总线,允许内核驱动程序与系统上可用的远程处理器进行通信。( G1 {6 ?6 O6 Y+ z( ~

1 ^9 ?, [% Y# pSTM32MP1多核通信框架如下图。1 j! e/ w6 s/ M! S" {+ H1 q
1.png & o5 a' m+ n. a- P8 T* B$ U
A7在RPMsg和Virtio框架创建一个面向用户态的/dev/ttyRPMSG接口,ST提供OpenAMP相关库,M4在OpenAMP上创建虚拟串口,两个内核之间通过串口通信模式,速度非常快。9 |; G, Q7 \( e1 k8 l
6 L9 V) D, q- [6 E3 Y
Linux系统都封装好了,ST官方提供的内核已经默认配置了RPMSG_TTY驱动,这个环节我们就不需要做什么了。& `8 p2 q4 b' r8 ~

( u9 d. @& k) u# K下面我们就通过七个步骤来实现A7和M4之间的通信。
: {/ v4 @: y- v5 A- d
: _6 J+ d, q* `: Y6 ?1. 启动STM32CubeIDE" K+ ?8 D) `, r& E
2.png . X( s, C. _7 ]* C" H) @
2. 导入已有工程
7 Q4 \7 M# M- R/ Y7 Z7 }9 o点击File->Import…,选择Existing Projects into Workspace,点击NEXT。& J/ s, P, P8 n$ a; I8 Z7 R) V
3.png
- z4 V8 J) i3 |$ s0 A浏览目录选择工程OpenAMP_ TTY _echo,光盘路径为:
7 |" r% p8 C, [$ A! ?
0 @5 S2 V: `2 q' U. V1 \: B【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-FSMP1\Applications\OpenAMP\OpenAMP_TTY_echo\STM32CubeIDE】$ O$ y' ]$ R9 y& g2 _: o$ T
4.png 3 P& ^" i7 B' T: J; P" a) o
3. 编译工程1 u+ e! ]! a7 n+ a9 {
选择项目OpenAMP_ TTY _echo_CM4并单击Build按钮
" T& V- C5 l8 x$ D0 n( o' s8 `) U" [ 5.png
( G5 L9 N/ s  ]6 G. {( e( N6 j4. 开发板连接
4 e3 |2 ]% Z, k  S这里使用的是华清远见FS-MP1A开发板。
4 o4 {: y8 A" O; I( v6 `/ Q# G7 S/ d) t6 \+ x3 g! h
确认开发板已烧写系统,可运行linux,启动拨码拨至010。
; ]0 P9 p+ I8 q) x3 F& O3 I/ Z4 T4 e3 u; W
开发板上电,并如下图连接开发板USB和ST-Link至PC。
+ G" m, R- e. [/ y  B 6.png
2 ~/ N: o7 u5 Y% M( P; o: e$ [可通过点击STM32 butterfly按钮来打开串口控制台: [3 Q# h: p3 c
7.png
# V4 \$ b" W5 V  _. e如果控制台窗口显示linux日志或提示信息,则连接成功7 ]; z+ a0 G' ^# C- U
8.png 0 }+ L1 T3 o: I
5. USB虚拟网线网络配置) c( v6 J, w6 E# y4 Q
打开控制面板的网络连接界面,在使用USBmini线连接开发板和PC后可以在网络连接界面可看到多了一个Remote NDIS网卡,如下图。8 R' Q& q3 b; t1 q$ t* ~
9.png ' d1 h) h9 {% Y9 b4 ^
选中Remot NDIS网卡,右键选择属性,配置IPv4,选中后点击属性,配置IP地址为192.168.7.100,如下图。
8 H3 l, Y2 S! `) N# `( m 10.png
4 K; q9 y3 W" h+ z4 G& p  v5 _6. 下载固件2 f$ O3 R. w% O/ n- a4 v' C
选择项目OpenAMP_ TTY _echo_CM4
. A) n  S! A& [7 Z8 i* w; B
- v- x' S7 k, e9 d! B4 s- z& c

9 j8 `. Y4 b$ H( n6 \" j) H, ^, f选择Debug按键( V: F6 U, \" \9 J: X' z
11.png , ^5 J+ c4 P/ T8 c( m5 m
选择STM32 Cortex-M C/C++ Application
: ?  w/ G/ g  {' z0 w* y
3 n: \8 E8 [" G& u% q' B3 n调试器 下选择thru Linux core(Production mode)
  L) N, u7 E+ z$ I3 J& j9 r8 M
! E0 @' r* I* e$ b+ S; F9 p选择Serial Port,可打开设备管理器查看8 a) H, i7 O% ^6 `/ B; r7 C5 Y
0 g/ S# {; x1 x% J0 _1 D
检查IP地址,可通过串口控制台输入ifconfig指令查看usb0网卡IP地址
( \& A( U. i5 Y- X
/ Z' b- A) D  T! L3 m! e/ _
如下图,配置完成后点击Debug
$ S2 ^* g( l+ r: \. H8 i- A 12.png 3 ^0 ?! J2 P0 k% w% g
提示关闭控制台,点击Yes
+ c1 x, A- L8 s9 M9 ]7 q 13.png
. q6 K' Q3 a$ S# J2 t5 O! U* w% X弹出如下窗口,默认无密码,直接点击OK
9 _* T( d& g7 W: d. W* r 14.png
" `% h: {+ Q4 i" i4 ?% f2 j点击Switch2 z+ n, P9 c7 N6 e
15.png
9 P3 ~8 L, t+ b! N7. 测试固件
, j3 Y1 A+ p( U4 @; ?. \OpenAMP_ TTY _echo_CM4固件主要功能:$ q, x& y7 u/ i0 s
CPU2(CM4)初始化OpenAMP MW,后者通过HAL初始化/配置IPCC外设并设置openamp-rpmsg框架基础结构! K9 L, d5 s/ D, R1 Y0 O9 u
CPU2(CM4)为2个虚拟UART实例(UART0和UART1)创建2个 rpmsg通道& H1 G" @8 M* {
CPU2(CM4)在这两个通道上等待来自CPU1(CA7)的消息* i0 m4 x3 Q* D( D. e2 U
当CPU2(CM4)在1个虚拟UART实例/ rpmsg通道上收到消息时,它将消息发送回同一虚拟UART实例上的CPU1(CA7)
2 h* Z# p& Q2 Q/ ]7 _加载完固件后,重新打开STM32CubeIDE的串行控制台。
, p5 U" e3 F" ^, n5 a9 [ 16.png 0 a, R6 f; h# M; x* J7 ?
输入以下命令
& V6 w  l: N& s; I* d% Q, p5 e, \- {; Z' L4 X. U# k
初始化ttyRPMSG0配置
+ q& O* p% M( X& z) ?
! |9 A& p2 ^$ R3 \+ `+ `, K
stty -onlcr -echo -F /dev/ttyRPMSG0
& f1 h" j* G9 j) e) J3 z8 I3 n; s不断读取ttyRPMSG0通道4 R% N7 c" S) d* N1 u$ Z0 c
0 T% }, Q: C$ u+ Z
cat /dev/ttyRPMSG0 &
5 _+ w. L$ j. F! ^在一个ttyRPMSG0通道上发送消息”LED ON”或”LED OFF”可控制开发板上LED灯点灭状态,并在同一ttyRPMSG0通道上同时接收回显
  Z  l" A) Y6 J. p5 U) e 17.png # }9 |' l7 i2 X

$ |& {7 I- A# S- p+ {' ]
收藏 评论1 发布时间:2021-6-1 17:21

举报

1个回答
寒门过河卒 回答时间:2021-6-11 10:45:04
/dev/ttyRPMSG0和/dev/ttyRPMSG0是linux内核的驱动?是否在linux中编译?另外连接的stlink进行m4内核下载,M4没有对应的flash,怎么断电保存?" v: `2 {* u" [4 H0 ?

所属标签

相似分享

官网相关资源

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