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

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

[复制链接]
STMCU-管管 发布时间:2021-6-2 14:16
继续研究STM32MP157C 开发板,程序员研究开发板和教师不同,不会面面俱到,往往是带着问题去寻找解决之道。
+ ?3 J& |: V, }% ?0 ^: X; c! D, k+ G
9 G) O* e  m7 B' g; z$ y8 M
实现了交叉编译cortex-A 的应用程序之后,下一步需要搞定两个问题
4 S8 x  D' e- u" P
·M4 程序的开发和下载,
2 O) i) w0 o/ e1 E. F; p2 b& F% P2 l7 i·cortex_A 处理器和cortex-M4 之间的通信

/ f/ q4 c$ E# X+ Y毕竟,我们是冲着异构处理器架构来的。# _8 k& k! T" f: P0 E
6 }/ {0 q2 ]! w+ @- a# q1 U" s+ {
! `& [& p5 J0 y2 R2 L+ g5 B0 P
本文参考:STM32MP157——Remoteproc和RPMsg 一文5 Y$ o; X6 V% D- u9 U
2 V+ P. u" x6 F* a  V; K
9 D1 M  X  h) i; x3 Y2 r
1.生成M4固件- P: C1 S7 o* X! K) F" b# \0 c3 K
理论上M4 的编程和普通STM32F系列程序设计没有什么大区别,唯一不同的就是处理器上接口的配置。. n# v( ~; y9 Q5 ~9 r! v- C
1.png
* j5 e* A5 H3 x' t% E( o8 x% z   可以使用STM32CubeIDE来配置M4的引脚,并且开发相关的应用程序.
9 ^5 m! U3 w" V# C9 N
6 V8 t0 t6 J  s2 x% s3 q( m2.M4固件的装入方式6 R7 \- M1 U0 ]# Y0 V4 Y5 R
M4 固件下载的方式有两种
% A7 k- I3 O7 X
( M2 I+ d% J( ^5 f, k3 A$ m
$ f7 h9 M" o6 e/ R
工程模式(Engineering Mode)' }* ]; [& ?6 s* L4 Q' D. K
9 {- u$ j1 v) J1 @9 C6 ~
% X7 a% H% x/ P1 B- ^: ?# q
类似于使用ST-LINK仿真器将STM32单片机烧录到RAM,适用于M4上电启动模式,无需加载A7核。因为烧写到RAM里面,所以掉电程序会丢失,一般用于调试。。# p8 c6 Z# Q4 R3 p- O+ p8 F% T. o8 L

6 M6 k# E" B7 K$ W9 t" u4 ]  b6 U8 {8 F

+ ^0 j: r; ]1 c: s产品模式(Production Mode)
) F" b9 \; o0 }8 R7 v7 C+ q: ^- P0 l; O# a3 C7 z* T
/ l& m  W7 q& I( x0 _7 K
   M4 的程序存放在A7的 linux 系统的文件中,A7核先启动后,通过remoteproc 的软件引导M4核启动,固件加载执行。* H: J" F$ X6 k. T2 F

3 J- f' c  Z, Y- i1 S: z0 A- r

4 }6 g+ D1 \! l9 B我更倾向一开始就直接使用生产方式。. @, x. w4 k7 ?. ?0 |2 y0 g* L' ~& h* s

. M# U& f) w& ?8 S7 M4 K

7 R: k4 s, J3 i5 M3 remoteproc 机制9 {" b0 ]$ D6 u" H6 V
  Remoteproc(Remote Processor Framework),主要作用就是对远程处理器(也就是M4)的生命周期进行管理,即启动、停止远程处理器。- X0 {+ u3 g$ S3 T# k5 U7 e8 X
3.png / G$ d8 b1 P& F! f7 ~
实际操作时,可以使用开发板上现成的linux 命令行来实现。state powering 等等。在米尔开发板中使用fw_cortex_m4.sh
7 c  t7 x. c' r, a: `1 \
0 M& g1 Q, `: L6 o' q
6 _5 t2 X# g  P5 E
不过,米尔科技开发板上相关的文件目录和其说明书不同,埋的够深的。
& W& t) @$ E6 J8 J% N- n/ M4 Z( o; x4 `: }9 D
% X+ b6 P% G' }* t
root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls/ L2 Y3 W3 A; Y' v- z5 w) f
README        fw_cortex_m4.sh  lib
" O+ K4 J1 G; u而且在lib 中已经放置了OpenAMP_TTY_echo.elf 文件,倒也是满贴心的。) T; S) ^' @( D+ U+ ]# p
/ y; S- ?/ d# f7 w3 T6 A+ R
- M/ ~& e% J0 ^1 i7 I& @+ L# M. `/ ]
4 cortex-A 和cortex-M 之间的信息交换RPMsg框架
5 e% _# e; |% T$ E! c+ j4 C' ~两个处理器之间的信息交换是使用RPMsg框架来实现的。
9 C! n) x" R8 H( p 2.png
" T8 r! p/ e" N4 ^从图上看,进一步地是采用openAMP 来实现。ST 公司在A7 端将处理器信息交换仿真成为一个TTY 终端。而在M4 端仿真成为虚拟UART 。于是,两个处理器之间的通信变成了串口通信那么简单直接。只是这个串口的速度非常块,因为他们完全是在内存完成的。7 t. q& @2 d- @$ R! {' L# q
) X' K' Y( }" G" R! n
. u2 H9 K$ l) R' `& y+ d
5 测试
8 `& R# ~8 |! z- a- r1 _先要运行fw_cortex_m4.sh
. a" ^7 ]& G  a. @

  1. % E  y+ ^5 z& S0 `  [, J
  2. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ./fw_cortex_m4.sh start
    + L0 M- \  H8 g- L/ f
  3. fw_cortex_m4.sh: fmw_name=OpenAMP_TTY_echo.el$ u7 d5 i; ~) \4 j  S& {' E0 y
复制代码
才能在/dev目录中看到ttyRPMSG0和ttyRPMSG1 虚拟终端。
4 p9 P9 x/ v4 W" l( `) Z
  1. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls -l /dev/ttyRPMSG*0 K0 c, P% a* V: ~5 G
  2. crw-rw---- 1 root dialout 5, 3 Apr  9 11:50 /dev/ttyRPMSG0
    ( Y5 R2 J0 Q+ E; U1 ~4 o( h7 ^: o$ {
  3. crw-rw---- 1 root dialout 5, 4 Apr  9 12:56 /dev/ttyRPMSG1
    3 y  G+ F( S6 c: a4 Z
  4. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG0! E; g8 Q; \8 j4 p9 |
  5. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG0 & - e- r, j/ R& V) F4 [9 [) r
  6. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG1
    & {6 U% B; ]4 b* G
  7. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG1 &: _  l6 i6 F$ ~& p; W
  8. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART0" >/dev/ttyRPMSG09 K9 ^4 [. e3 n" ]& [8 a* }# ?# Q
  9. hello virtual UART0
    $ |1 ?) d6 v( |* g! w
  10. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART1" >/dev/ttyRPMSG0* k$ y( X7 j0 s. R
  11. hello virtual UART1- m1 d7 \4 g3 K- W8 L& ]( a1 K/ p& g
复制代码
就这样了,下面测试STM32Cube IDE 编译M4 程序。
& `* R5 k* Y( c# r8 n+ S; K  _8 g, `" \+ O2 x) X. O5 v
% I" ]+ c4 O& X+ G. ]6 C+ V3 ?
文章来自:姚家湾
& x& z8 f. d; a) V2 {6 @' [
6 e. T: f+ F! _7 q( Q' }% g  j: ?
赞 收藏 评论0 发布时间:2021-6-2 14:16

举报

0个回答

所属标签

相似技术帖

官网相关资源

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