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

STM32MP1启动-嵌入式Linux

[复制链接]
STMCU小助手 发布时间:2022-9-28 19:22
一、概述
% j; J& _( Y! d7 @- S" bSTM32MP1内部没用flash,系统及程序都是存放在外部 Flash (EMMC、SD、NAND、NOR),也可以通过USB、UART启动。
( H% i# X( Z( z& E; T8 @1 e% u* c4 C$ T0 Q9 @' r- L, t. \
启动模式:) d/ p% g/ U/ N0 ]! c

6 |& k% L2 W; a; V4 @8 `' G/ T, @ 8b0cbb43d63a49a399fc39bf7b701c7d.png
$ Z) p  f3 W- G9 J  t: O- h$ |, `9 [/ v# M  ?1 }* r9 \
1、USB 启动8 D9 b# {3 [$ Y: b# _4 l
内部 ROM 代码支持 USB OTG 启动,一般使用 STM32CubeProgrammer 软件通过 USB OTG 接口来向 STM32MP1 烧写系统。USB OTG 需要一个 48M 和 60M 的时钟,这两个时钟由HSE 生成。
% I: }1 n9 @$ V( b, U9 n在自己做核心板的时候外部 HSE 时钟最好选择 24MHz有源晶振,不要特立独行,虽然可以通过修改 OTP 来更改 HSE,一旦修改错误芯片就废了。: R# F/ R" ~( V9 l2 W* [
0 A: X$ K5 u/ w7 a& J% ~3 J
2、UART 启动
) p7 p4 q5 U3 K! U9 X只能使用 USART2、USART3、UART4、UART5、USART6、UART7 或 UART8,此时串口工作模式为:1 位起始位、8 位数据位、偶校验、1 位停止位、波特率 115200。% Z$ Z4 S" x" i2 J

7 B; w% P1 }  |0 [/ t! f9 p 62212756622e4cd6a148f8df8bbe2b0f.png : u0 v; |4 H7 |9 \( O* Y
+ v$ r7 x& s# s! U
13cb93ef732340739596da57e871a1d5.png ; [1 a* S6 C0 J6 M3 U# S& A* M
: Z$ P* U7 L8 z& J$ F
3、Flash 设备启动要求7 X% }/ I% B3 L. u3 H4 ^# v7 Q! K
ST 官方的 Flash 分区建议
8 x0 S8 s- y% J: L- e4 ]: q! `2 L# V) c
: B  |+ i' W+ Y6 |0 l
. j2 A5 X* g: J& b. U. `
二、STM32MP1 二进制头部信息& Y) a$ Y$ ~/ O9 x5 P
STM32MP1 内部的 ROM 代码会先读取 FSBL 代码,一般是 TF-A 或者 Uboot 的 SPL,也可以是 A7 裸机代码。比如 TF-A 我们之间编译生成二进制 bin 文件,但是这个 bin 文件不能直接拿来用,需要在前面添加一段头部信息,这段头部信息也包含了鉴权内容。如下:" n% ?' [' {+ k6 _7 n2 I- A4 n3 W

$ b5 b# v0 D# c8 Z( Q0 v# ~ 233060d1da1444ef855e8334afda5705.png : |( s0 p. L# A$ l; u3 C* D
* X, N3 `! t4 l
头部信息不需要我们自己手动添加,ST 提供了个名为“stm32image”的工具专门用于在 bin 文件前面添加头部信息。
# H  T9 E: Y* y, E; Z在编写 A7 裸机的时候需要自己使用 stm32image 工具在 bin 文件前面添加头部信息。1 T, M+ D4 B5 X0 T7 t
gcc stm32image.c -o stm32image
4 v5 ?9 ^% r; @6 N* ^9 T4 |& u1 Z: @5 a4 Q1 t, p0 f5 O. C7 F/ C
3c7d960cf9a048b4b4f2febfcfdfa0d8.png
5 E: E" {; f2 @6 i- T% j! y; V7 ~% i4 g
: Z5 b# I* z: tstm32image 在使用的时候需要搭配一系列的参数:: f0 j5 H4 F( g
-s:指定源文件。; z' K- y7 d( [/ y0 D$ u
-d:生成的目标文件。4 Y7 _! U5 ]2 w3 e  _% a
-l:加载地址。
$ H8 O" x" h5 r' Z% z4 x-e:入口地址。
6 d# Y7 `  a1 v& z% W9 O6 d6 L. P1 d-m:出版本号。4 [5 Q. E* j* d, h7 V% C
-n:次版本号。  |6 C' |( E9 D  j8 Z, {% z
$ h# |8 z. |: Z! ~/ x
三、 STM23MP1 Linux 系统启动过程: |% U6 V' @( U
MP1 Linux启动流程 :
9 _* G% @8 C7 C! b9 r6 R
, T- V  V2 s) D. C. f 2d7539a48b444ca7a849aa114d7e9fad.png 3 i0 A1 _) a$ A' G9 ?
* w. b$ \2 W: K. ^- f( Y
启动 Linux 内核过程是一个链式结构:ROM Code→FSBL(TF-A)→SSBL(Uboot)→Linux kernel→rootfs。
7 H, f+ A* f  p1 i一般 FSBL 代码是 TF-A 或者 Uboot 的 SPL 代码,也可以将 FSBL换成裸机代码。
! x' m) ?5 I' |- SSSBL 代码运行在 DDR 里面,SSBL 一般是 Uboot,Uboot 会将 Linux 内核加载到 DDR 上并运行。4 G+ s  B" ]" O6 Y0 M$ x+ |$ k( e
Linux 内核启动过程中会初始化板子上的各种外设。+ S8 N' }" K5 d) N; ^7 f2 u7 g) ?

) h  a, q( n3 W% {: ^四、 STM23MP1 启动过程
; f  D( I6 S# Q/ _- R
  i' ?) ^& R0 I a59570d20b0742a4b2468d4d1c1c20b1.png 5 o" B/ v9 Y( L' l
5 M" v0 p0 q2 `1 r
398bbb48b07b41469f93b9217c47d479.png ) y' v( G; R0 @, \0 K

2 O4 ]; F9 j8 j3 L/ d+ J/ W 6e6f8e56e2264890979c914ad4ffb37c.png   h/ {2 ^( z1 M" I' q* j
, h3 r. {) e( l9 [& k, [% ^: V: n) L
93ce48cf5175438aade79eca17f0de7a.png . Y" ?( M; ?; x! s% d
, g3 s# S0 `- [2 ?; Z

/ Z  F- P0 m' z+ ?+ K: V————————————————
+ t% A1 t" L, W: z$ s# m5 b5 q版权声明:Davidysw. R- b6 a% p( J3 D3 r# v
  z) `) y* z9 a- Z9 H$ Z8 x
$ }& M) `/ V+ ]
0dbb91401d67469d85ee28c2b0501332.png
赞 收藏 评论0 发布时间:2022-9-28 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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