当前位置: 首页 > news >正文

【linux开发-驱动】-STM32MP157启动相关

前言:

STM32单片机是直接将程序下载到内部的Flash,上电以后直接运行内部Flash中的程序。

STM32MP157 内部没用供用户使用的 Flash,系统都是存放在外部 Flash 里面的,比如 EMMC,因此 STM32MP157 上电以后需要从外部 Flash 加载程序到内存中。

一、STM32MP157启动模式

支持从多种设备启动,比如EMMC、SD、NAND、NOR、USB、UART 等。

STM32MP157 有三个 BOOT引脚:BOOT0~BOOT2,这三个 BOOT 引脚通过拉高/拉低来设置从哪种设备启动。

BOOT2BOOT1BOOT0启动模式描述
000UART/USB

-USART2/3/6、UART4/5/6/7/8

-USB接口

001串行NOR串行NOR或者QUADSPI
010EMMC连接到SDMMC2上的EMMC设备
011并行NAND连接到 FMC 上的并行 SLC NAND
100MCU启动内部的 M4 内核
101SD连接到 SDMMC1 上的 SD 卡。
110UART/USB和 000 效果一样,从 UART/USB 启动
111串行NAND连接到 QUADSPI 上的串行 NAND

二、STM32MP1 启动流程

ROM 代码会读取 BOOT0~BOOT2 这三个引脚电平,获取启动模式信息,
比如读取到是从 EMMC 启动的,那么 ROM 代码就会从 EMMC 中读取相关程序。

2.1内部ROM代码

内部 ROM 代码支持如下功能:
①、Secure boot(安全启动),不管是串行启动还是从 Flash 设备启动。
②、Engineering boot(工程启动?),当 BOOT2~BOOT0 设置为 100 的时候,我们就可以通
过 STLINK 访问 A7 或者 M4 内核。一般是通过此方法来调试 M4 内核代码。
③、Secondary core boot(第二个内核启动),复位以后,STM32MP157 的每个 A7 内核都会
启动,并且运行相同的指令。

2.2安全启动

当我们设置好 BOOT2~BOOT0,选择从外部 Flash,比如 EMMC、NAND 或 NOR 等启动
的时候就会进入安全启动流程。

STM32MP157 的安全启动流程比较复杂。

2.3串行启动

当我们设置 BOOT2~BOOT0 为串行启动,也就是从 USB 或 UART 启动的时候就会进入此
模式。当选择串行启动以后 ROM 代码就会并行扫描所有可以启动的 UART 以及 USB OTG 接
口。当扫描到某个活动的串行接口以后,ROM 代码就会使用此串行接口,并且忽略掉其他的串
行接口。

1、USB 启动

内部 ROM 代码支持 USB OTG 启动,我们一般使用 STM32CubeProgrammer 软件通过 USB
OTG 接口来向 STM32MP1 烧写系统

2、UART 启动

如果要送 UART 启动,也就是通过 UART 烧写系统,那么只能使用 USART2、USART3
UART4、UART5、USART6、UART7 或 UART8,此时串口工作模式为:1 位起始位、8 位数据
位、偶校验、1 位停止位、波特率 115200。

三、 STM23MP1 Linux 系统启动过程

1、ROM代码

1、ROM代码会初始化基本的时钟。
2、从选定的启动设备中加载FSBL代码
3、启动FSBL代码

2、FSBL

1、完成整个时钟树初始化。
2、初始化DDR。
3、从选定的驱动设备中加载SSBL代码
4、启动SSBL代码

3、SSBL

1、从外部存储设备或者网络中加载
Linux系统
2、通过启动画面向用户反馈启动过程
3、启动Linux内核

4、linux内核

1、Linux内核初始化
2、挂载根文件系统
3、启动用户空间的init程序

5、linux用户空间

用户空间,也就是根文件系统里面


http://www.mrgr.cn/news/48650.html

相关文章:

  • 介绍xshell的使用技巧
  • 【记录47】防止按钮短时间频繁点击触发接口,导致影响性能和用户的体验不好及浪费资源
  • leetcode.3158 xor值(亦或运算)
  • 教你一招快速解决MacOS鼠标滚轮反转的问题
  • 90%客户都避不开的通风天窗选购误区!后悔没早点看到
  • 智汇云舟亮相WAFI世界农业科技创新大会,并参编数字农业产业图谱
  • 本地部署Ollama+千文大模型,docker openui访问
  • Go语言中的控制结构(四)
  • stm32定时器中断和外部中断
  • linux下编译鸿蒙版curl、openssl
  • FFmpeg的简单使用【Windows】--- 简单的视频混合拼接
  • Kafka系列之:生产者性能调优
  • python第十天
  • 跟着Open3D学C++
  • (亲测可行)ubuntu下载安装c++版opencv4.7.0和4.5.0 安装opencv4.5.0报错及解决方法
  • 嵌入式系统中常见的存储器
  • npm install进度卡在 idealTree:node_global: sill idealTree buildDeps
  • 如何使用ssm实现班级同学录网站
  • 机器学习——自动化机器学习(AutoML)
  • 【Web开发】第一弹:HTML表格基础与应用实例