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

STM32MP1的M4 固件装载和双机通信

[复制链接]
STMCU-管管 发布时间:2021-6-2 14:16
继续研究STM32MP157C 开发板,程序员研究开发板和教师不同,不会面面俱到,往往是带着问题去寻找解决之道。
- c2 h# N. r/ e, W9 ?/ E
! X. _" |- B0 u2 L& H' t2 _0 l* k
  H# U$ Z+ S7 Q* i5 b0 A
实现了交叉编译cortex-A 的应用程序之后,下一步需要搞定两个问题
" G3 k4 H  d5 l; }7 c) ~
·M4 程序的开发和下载,
5 F# _' g) i, ]. ]+ Y& I, w·cortex_A 处理器和cortex-M4 之间的通信

: ^# L" N7 e2 h3 n- _% c. y毕竟,我们是冲着异构处理器架构来的。
' W( h4 R* d0 `% N8 M% U( X/ I4 @# M* Y

2 \. Y) M$ ]3 C; o; F本文参考:STM32MP157——Remoteproc和RPMsg 一文
$ |: Z9 T! [5 k# q0 F  Y4 S) A1 T5 s/ T
4 _9 j5 h% W$ C& ~
1.生成M4固件6 U' p1 y8 K6 S
理论上M4 的编程和普通STM32F系列程序设计没有什么大区别,唯一不同的就是处理器上接口的配置。
: J+ |9 o0 r$ k9 @! u! q. q9 X7 l 1.png
+ e* V/ ]5 u* {8 _2 ?, H   可以使用STM32CubeIDE来配置M4的引脚,并且开发相关的应用程序.
. d/ [# R8 k; A8 H5 Y* P0 y% e9 K. u6 C/ n6 c" l4 P0 c5 V
2.M4固件的装入方式
. K3 ~+ m( j" x" e2 X# S* C- eM4 固件下载的方式有两种3 a$ m. t8 i2 E6 q3 W
/ W1 j! P" [" b: J1 ^! b% W6 @

4 V1 \. H: M& [3 D- ^  u' b工程模式(Engineering Mode)
( I  m7 }0 b' c
+ ~" y2 E% A5 s. a! W0 m

$ q! I  m4 ]  c) S' p. M" a类似于使用ST-LINK仿真器将STM32单片机烧录到RAM,适用于M4上电启动模式,无需加载A7核。因为烧写到RAM里面,所以掉电程序会丢失,一般用于调试。。6 h0 `: b9 |# b0 v

+ ?6 G( B; K: u" z

8 O( Y7 Z: J; X$ |2 G5 M4 ]产品模式(Production Mode)
- j5 y3 E! H( l5 B/ c7 G# B9 w6 x1 l6 m
3 _2 z- ]6 ?" Q0 q
   M4 的程序存放在A7的 linux 系统的文件中,A7核先启动后,通过remoteproc 的软件引导M4核启动,固件加载执行。# C2 d7 v# @( w: `

* X9 h9 `- g% g( L5 d. z0 s/ D" t

8 {0 M9 w% ?8 e- ~! \' j  U1 F1 P我更倾向一开始就直接使用生产方式。+ l4 U) X# s8 C8 G
6 L( l8 V( ^9 X5 ]' d6 R
; k  t* y: x: [; A3 H
3 remoteproc 机制4 s9 m9 Q1 _( [. B4 [/ C- b" ~  x
  Remoteproc(Remote Processor Framework),主要作用就是对远程处理器(也就是M4)的生命周期进行管理,即启动、停止远程处理器。
9 \2 S+ |- m$ |; T1 Q) d 3.png ! R' P) q3 q2 R5 O+ c$ I
实际操作时,可以使用开发板上现成的linux 命令行来实现。state powering 等等。在米尔开发板中使用fw_cortex_m4.sh& Z, S3 w* h" T! H6 L

) u8 E) |- ]$ R& o* W

# y3 N  k9 L& q- d不过,米尔科技开发板上相关的文件目录和其说明书不同,埋的够深的。; j- u% t. ~3 t7 G) s1 G* L
, W9 z0 |# n2 l* u. ]
% Q5 b* D' A& f4 I
root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls
' E+ ^3 m5 p; V) \& K% T2 iREADME        fw_cortex_m4.sh  lib/ L* z* y6 ?# M
而且在lib 中已经放置了OpenAMP_TTY_echo.elf 文件,倒也是满贴心的。
* S9 m+ P' R) C9 D, ]) P6 g4 ?% R/ f4 z& A1 b. W
' Z8 D6 L* G* g& e4 p1 _. y/ ]
4 cortex-A 和cortex-M 之间的信息交换RPMsg框架1 L! j5 t6 }2 L  Q; t, Q7 ^. }
两个处理器之间的信息交换是使用RPMsg框架来实现的。3 {( l& X# P& L7 ]
2.png
& S: q9 L3 {2 }8 i; o: M/ k从图上看,进一步地是采用openAMP 来实现。ST 公司在A7 端将处理器信息交换仿真成为一个TTY 终端。而在M4 端仿真成为虚拟UART 。于是,两个处理器之间的通信变成了串口通信那么简单直接。只是这个串口的速度非常块,因为他们完全是在内存完成的。+ N* D; P! W; o& C2 K/ ]. I3 P. L
0 o3 b8 ]! i% v) E/ `
$ D! d* C% c' Y4 K% N6 H5 A
5 测试
. \; D% n1 O# r$ g0 U" y' y先要运行fw_cortex_m4.sh, W& U5 V( I4 `3 _: q. X
  1. ! r6 d! s7 M8 o; P; Q, @9 C
  2. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ./fw_cortex_m4.sh start
    - I+ ?. N" ~0 T$ u  k1 Y  r3 O) ?
  3. fw_cortex_m4.sh: fmw_name=OpenAMP_TTY_echo.el
    2 |  W4 i/ i$ A2 B" G
复制代码
才能在/dev目录中看到ttyRPMSG0和ttyRPMSG1 虚拟终端。* G# }9 X8 h4 l8 s4 J
  1. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls -l /dev/ttyRPMSG*
    % m* w6 j7 Q8 Z# p9 y, {
  2. crw-rw---- 1 root dialout 5, 3 Apr  9 11:50 /dev/ttyRPMSG0
    7 e! Z1 t! _' Z1 B, M2 B5 X
  3. crw-rw---- 1 root dialout 5, 4 Apr  9 12:56 /dev/ttyRPMSG1
    4 H9 j( O8 [# _
  4. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG0; r2 j9 z: ~. v% I
  5. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG0 &
    7 B% h# W& }3 z0 m& r8 N" G
  6. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG10 Q# v4 ^4 B4 G- n
  7. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG1 &# r# _, D8 N5 x0 b) |8 Y5 z" u4 B
  8. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART0" >/dev/ttyRPMSG0
    3 [( o0 H- y/ `; ^8 A) H. M
  9. hello virtual UART0
    , w2 `( z3 `" z9 @6 r, W, n
  10. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART1" >/dev/ttyRPMSG08 l' ?* D; H/ [
  11. hello virtual UART1% a4 S' J; n$ l  O4 K% T
复制代码
就这样了,下面测试STM32Cube IDE 编译M4 程序。
( ^  r7 Y! t8 N5 G, P/ P4 y5 s: q- a6 w  ]! ?. u  `' L
: W) A( E1 \' G0 l
文章来自:姚家湾! `  K7 v- S7 H) ~- q

# z: x3 m5 o( m& ~4 \
收藏 评论0 发布时间:2021-6-2 14:16

举报

0个回答

所属标签

相似分享

官网相关资源

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