stm32MP135裸机编程:修改基于SD卡的FSBL-A用户程序引导程序(boot)

0 参考资料

轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序.pdf
stm32mp135官方开发板原理图(mb1635-bdp-v1-0.zip)
STM32Cube_FW_MP13_V1.0.0
STM32CubeIDE v1.15

1 为什么需要修改FSBL-A用户程序引导程序

FSBL-A用户程序引导程序的作用在《轻松使用STM32MP13x - 如MCU般在cortex A核上裸跑应用程序》中描述得非常清楚:
在这里插入图片描述
其实它最主要的作用就是去初始化DDR,然后将存储设备(如SD卡、NOR Flash、EMMC)中的用户程序拷贝到DDR起始地址,最后将PC指针指向DDR首地址跳转到用户程序。这一套操作和我们MCU的BOOT的操作是非常相似的。
一般来说,如果我们使用的板子和FSBL-A用户程序引导程序不需要修改,但如果我们的板子和官方开发板不一致的地方导致错误发生时,官方的FSBL-A用户程序引导程序便不能正常使用,我们必须要根据自己的实际情况进行修改。

2 修改FSBL-A用户程序引导程序

2.1 使用stm32CubeIDE导入官方FSBL-A用户程序引导程序

这里使用的官方软件包版本为STM32Cube_FW_MP13_V1.0.0,最新的V1.0.1的FSBL-A用户程序引导程序已经不对外公开,无法再进行修改。
直接使用everything搜索FSBLA_SDMMC1,然后将V1.0.0软件包内的FSBL-A用户程序引导程序工程导入STM32CubeIDE中即可:
在这里插入图片描述

2.2 修改用户程序扇区偏移地址

FSBL-A用户程序引导程序需要固定烧录到SD卡的LBA128,也就是第128扇区,用户程序的扇区偏移地址应该考虑到FSBL-A用户程序占用空间大小,本例参考官方V1.1.0软件包,将用户程序扇区偏移地址设置为0x500。这样FSBL-A用户程序引导程序最大支持的大小为1152扇区,也就是1152x512字节=576KB,用来存FSBL-A用户程序引导程序绰绰有余。
修改方法:
找到OFFSET_HEADER宏定义,修改为0x500。
在这里插入图片描述

#define OFFSET_HEADER 0x500 /* Offset of the cube example header */

2.3 删除无关的BSP初始化程序

官方的FSBL-A用户程序引导程序有很多和官方开发板相关的板级初始化程序,将可能导致我们的FSBL-A用户程序引导程序出错,无法正常引导用户程序,因此必须要删除无关的BSP初始化程序。
对比官方原理图和本例使用的开发板(正点原子stm32MP135)原理图,可以看到官方有一个电源管理芯片,这在本例使用的开发板上是不存在的,直接注释掉有关该电源管理芯片初始化代码:
在这里插入图片描述
继续跟踪main函数内的初始化函数,发现DDR底层初始化函数内也使用到了这个电源管理芯片去设置供电电压,我们直接注释掉:
在这里插入图片描述
不注释掉的话,将会进入板级错误回调函数,板级错误回调函数如下:
在这里插入图片描述
FSBL-A用户程序引导程序一旦进入板级错误回调函数便无法再正常引导用户程序,本例一开始没有得到该部分源码导致一直无法进入用户程序浪费了大量时间。因此,我们一定要注释掉无关代码,根据我们自己的板子量身定制FSBL-A用户程序引导程序。

2.4 检查SD卡引脚是否和官方一致

