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

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

[复制链接]
STMCU-管管 发布时间:2021-6-2 14:16
继续研究STM32MP157C 开发板,程序员研究开发板和教师不同,不会面面俱到,往往是带着问题去寻找解决之道。1 H( x/ I4 ^& ^: }( S; t

# ?( _6 I- W/ L/ I% c$ A
6 f& R( ?! ?0 _5 F- b
实现了交叉编译cortex-A 的应用程序之后,下一步需要搞定两个问题3 W6 F) k7 g8 }2 {+ N8 a8 K0 r7 H
·M4 程序的开发和下载,3 F$ r( s- l- R3 Q  G8 m
·cortex_A 处理器和cortex-M4 之间的通信

% ?+ ]) ^' O" n) w% ]2 W毕竟,我们是冲着异构处理器架构来的。- U2 X7 j8 h1 j% S+ @9 w
3 v/ Y% ~: F; e5 }: j# o0 j. b4 Z7 {

# z: p8 n2 m7 r7 K1 h" V1 G本文参考:STM32MP157——Remoteproc和RPMsg 一文! _% ?) }  I, o

5 j  F5 z6 v4 V% u9 L2 ^5 R9 {& d

4 u1 `+ }3 y/ V1.生成M4固件! z' Z' [' F8 t. @" i
理论上M4 的编程和普通STM32F系列程序设计没有什么大区别,唯一不同的就是处理器上接口的配置。( \4 i1 K: P( C0 j4 E8 Y
1.png
& Q5 ~/ ]- Y$ Z; M& x  z8 u* P   可以使用STM32CubeIDE来配置M4的引脚,并且开发相关的应用程序.# }2 P8 x' T' z6 X* n

: J: l1 h2 L7 h  C2.M4固件的装入方式
! A- a' Q+ V% B+ fM4 固件下载的方式有两种1 [% n# t0 ]6 p; q8 M0 n

  d, M$ e1 J* f, a- a. h" S9 V4 |
% _; [. M9 u  i( P$ k+ g
工程模式(Engineering Mode)
; S! s+ D1 A: W+ T
, z1 _5 t! c+ a) Y
+ o, y; \! U2 v; c3 m& z
类似于使用ST-LINK仿真器将STM32单片机烧录到RAM,适用于M4上电启动模式,无需加载A7核。因为烧写到RAM里面,所以掉电程序会丢失,一般用于调试。。
! J+ E) V$ R" D) g( Q
* |& j) W; h- R  ]5 I/ x
9 T9 D  a+ h+ o9 r6 l
产品模式(Production Mode)7 H! t% P  s3 l+ }$ P) T3 \! _

# Z# O& b. s* S" l* Q

" C3 E- s) X- c2 t   M4 的程序存放在A7的 linux 系统的文件中,A7核先启动后,通过remoteproc 的软件引导M4核启动,固件加载执行。& F: x  T& n/ n

4 C$ S$ d; o4 p8 L5 k
. h7 V4 @$ O* p6 l
我更倾向一开始就直接使用生产方式。; a2 W$ Z6 Z+ x  }& f8 l; z
; l7 a, Q! ^; U. J; ?- t( ^: _7 f
1 s9 P0 G9 I4 R- H6 l  U
3 remoteproc 机制3 B( \" J7 Y# n* e1 k4 [
  Remoteproc(Remote Processor Framework),主要作用就是对远程处理器(也就是M4)的生命周期进行管理,即启动、停止远程处理器。
# Q1 |# Y9 Q8 h4 c* h; d  Z 3.png
- m7 n6 [# ^5 M7 i- w 实际操作时,可以使用开发板上现成的linux 命令行来实现。state powering 等等。在米尔开发板中使用fw_cortex_m4.sh9 i2 \1 f! |7 N- {+ H" Z9 S4 y
: Q4 @/ a3 Y3 w9 E% h- T$ H+ ?. Z
6 W4 J; j: G5 d! j0 G) ~
不过,米尔科技开发板上相关的文件目录和其说明书不同,埋的够深的。9 u* S# T; k5 J
2 ]6 i+ G1 i/ Y+ s1 d' g) ]
! A, J: C% ^' d7 G, f
root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls
- ~( v+ u* V, o( c  g" tREADME        fw_cortex_m4.sh  lib1 L' [: a. [; \* o9 s
而且在lib 中已经放置了OpenAMP_TTY_echo.elf 文件,倒也是满贴心的。
9 `$ O& c! }9 ?
+ `6 E# h; ]5 x8 s. K/ I8 ^$ Z' z1 [

& {( C& Y7 w+ _1 Y4 cortex-A 和cortex-M 之间的信息交换RPMsg框架& I/ [$ u7 ^$ }$ r
两个处理器之间的信息交换是使用RPMsg框架来实现的。% h+ _8 O. V. E
2.png
9 N1 h9 D  a8 [& G1 P3 j从图上看,进一步地是采用openAMP 来实现。ST 公司在A7 端将处理器信息交换仿真成为一个TTY 终端。而在M4 端仿真成为虚拟UART 。于是,两个处理器之间的通信变成了串口通信那么简单直接。只是这个串口的速度非常块,因为他们完全是在内存完成的。2 I2 }# d' p& e. s) U
$ C% j0 x/ F+ u
( h( O( T/ P2 j9 P
5 测试( \; J+ \$ _% o" Z: O) r; T7 |( W- K; S
先要运行fw_cortex_m4.sh" q  c9 o3 t$ E# H( a

  1. ( B6 I) V6 ~1 v- J  }+ `$ P! K
  2. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ./fw_cortex_m4.sh start( [8 K; c) }1 x7 k6 Q
  3. fw_cortex_m4.sh: fmw_name=OpenAMP_TTY_echo.el
    4 A1 g  y6 y, g; d, a% m1 t, |& q
复制代码
才能在/dev目录中看到ttyRPMSG0和ttyRPMSG1 虚拟终端。
1 N, W# m* k: W' s: T. T
  1. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls -l /dev/ttyRPMSG*
    - S  m6 |3 V/ f  Q. D
  2. crw-rw---- 1 root dialout 5, 3 Apr  9 11:50 /dev/ttyRPMSG0# C! H- {+ v) W( z  o$ v
  3. crw-rw---- 1 root dialout 5, 4 Apr  9 12:56 /dev/ttyRPMSG1( |" Z8 x+ F' w  x& @6 K
  4. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG0  x2 C- ^: q9 w0 ~* T& ?
  5. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG0 &
    - z/ j/ M( o( n) o. Z
  6. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG1
    4 k$ ?. X, h$ f9 {. j) \. k
  7. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG1 &, v* a- r' E# ^! y9 Z
  8. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART0" >/dev/ttyRPMSG04 t0 Z2 s% H* @2 g/ H8 B' V
  9. hello virtual UART0
    - ^" K, {0 E. n0 s1 v$ t% [% @
  10. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART1" >/dev/ttyRPMSG0/ @5 ^) o  |5 y
  11. hello virtual UART1
    5 I1 n; H: L& P
复制代码
就这样了,下面测试STM32Cube IDE 编译M4 程序。
* K- G) M: g" s* O/ K# K, k2 V  [6 q8 m+ }+ H8 c

& X1 @* ]# `; L' `文章来自:姚家湾
0 J. I2 F# n: F) Y, D" m6 v8 v0 q) W2 s# Y
赞 收藏 评论0 发布时间:2021-6-2 14:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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