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

STM32MP1启动-嵌入式Linux

[复制链接]
STMCU小助手 发布时间:2022-9-28 19:22
一、概述
6 [, @2 Z7 q. M+ LSTM32MP1内部没用flash,系统及程序都是存放在外部 Flash (EMMC、SD、NAND、NOR),也可以通过USB、UART启动。1 D# z9 U6 h: L

& A4 T9 i8 n- v' a6 ^启动模式:
8 m: P/ q5 c; b9 v  P3 }6 {1 G+ J* {6 U( p2 O
8b0cbb43d63a49a399fc39bf7b701c7d.png - z5 x! n2 _# _1 N) [! P: n
0 S( C8 S6 ?) F% x0 `3 S2 m7 m
1、USB 启动
% Y7 W: U' H. A/ ^内部 ROM 代码支持 USB OTG 启动,一般使用 STM32CubeProgrammer 软件通过 USB OTG 接口来向 STM32MP1 烧写系统。USB OTG 需要一个 48M 和 60M 的时钟,这两个时钟由HSE 生成。
4 l& n7 Q1 @9 w: f/ r# g7 B在自己做核心板的时候外部 HSE 时钟最好选择 24MHz有源晶振,不要特立独行,虽然可以通过修改 OTP 来更改 HSE,一旦修改错误芯片就废了。
; m7 d6 m8 o0 H- A  t7 P& X" U. z6 L( n) C2 A; r
2、UART 启动! _# p1 P* `/ D
只能使用 USART2、USART3、UART4、UART5、USART6、UART7 或 UART8,此时串口工作模式为:1 位起始位、8 位数据位、偶校验、1 位停止位、波特率 115200。
+ \3 E; m/ d. |) I- o
  {6 A6 e! Y$ m0 J% M 62212756622e4cd6a148f8df8bbe2b0f.png
4 f3 E* `3 C5 }  a* o9 T8 `+ {' j& e! M/ D1 x: {" i
13cb93ef732340739596da57e871a1d5.png
# ^6 w- j( w" V8 Z# A: G6 c- ?: T- m% D/ w* H0 i9 z
3、Flash 设备启动要求% j( q+ k! i% f3 l0 e& u
ST 官方的 Flash 分区建议
: f0 G0 B& L/ `, g; B
& J7 ~) y3 h/ G$ s  a3 [! }' c* Z* I+ H) d  w

1 \) {: O9 r; B7 W1 K) F二、STM32MP1 二进制头部信息
4 N( ~& t& s$ H6 O- RSTM32MP1 内部的 ROM 代码会先读取 FSBL 代码,一般是 TF-A 或者 Uboot 的 SPL,也可以是 A7 裸机代码。比如 TF-A 我们之间编译生成二进制 bin 文件,但是这个 bin 文件不能直接拿来用,需要在前面添加一段头部信息,这段头部信息也包含了鉴权内容。如下:
7 Y9 \$ j* g2 T0 i( `
# w7 c* M2 D0 X4 g 233060d1da1444ef855e8334afda5705.png 9 x' f% w. ]' @. S, O) S  o

7 f& ]5 u, [/ ^$ v( ^头部信息不需要我们自己手动添加,ST 提供了个名为“stm32image”的工具专门用于在 bin 文件前面添加头部信息。
2 J( V$ {& N1 I/ A6 H在编写 A7 裸机的时候需要自己使用 stm32image 工具在 bin 文件前面添加头部信息。
$ m* W3 R! W( y9 ~6 ^  @gcc stm32image.c -o stm32image! n1 p( u- F+ v$ ~
2 h3 K0 y" Z- _" g6 L
3c7d960cf9a048b4b4f2febfcfdfa0d8.png
7 m/ E# I0 n0 R0 B- M
2 M& E4 J: h; V9 Y' P& Rstm32image 在使用的时候需要搭配一系列的参数:. \! r+ ~0 `/ ~$ Y* V" w
-s:指定源文件。
5 K4 Y; V3 P2 u/ e% Q+ K7 R-d:生成的目标文件。( B" I( q3 B) P8 F! ?! ~4 K3 M& f  d
-l:加载地址。
  {  K1 ]( k' `8 ~, Q# `/ Z-e:入口地址。
$ a) v: O/ ]3 L! Z-m:出版本号。
3 f* J" C( c0 p$ N-n:次版本号。
6 _" c) ]2 z9 m$ Z; i/ K
1 j" E* m" Z4 A2 [% F# ~9 H/ k三、 STM23MP1 Linux 系统启动过程
0 V  d" Q4 N+ I' u: X# j% rMP1 Linux启动流程 :/ @1 c6 f! v& v& I9 a8 f
) S' r3 Y+ g1 \6 R
2d7539a48b444ca7a849aa114d7e9fad.png " U# ^  J- v6 D( p- {
. ^: z- u- B2 V% v0 Y
启动 Linux 内核过程是一个链式结构:ROM Code→FSBL(TF-A)→SSBL(Uboot)→Linux kernel→rootfs。
+ M! w. X6 q9 H7 E7 X9 R! W一般 FSBL 代码是 TF-A 或者 Uboot 的 SPL 代码,也可以将 FSBL换成裸机代码。
- [& v& h; d/ \  Q0 `SSBL 代码运行在 DDR 里面,SSBL 一般是 Uboot,Uboot 会将 Linux 内核加载到 DDR 上并运行。
( A: Q: C' R; K$ R+ H  JLinux 内核启动过程中会初始化板子上的各种外设。# [; ^- Q( |! y. f/ m

+ [' {9 d0 N. G1 Z. k6 i3 X四、 STM23MP1 启动过程& F. E4 V4 \' x  c/ O
- n* ~4 s) |- a0 s
a59570d20b0742a4b2468d4d1c1c20b1.png
6 k3 E" R7 p- l$ r3 x0 A, K# `
& F% N4 F0 {5 L' F' ` 398bbb48b07b41469f93b9217c47d479.png
0 U/ |( u% D; q) M6 L& C: F# r* o9 B
6e6f8e56e2264890979c914ad4ffb37c.png
7 s" y6 o, P4 d. J8 \. W( v# F" o; [3 r% Y, g/ J
93ce48cf5175438aade79eca17f0de7a.png 0 y; A4 O7 o5 \8 p0 W' m5 L

7 v. f. x. E( [- J+ }% c# r& \6 @+ Z, S2 v; Z. ]2 K+ b7 T
————————————————
  R( [: P! b, O( y$ E5 K8 m" y版权声明:Davidysw  c2 y0 V8 D1 w4 d0 g: ]
7 z& I! m) E% c; J6 C% N" N
- l  f  X1 g/ H2 O8 x
0dbb91401d67469d85ee28c2b0501332.png
赞 收藏 评论0 发布时间:2022-9-28 19:22

举报

0个回答

所属标签

相似技术帖

官网相关资源

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