一般来说,开发板设计者为了便于开发都会将开发板的SD卡和官方开发板设计一致,本例使用的开发板的SD卡引脚和官方一致,因此不需要再修改管脚。如果你开发板的SD卡管脚和官方不一致,可以通过修改以下SD卡底层初始化函数完成。(SD引脚可以通过OTP修改为其他管脚,但只能修改一次,一旦错误板子就报废了,因此默认它和官方是一致的!!!

在这里插入图片描述

2.5 跳转用户程序前关闭全局中断

官方的引导程序在跳转APP前没有关闭全局中断,将可能导致跳转失败,我们这里暂时只加一个关闭全局中断函数,后面再慢慢优化跳转前环境清理部分:
在这里插入图片描述

2.6 增加自定义提示LED

为了更直观看到FSBL-A引导程序执行情况,我们可以加上串口打印、指示灯等作为提示。本例使用PI3连接的红色LED作为引导程序指示灯,修改LED_RED的管脚定义即可:
在这里插入图片描述
至此,我们基于SD卡的FSBL-A用户程序引导程序初步修改完成,可以正常引导用户程序在DDR中运行了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/851464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

v-for

v-for 是 Vue.js 框架中的一个重要指令&#xff0c;用于渲染列表或数组元素。它允许你在 HTML 元素上迭代一个数据集合&#xff0c;将每个数据项映射到一个或多个 DOM 元素中。使用 v-for 的基本语法如下&#xff1a; html <template> <ul> <li v-for&qu…

Spark 面试题(二)

1. 简述Spark的作业运行流程是怎么样的 &#xff1f; Apache Spark的作业运行流程涉及从作业提交到执行完成的一系列步骤&#xff0c;具体如下&#xff1a; 作业提交&#xff1a;用户编写的Spark应用程序通过Spark API提交给集群。这通常涉及到创建一个SparkContext对象&#…

03-240605-Spark笔记

03-240605 1. 行动算子-1 reduce 聚合 格式: def reduce(f: (T, T) > T): T 例子&#xff1a; val sparkConf new SparkConf().setMaster("local[*]").setAppName("Operator")val sc new SparkContext(sparkConf) ​val rdd sc.makeRDD(List(1…

基础IO (Linux文件操作)

目录 1.文件操作 2.文件描述符 3.缓冲区 4.系统的缓冲区 1.文件操作 在C语言学习中&#xff0c;我们就已经使用了一些文件操作相关的接口&#xff0c;在学习IO之前&#xff0c;我们首先要复习一些以前讲过的概念&#xff0c; 1. 空文件也要在磁盘中占用空间&#xff0c;因为…

OBS 录屏软件 for Mac 视频录制和视频实时交流软件 安装

Mac分享吧 文章目录 效果一、准备工作二、开始安装注意事项&#xff1a;包内有两个版本及圆形图片&#xff0c;请根据自身需要版本进行安装演示为&#xff1a;MacBook Pro M3芯片1、双击运行软件&#xff0c;将其从左侧拖入右侧文件夹中&#xff08;最终目的&#xff1a;安装进…

python教程

python解释器的安装 https://www.python.org/ftp/python/3.12.4/python-3.12.4-amd64.exe jetbrains官网 英文 PyCharm 专业的版本 Thank you for downloading PyCharm! 社区 Thank you for downloading PyCharm! 中文 PyCharm 专业的版本 感谢您下载PyCharm&#xff01…

[大模型]GLM-4-9B-Chat WebDemo 部署

环境准备 在autodl平台中租一个4090等24G显存的显卡机器&#xff0c;如下图所示镜像选择PyTorch–>2.1.0–>3.10(ubuntu22.04)–>12.1 接下来打开刚刚租用服务器的JupyterLab&#xff0c; 图像 并且打开其中的终端开始环境配置、模型下载和运行演示。 pip换源和安装…

#12 深入Stable Diffusion模型微调与个性化

文章目录 前言1. 模型微调的重要性2. 微调前的准备2.1 数据收集2.2 环境配置 3. 实施微调3.1 参数设置3.2 训练过程 4. 个性化定制4.1 风格定制4.2 功能扩展 5. 微调后的评估与应用5.1 性能评估5.2 部署应用 结论 前言 Stable Diffusion作为一种先进的AI图像生成技术&#xff…

【图论应用】使用多路图(multigraph)对上海地铁站点图建模,并解决最短路径问题

文章目录 1 前言2 导包导入数据集3 创建多路图&#xff0c;导入节点和边信息3 绘制线路图4 计算最短路径 1 前言 最近正在学习图神经网络&#xff0c;先pick up了一些最基础的图论知识并学习了一些好玩的应用。 本文启发于B站视频&#xff08;BV1LY411R7HJ&#xff09;&#…

【Python深度学习】——交叉熵|KL散度|交叉熵损失函数

【Python深度学习】——交叉熵|KL散度|交叉熵损失函数 1. 交叉熵Cross Entropy1.1 交叉熵的含义1.2 交叉熵的公式1.3 交叉熵的特点 2. KL散度2.1 KL散度的含义2.2 KL散度的公式2.3 KL散度的性质2.4 KL散度的常用场景 3. 交叉熵损失函数3.1 交叉熵损失函数的定义与公式 1. 交叉熵…

【python】flask 框架

python flask 框架 flask是一个轻量级的python后端框架 (Django, tornado, flask) 官网&#xff1a;欢迎来到 Flask 的世界 — Flask中文文档(3.0.x) 安装&#xff1a;pip install Flask -i https://pypi.douban.com 常识&#xff1a; http,默认端口号为80; https,默认端口号…

国资e学快速学习实战教程

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

1.xshell传不了文件输出0000如何解决.....2.k8s中metalLB文件内容

xshell传不了文件输出0000如何解决 centos版本 1,因为没有工具下载即可 yum -y install lrzszk8s中metalLB文件内容 2.metalLB文件内容 cat metallb-native.yaml apiVersion: v1 kind: Namespace metadata:labels:pod-security.kubernetes.io/audit: privilegedpod-securit…

OSPF LSA头部详解

LSA概述 LSA是OSPF的本质 , 对于网工来说能否完成OSPF的排错就是基于OSPF的LSDB掌握程度 . 其中1/2类LAS是负责区域内部的 类似于设备的直连路由 . 加上对端的设备信息 3 类LSA是区域间的 指的是Area0和其他Area的区域间关系 , 设计多区域的初衷就是避免大型OSPF环境LSA太多…

Go模板页面浏览器显示HTML源码问题

<!--* Title: This is a file for ……* Author: JackieZheng* Date: 2024-06-09 17:00:01* LastEditTime: 2024-06-09 17:01:12* LastEditors: Please set LastEditors* Description:* FilePath: \\GoCode\\templates\\index.html --> <!DOCTYPE html> <html …

【RAG】浅尝基于多头注意力机制思想设计的Multi-Head RAG(多头RAG)

一、动机 现有RAG设计和评估方法&#xff0c;没有方案或评估方法明确针对具有多方面性的问题。下面解释一下多方面性的问题&#xff1a; "多方面性的问题"是指那些需要理解和整合多个不同领域或主题的知识和信息才能得到完整和准确回答的问题。这类问题的特点在于它…

Characters 2 01(卡通可爱人物动画模型)

● 包裹● - 26名男子; - 29个女孩。 ● 使用地点 ● - 游戏。针对游戏引擎优化的模型; -乘法; 广告和营销; - 虚拟现实/增强现实。 ● 特点 ● - 你可以很容易地改变物体的颜色 - 使用UV贴图; - 对象逻辑位置的枢轴; - 模型具有逻辑名称。 ● 几何学● 62个独特的资产(…

Objective-C 学习笔记 | Block 对象

Objective-C 学习笔记 | Block 对象 Objective-C 学习笔记 | Block 对象编写并使用 Block 对象Block 对象的返回值匿名 Block 对象外部变量在 Block 对象中使用 self在 Block 对象中无意使用 self修改外部变量 Objective-C 学习笔记 | Block 对象 Block 对象类似于匿名函数&am…

【代码随想录训练营】【Day 49】【动态规划-8】| Leetcode 139

【代码随想录训练营】【Day 49】【动态规划-8】| Leetcode 139 需强化知识点 多重背包&#xff1a;将其展开为01背包 题目 139. 单词拆分 注意 要保证 单词构成的有序性&#xff0c;先遍历背包&#xff0c;再遍历物品回溯法 class Solution:def wordBreak(self, s: str, …

面对层出不穷的大模型产品,该怎么选呢

层出不穷的大模型产品&#xff0c;你怎么选&#xff1f; 随着近日腾讯元宝APP的正式上线&#xff0c;国内大模型产品又添一员。关于接连出现的“全能“大模型AIGC产品&#xff0c;你都用过哪些呢&#xff1f;不妨来分享一下你的使用体验吧&#xff01;在这些大模型产品中&…