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

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

[复制链接]
STMCU-管管 发布时间:2021-6-2 14:16
继续研究STM32MP157C 开发板,程序员研究开发板和教师不同,不会面面俱到,往往是带着问题去寻找解决之道。
0 U' ^$ b: [( w& P% z9 m: I& x# M  y' a

) K8 {) y6 s" {/ \3 G实现了交叉编译cortex-A 的应用程序之后,下一步需要搞定两个问题' O+ {3 n% u3 h8 o; E
·M4 程序的开发和下载,
; w: D1 O9 r1 ?- S( }3 K& _( Z* ~·cortex_A 处理器和cortex-M4 之间的通信

  v! m( U6 L, F7 e- n0 r8 `8 p毕竟,我们是冲着异构处理器架构来的。! |0 V( z& v2 w% j: a
+ ?/ ~. o, Q' c' F" N! k' a, \
% J# C7 B4 B8 O4 K. L
本文参考:STM32MP157——Remoteproc和RPMsg 一文8 C9 W8 u# G) x; h; d, w/ G

7 j  ]6 f; h4 _: @) {* f/ q  Z+ x

- ?( b; T* l! Z9 b: q/ y1.生成M4固件6 w4 K, c2 ]' r8 b: N7 c
理论上M4 的编程和普通STM32F系列程序设计没有什么大区别,唯一不同的就是处理器上接口的配置。4 b9 S# V. U  ?: P6 Z5 |- \' E
1.png / N4 m: W# H0 ?, w. b
  可以使用STM32CubeIDE来配置M4的引脚,并且开发相关的应用程序.
# e/ e  M3 M5 A- H. M8 Z) Z" E# U  e9 q$ n  o
2.M4固件的装入方式+ {* Y8 ~; ~0 b1 o6 r& i( l
M4 固件下载的方式有两种
1 L# l6 p- f# K# t+ V& U, i; v# u% o$ m: ^7 N. ~

0 u1 C/ h8 S& V# K8 R2 @" t/ G工程模式(Engineering Mode)) m2 m/ v) h9 P1 \2 {

& h- ~  y* o4 [6 V4 C1 j

( c+ Y# O! N& b. [  q+ b( R, B类似于使用ST-LINK仿真器将STM32单片机烧录到RAM,适用于M4上电启动模式,无需加载A7核。因为烧写到RAM里面,所以掉电程序会丢失,一般用于调试。。8 U' z8 F4 o5 f7 E

& H+ ^- \, f) u. ]) f
& s# s" A  D# G0 W1 X
产品模式(Production Mode)
  Z$ x* y$ S, o; D( ?
+ E# ^5 H4 t; ]4 q
# N( n: M) C* K# X% K
   M4 的程序存放在A7的 linux 系统的文件中,A7核先启动后,通过remoteproc 的软件引导M4核启动,固件加载执行。
- H1 Q7 _8 r' c6 U) t5 p' w) y! v$ U& B8 p& O
0 F& U( i' }- L+ U' W4 h$ `0 K$ x
我更倾向一开始就直接使用生产方式。
' W, V* C9 {; V# t. k( B
: d% r6 n% O2 d. B* ~

: k+ f; G9 {; u9 @6 Y( G" p( t3 remoteproc 机制
0 R& U' p2 ~2 Y  Remoteproc(Remote Processor Framework),主要作用就是对远程处理器(也就是M4)的生命周期进行管理,即启动、停止远程处理器。
- X+ y# \. r, j" @1 n' I1 @ 3.png 9 U+ l: ?2 R7 ^" P, O6 C8 m9 h
实际操作时,可以使用开发板上现成的linux 命令行来实现。state powering 等等。在米尔开发板中使用fw_cortex_m4.sh- @4 u! J9 B, y& P& }0 A( U+ }  U! P

% S1 Z$ Z3 X# h+ R* K# J
( ]- ?: J/ D+ t+ a/ X
不过,米尔科技开发板上相关的文件目录和其说明书不同,埋的够深的。
  |$ o$ Y3 }/ K& c8 F4 G' j( ]

6 V8 V3 X1 h. f. `5 R5 qroot@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls
4 \. [5 k) G0 w$ M' ]2 v' t- IREADME        fw_cortex_m4.sh  lib) x) h* O- Y" `; `3 ^
而且在lib 中已经放置了OpenAMP_TTY_echo.elf 文件,倒也是满贴心的。
  y& T) ?! I( Q# r, N7 f/ i- X8 w: v  p$ H% i/ [4 Y) Q
+ d  A; S, {1 Z3 o3 g' Y
4 cortex-A 和cortex-M 之间的信息交换RPMsg框架4 ?- H- e5 \0 G( d
两个处理器之间的信息交换是使用RPMsg框架来实现的。
8 s/ Q3 S; ]* U4 b. T 2.png
) a" j! z/ v! G) j" K从图上看,进一步地是采用openAMP 来实现。ST 公司在A7 端将处理器信息交换仿真成为一个TTY 终端。而在M4 端仿真成为虚拟UART 。于是,两个处理器之间的通信变成了串口通信那么简单直接。只是这个串口的速度非常块,因为他们完全是在内存完成的。
7 @6 I) i5 Q! r5 f# b: t  Q' C5 h; m5 i

& @+ H: y" H. N2 b& C: ~+ F5 测试  \7 N7 X  `. }& C6 j
先要运行fw_cortex_m4.sh  n3 ?$ Q2 c3 G

  1. - _% ]2 h; _! A$ L; _
  2. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ./fw_cortex_m4.sh start
    0 E" t% \. \& Z/ k
  3. fw_cortex_m4.sh: fmw_name=OpenAMP_TTY_echo.el
    0 u& X- D+ T( {% x: ?6 G. c2 }4 Z
复制代码
才能在/dev目录中看到ttyRPMSG0和ttyRPMSG1 虚拟终端。
& V0 i  t' S+ b2 Y9 h! L" Z0 y# H9 [
  1. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# ls -l /dev/ttyRPMSG*
    2 b& W+ L% q# S9 D; I. }' ?9 x6 ^
  2. crw-rw---- 1 root dialout 5, 3 Apr  9 11:50 /dev/ttyRPMSG0
    " m* B0 h: k7 j" \
  3. crw-rw---- 1 root dialout 5, 4 Apr  9 12:56 /dev/ttyRPMSG1+ p; r" c/ [: V7 A8 z& m  _
  4. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG0- r& z7 h! }" O! G
  5. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG0 & ; W8 g- i, i% j
  6. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# stty -onlcr -echo -F /dev/ttyRPMSG1# S3 _& V5 c4 E) b$ @) Z) A
  7. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# cat /dev/ttyRPMSG1 &: f/ O3 V( F4 b) u( p2 ?: p
  8. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART0" >/dev/ttyRPMSG0) f7 q/ Z# D4 D! L* Q' ]
  9. hello virtual UART0
    * r+ h8 D* p* W
  10. root@myir:/usr/local/Cube-M4-examples/STM32MP157C-EV1/Applications/OpenAMP/OpenAMP_TTY_echo# echo "hello virtual UART1" >/dev/ttyRPMSG0
      U7 i0 ?; s! F% \' D" e7 E3 B5 o
  11. hello virtual UART1
    - S+ I0 c! ]$ R  c8 g# A
复制代码
就这样了,下面测试STM32Cube IDE 编译M4 程序。
. t. a$ m( l3 z, x. W- U9 x, \9 t) t2 M% u  H7 S& C, I5 t: Q% J

' a! o9 F0 V. M3 K* b文章来自:姚家湾
+ T' V1 t2 m: q' X# E* m2 W+ A/ A: F
收藏 评论0 发布时间:2021-6-2 14:16

举报

0个回答

所属标签

相似分享

官网相关资源

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