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

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

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

- ]% g  j5 m$ Z6 T1 {- |, N那STM32MP1系列,A7和M4是如何进行通信的呢?
- p+ D* q$ x* P+ G
; [# J1 ^# {. @% J, G( T9 v! W8 E& g简单的说,A7和M4两个核心的通信,是通过底层的IPCC控制器(Inter-Processor communication controller)去通信的,linux中使用RPMsg框架与用户进行交互。1 S7 P+ I0 x+ W

8 s  Q% P- ~" U, \: C* A) YRPMsg框架(Remote Processor Messaging Framework)是实现对远程处理器信息传递。它是基于VirtIO的消息总线,允许内核驱动程序与系统上可用的远程处理器进行通信。/ c  j% I& H7 o

7 @9 ]* C7 N2 wSTM32MP1多核通信框架如下图。9 M! r  b) e/ l* T& p3 n
1.png 2 I$ L' }, Q* ?7 |( }; Z
A7在RPMsg和Virtio框架创建一个面向用户态的/dev/ttyRPMSG接口,ST提供OpenAMP相关库,M4在OpenAMP上创建虚拟串口,两个内核之间通过串口通信模式,速度非常快。; c; e( p: x6 P# P0 ^9 b* _

& O+ E1 e  r+ x0 gLinux系统都封装好了,ST官方提供的内核已经默认配置了RPMSG_TTY驱动,这个环节我们就不需要做什么了。
' x' d! _: ^( {$ c5 l

9 Z# X: ?9 W# Y下面我们就通过七个步骤来实现A7和M4之间的通信。8 `3 H, V% `6 }2 ?! u1 V

, A$ p3 p$ k) k1. 启动STM32CubeIDE" Q: Y: U/ u% O) d0 J0 k
2.png 3 p6 Q, k: R+ H: ]4 u6 P8 K. @
2. 导入已有工程2 ]- w5 i4 @# m7 W4 K7 E; p
点击File->Import…,选择Existing Projects into Workspace,点击NEXT。
' w1 C) P5 W  C  T  n 3.png 3 n# f% A; l2 O4 u# c$ a, \( r' Q
浏览目录选择工程OpenAMP_ TTY _echo,光盘路径为:
& o) G* z* u! @: Q6 _$ z, s) \% ^( m: a8 i! |# Q+ t. f
【华清远见-FS-MP1A开发资料\02-程序源码\ARM体系结构与接口技术\Cortex-M4\STM32Cube_FW_MP1_V1.2.0\Projects\STM32MP157C-FSMP1\Applications\OpenAMP\OpenAMP_TTY_echo\STM32CubeIDE】: [$ k3 @( u# r- a7 r! C, \
4.png
+ f" B' m& a# v. J& p6 A1 Z3. 编译工程/ ]2 ^4 t) b( x5 a1 p$ y
选择项目OpenAMP_ TTY _echo_CM4并单击Build按钮# m! l: u5 R. Y# N# [
5.png 6 V6 W! f+ }' F4 D
4. 开发板连接
. l- s+ D* Z" Z( c4 ~这里使用的是华清远见FS-MP1A开发板。% v) o7 q) c4 _
4 J8 s3 y6 S. v1 F0 z; y8 w
确认开发板已烧写系统,可运行linux,启动拨码拨至010。* v* _& _8 J% M3 X: l4 {3 O
6 i) ]( |2 A9 n( R7 N9 ]1 E
开发板上电,并如下图连接开发板USB和ST-Link至PC。- Y+ A9 f+ @- B, W
6.png
5 B0 p. `1 I6 t1 W+ `% _可通过点击STM32 butterfly按钮来打开串口控制台$ C/ h5 A) b. V1 t
7.png ( s1 z5 A, S( x. U- E
如果控制台窗口显示linux日志或提示信息,则连接成功- ~; Z4 Q; |9 v2 @2 o9 u! j
8.png
  W: B9 B, o0 F- X' c/ _) d& G5. USB虚拟网线网络配置, o: Q  R) R$ L: E3 O
打开控制面板的网络连接界面,在使用USBmini线连接开发板和PC后可以在网络连接界面可看到多了一个Remote NDIS网卡,如下图。* C2 r5 T1 n4 d
9.png * b. S0 ]! k. [% T3 Z. i
选中Remot NDIS网卡,右键选择属性,配置IPv4,选中后点击属性,配置IP地址为192.168.7.100,如下图。( ~* F; N8 y4 L" T4 U. z, i
10.png 5 N+ D% \/ S- m9 W  q
6. 下载固件
' g5 Q& P: U) h选择项目OpenAMP_ TTY _echo_CM46 Q% z8 {4 @$ Z- _
/ w: J% a7 p3 [8 C; m2 a
/ ?3 R! A6 O" d  R7 F; i
选择Debug按键
5 `6 F5 X% l! T" p* o/ p" @3 _0 M 11.png   E8 K  i+ |1 ^7 q
选择STM32 Cortex-M C/C++ Application
3 J  v) E1 f, r, b3 q" w7 y3 w* l$ p  ~8 J$ R
调试器 下选择thru Linux core(Production mode)
5 H* u+ b) G6 t  O1 `. r$ \9 U) s( s0 _
选择Serial Port,可打开设备管理器查看
& F1 H( O7 L  Y5 d# }6 _: r
4 s6 q! Z+ @6 Y2 v; e2 _# M检查IP地址,可通过串口控制台输入ifconfig指令查看usb0网卡IP地址8 m. U5 e; i! i" U

* E2 Z5 U4 F1 n1 F% C# e如下图,配置完成后点击Debug
5 l1 w* q/ W  v- b0 X 12.png 5 G& _+ M9 c$ F1 G. ?8 @7 N0 x& t
提示关闭控制台,点击Yes7 N7 V; P+ W. j( ~9 E
13.png
9 W% g% ]2 q! q. n, S' J弹出如下窗口,默认无密码,直接点击OK. S' x/ r% Q5 t4 \+ [2 l6 Z
14.png + V9 a" \  A! @+ @
点击Switch
0 S% J/ t2 S  j) q/ S 15.png
- C4 c. `! c/ s) H! p% a3 x" W7. 测试固件' x6 i! b2 Z* x3 e; l# Y
OpenAMP_ TTY _echo_CM4固件主要功能:( I" t" x* p$ K7 {# J3 `- W7 B/ x
CPU2(CM4)初始化OpenAMP MW,后者通过HAL初始化/配置IPCC外设并设置openamp-rpmsg框架基础结构% ?' f" S' Y% l) x5 V
CPU2(CM4)为2个虚拟UART实例(UART0和UART1)创建2个 rpmsg通道
$ ?  w1 r9 [0 `$ WCPU2(CM4)在这两个通道上等待来自CPU1(CA7)的消息
- v# s$ Z! [! Y! B2 y9 O) r$ S当CPU2(CM4)在1个虚拟UART实例/ rpmsg通道上收到消息时,它将消息发送回同一虚拟UART实例上的CPU1(CA7)
" o* ?; W) U0 ?$ N加载完固件后,重新打开STM32CubeIDE的串行控制台。6 w$ l+ p0 l! A. Y
16.png 5 M4 U" w2 c/ ?' a; y+ h
输入以下命令
8 w5 I0 y' m9 r/ A- a4 G5 F2 S$ T8 e7 M2 Q+ i
初始化ttyRPMSG0配置' v6 L! Q. k, K' r; |7 `( W

1 e- o  T) R) R9 t  \6 w  _- lstty -onlcr -echo -F /dev/ttyRPMSG0
% F$ y3 E& \& B- A不断读取ttyRPMSG0通道" F: r' f* V! e7 V. r4 b/ s6 ?

: g$ D% n4 _- N9 p% \/ F3 m7 Ecat /dev/ttyRPMSG0 &- X& s8 V8 ?& @) E2 T% S/ m; t
在一个ttyRPMSG0通道上发送消息”LED ON”或”LED OFF”可控制开发板上LED灯点灭状态,并在同一ttyRPMSG0通道上同时接收回显
/ `# F1 F, V: p, P) z/ J) J 17.png
# E2 {* J/ q9 d- C' K
' M/ E9 X" X) U# J
赞 收藏 评论1 发布时间:2021-6-1 17:21

举报

1个回答
寒门过河卒 回答时间:2021-6-11 10:45:04
/dev/ttyRPMSG0和/dev/ttyRPMSG0是linux内核的驱动?是否在linux中编译?另外连接的stlink进行m4内核下载,M4没有对应的flash,怎么断电保存?
7 Q- U3 R4 l5 e/ L  C

所属标签

相似技术帖

官网相关资源

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