stm32MP135裸机编程:启动流程分析

2024-06-11 07:12

本文主要是介绍stm32MP135裸机编程:启动流程分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0 参考资料

轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf
STM32MP135AD数据手册.pdf

1 stm32MP135裸机启动流程分析

1.1 启动方式

stm32MP135支持8种启动方式:
在这里插入图片描述
注:
UART和USB启动并不是指通过UART/USB加载程序,而是通过UART/USB按照一定的下载协议(一般是通过STM32CubeProgrammer软件一键操作)将二进制文件通过UART/USB烧录到SD卡、EMMC、Nor Flash中,然后再将启动方式切换到SD卡、EMMC、Nor Flash,从这里存储设备内加载程序。

1.2 裸机启动时操作流程

stm32MP135裸机在进入用户APP前有2个阶段的工作需要处理,如下图所示:
在这里插入图片描述
这和我们使用MCU的BOOT+APP实现在线升级的方法非常相似,只不过这里分成了3步。有人或许会问,这里直接和MCU分成2步不也可以完成吗?这里就需要注意一个问题,那就是FSBL-A是被分配在128KB的SYSRAM中运行的,如果你的用户程序不需要使用到DDR,确实可以这样做,但为了使用容量更大的DDR实现更复杂的功能,在FSBL-A内对DDR进行了初始化,然后将用户程序拷贝到了DDR中,从而使用户程序能够在DDR中运行,发挥了MPU的最大价值。

(1)FSBL-A 和 Cube Example都需要加入STM32 Header,才能被ROM code 与bootloader识别。
(2)FSBL-A需烧录到SDCard的固定位置LBA128或LBA640(对于NOR Flash,这个位置为LBA0和LBA512),ROMCode固定从这两个位置寻找FSBL-A。 CUBEEXAMPLE的存放位置可在FSBL-A程序中修改,默认为SDCard的LBA640(NOR Flash为LBA384)。一般来说,将FSBL-A烧写到LBA128,将用户程序烧写到LBA640。

注:
LBAx表示SD卡第x个扇区,SD卡一个扇区大小为512字节。
在这里插入图片描述
注意:
如果有烧录过OpenSTLinux的卡,需先格式化。原因是ROM
Code从GPT分区表中寻找FSBL的优先级更高。
建议使用DiskGenius将SD卡扇区数据全部清除:
在这里插入图片描述

这篇关于stm32MP135裸机编程:启动流程分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050487

相关文章

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

SpringBoot集成XXL-JOB实现任务管理全流程

《SpringBoot集成XXL-JOB实现任务管理全流程》XXL-JOB是一款轻量级分布式任务调度平台,功能丰富、界面简洁、易于扩展,本文介绍如何通过SpringBoot项目,使用RestTempl... 目录一、前言二、项目结构简述三、Maven 依赖四、Controller 代码详解五、Service

SpringBoot通过main方法启动web项目实践

《SpringBoot通过main方法启动web项目实践》SpringBoot通过SpringApplication.run()启动Web项目,自动推断应用类型,加载初始化器与监听器,配置Spring... 目录1. 启动入口:SpringApplication.run()2. SpringApplicat

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

MySQL 临时表与复制表操作全流程案例

《MySQL临时表与复制表操作全流程案例》本文介绍MySQL临时表与复制表的区别与使用,涵盖生命周期、存储机制、操作限制、创建方法及常见问题,本文结合实例代码给大家介绍的非常详细,感兴趣的朋友跟随小... 目录一、mysql 临时表(一)核心特性拓展(二)操作全流程案例1. 复杂查询中的临时表应用2. 临时

C#异步编程ConfigureAwait的使用小结

《C#异步编程ConfigureAwait的使用小结》本文介绍了异步编程在GUI和服务器端应用的优势,详细的介绍了async和await的关键作用,通过实例解析了在UI线程正确使用await.Conf... 异步编程是并发的一种形式,它有两大好处:对于面向终端用户的GUI程序,提高了响应能力对于服务器端应

Spring Boot项目如何使用外部application.yml配置文件启动JAR包

《SpringBoot项目如何使用外部application.yml配置文件启动JAR包》文章介绍了SpringBoot项目通过指定外部application.yml配置文件启动JAR包的方法,包括... 目录Spring Boot项目中使用外部application.yml配置文件启动JAR包一、基本原理

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按