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

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

[复制链接]
STMCU-管管 发布时间:2021-6-2 14:16
继续研究STM32MP157C 开发板,程序员研究开发板和教师不同,不会面面俱到,往往是带着问题去寻找解决之道。
3 q8 \2 S5 `, |5 B1 e+ _& C- y& ?! a8 m2 ^' B! ]* W% v
1 D; N& @. V. ^9 L
实现了交叉编译cortex-A 的应用程序之后,下一步需要搞定两个问题
# M9 ]8 J( v! t6 t0 [  S
·M4 程序的开发和下载,6 V% Z4 ^' H) L% v3 V
·cortex_A 处理器和cortex-M4 之间的通信
' k! t: Y/ c. C& A% ^- a
毕竟,我们是冲着异构处理器架构来的。' q( f% W$ C+ M( I+ u

5 d9 G2 a8 D, e: F
: l  K9 W& y; d# f
本文参考:STM32MP157——Remoteproc和RPMsg 一文1 u2 ]4 ?# x3 \4 P; `! S2 M* n; q
" Q3 U9 h2 \' u1 S% w
# [# Z% }; p/ @, d* ]* J* w# F
1.生成M4固件- E; |4 i3 F% a$ p
理论上M4 的编程和普通STM32F系列程序设计没有什么大区别,唯一不同的就是处理器上接口的配置。
% _# a" ?7 p+ t) b 1.png
/ b; s3 I" O# |, Z$ D   可以使用STM32CubeIDE来配置M4的引脚,并且开发相关的应用程序.
; ^" e7 _; b4 K# z! O" s! S8 f1 A$ O/ X- K  K1 L
2.M4固件的装入方式6 G1 H( J8 H$ x
M4 固件下载的方式有两种
. R9 j$ N, S; k& ?2 P) t- F% \8 V' d/ d8 a( R( y
- r) K0 j" X4 h7 \- v
工程模式(Engineering Mode)
9 S' l  D, y) p3 M; b; _% a, @- A8 Z/ f9 }+ a/ Z# R3 u( \( B

/ f% {. I7 f* R( [, y类似于使用ST-LINK仿真器将STM32单片机烧录到RAM,适用于M4上电启动模式,无需加载A7核。因为烧写到RAM里面,所以掉电程序会丢失,一般用于调试。。
! _& L! b& R4 k6 l  b- v6 q3 }4 B+ S' `7 j

: y  G1 @0 y, i9 [产品模式(Production Mode)( H9 |1 ~0 K: I
) ~$ U9 v5 U6 b  ^

3 d: p% h- h$ T" D# P   M4 的程序存放在A7的 linux 系统的文件中,A7核先启动后,通过remoteproc 的软件引导M4核启动,固件加载执行。1 o2 o! Q% `" l( G

8 c5 d7 L* F. E. m
7 ?, y. S6 ?( ?0 g& |
我更倾向一开始就直接使用生产方式。3 ]& F8 k5 q# t- z3 u

. y; t% D2 v: K- ?. _
2 D% z( `4 f6 A8 }# }* l; Y9 a3 s
3 remoteproc 机制
  _6 u0 @* r) V8 T* ], f  Remoteproc(Remote Processor Framework),主要作用就是对远程处理器(也就是M4)的生命周期进行管理,即启动、停止远程处理器。
9 I5 K* i# }$ H4 W. ^' | 3.png
: H4 |1 f( W$ W' a* g/ F 实际操作时,可以使用开发板上现成的linux 命令行来实现。state powering 等等。在米尔开发板中使用fw_cortex_m4.sh
6 F; |% H5 y* |/ W9 O( O) [( _5 C. G$ @4 X/ h7 f0 X" Y
4 P' g  R- S; f, N9 `1 f% H
不过,米尔科技开发板上相关的文件目录和其说明书不同,埋的够深的。
! b9 G  Z9 |2 ?. J: ]- G( n' W8 D' I) `

% a5 s9 h/ `, x% Zroot@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls
. A- p+ V( V# g+ j+ R, _README        fw_cortex_m4.sh  lib
0 E* E+ X4 H: ~1 G' q而且在lib 中已经放置了OpenAMP_TTY_echo.elf 文件,倒也是满贴心的。2 x( y" J  l/ d' u; |6 l: V/ w
% `% Z5 Z9 J* T
) ~4 f, X7 H7 @7 `7 ]* N3 Q5 }
4 cortex-A 和cortex-M 之间的信息交换RPMsg框架
) H* y) Z( l) K% I$ R  |两个处理器之间的信息交换是使用RPMsg框架来实现的。
9 ?; @/ [+ S8 S. y  n% y: L' b- J 2.png : m9 B  |1 |5 \
从图上看,进一步地是采用openAMP 来实现。ST 公司在A7 端将处理器信息交换仿真成为一个TTY 终端。而在M4 端仿真成为虚拟UART 。于是,两个处理器之间的通信变成了串口通信那么简单直接。只是这个串口的速度非常块,因为他们完全是在内存完成的。& e6 ?1 p, s9 k, l; ]+ n
$ W9 [& {7 d5 }2 w3 J
. Z, Y. T) b8 w
5 测试
8 b/ o. H% y! m先要运行fw_cortex_m4.sh
+ o6 `  X6 ]6 n- Y# p1 M6 K
  1. , ?' j7 M1 n, d' @7 U3 \
  2. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ./fw_cortex_m4.sh start
    $ n: B* j& D5 `8 ]2 H# [2 V& i
  3. fw_cortex_m4.sh: fmw_name=OpenAMP_TTY_echo.el
    - s  U6 m% F3 b) e) L, l' q
复制代码
才能在/dev目录中看到ttyRPMSG0和ttyRPMSG1 虚拟终端。8 l) Y# @5 |$ Z8 q% ]
  1. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls -l /dev/ttyRPMSG*4 {: J1 \, n/ R2 s! u4 e& }8 x
  2. crw-rw---- 1 root dialout 5, 3 Apr  9 11:50 /dev/ttyRPMSG0
    . P5 `- P8 d3 f* f
  3. crw-rw---- 1 root dialout 5, 4 Apr  9 12:56 /dev/ttyRPMSG1
    5 o+ w& C: L/ |  Z& [4 M
  4. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG0) ?+ }( w" p+ c+ c4 t: X, {/ ^
  5. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG0 &
    , A# N' n, h6 A; ]2 u
  6. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG11 U9 j8 f# E: A; z" q: i" Q7 c
  7. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG1 &
    $ i  g8 ^8 c, w& H+ X/ |2 j% o
  8. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART0" >/dev/ttyRPMSG0
    % H4 M3 Z) B; s, c% F+ A  L
  9. hello virtual UART0
    7 z# @3 i5 m% |4 a$ r! ]6 }
  10. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART1" >/dev/ttyRPMSG0" J* y. o3 d9 N" ]
  11. hello virtual UART1( ~$ f! W; Q) M: L8 `# C9 ^
复制代码
就这样了,下面测试STM32Cube IDE 编译M4 程序。
) e7 i" e- z0 \; b  L* B* j. U+ n7 ~7 ]
) w2 e7 ^/ b% O, n9 `
文章来自:姚家湾
+ w1 l9 v7 d9 q4 h. \9 s- y, I+ f9 A8 |, i, }
收藏 评论0 发布时间:2021-6-2 14:16

举报

0个回答

所属标签

相似分享

官网相关资源

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