嵌入式学习笔记(44)S5PV210的SD卡启动实战

news2024/11/19 9:23:53

8.5.1任务:大于16KB的bin文件使用SD卡启动

(1)总体思路:将我们的代码分为2部分,第一部分BL1小于等于16KB,第二部分为任意大小,iROM代码执行完成后从SD卡启动会自动读取BL1到iRAM中执行;BL1执行时负责初始化DDR,然后手动将BL2从SD卡copy到DDR中正确位置,然后BL1远跳转到BL2中执行BL2。

(2)细节1:程序怎么安排?程序分为2个文件夹BL1和BL2,各自管理各自的项目。

(3)细节2:BL1中要完成:关看门狗、设置栈、开iCache、初始化DDR、从SD卡复制BL2到DDR中特定位置,跳转执行BL2。

(4)细节3:BL1在SD卡中必须从Block1开始(Block0不能用,这是三星官方规定的),长度为16KB内,我们就定位16KB(也就是32个block);BL2理论上可以从33扇区开始,但是实际上为了安全都会留一些空扇区作为隔离,譬如可以从45扇区开始,长度由自己定(实际根据自己的BL2大小来分配,我们实验时BL2非常小,因此我们定义BL2长度为16KB,也就是32扇区)。

(5)细节4:DDR初始化好后,整个DDR都可以使用了,这时在其中选择一段长度足够BL2的DDR空间即可。我们选0x23E00000(因为我们BL1中只初始化了DDR1,地址空间范围是0x20000000~0x2fffffff)。

8.5.2代码划分为2部分(BL1和BL2)

BL1中重定位

BL2远跳转

(1)因为我们BL1和BL2其实2个独立的程序,链接时也是独立分开链接的,所以不能像以前一样使用ldr pc, =main这种方式来通过链接地址实现远跳转到BL2。

(2)我们的解决方案是使用地址进行强制跳转,因为我们知道BL2在内存地址0x23E00000处,所以直接去执行这个地址即可。

总结:代码分为2部分,这种技术叫做分散加载。这种分散加载的方法可以解决问题,但是比较麻烦。它的缺陷有:第一,代码完全分2部分,完全独立,代码编写和组织上麻烦;第二,无法让工程兼容SD卡启动和Nand启动、NorFlash启动等各种启动方式。

8.5.3 uboot中的做法

(1)第二种思路:程序代码仍然包括BL1和BL2两部分,但是组织形式上部分为2部分,而是作为一个整体来组织。它的实现方式是:iROM启动,然后从SD卡的扇区1开始读取16KB的BL1然后去执行BL1,BL1负责初始化DDR,然后从SD卡中读取整个程序(BL1+BL2)到DDR中,然后从DDR中执行(利用ldr pc, =main这种方式以远跳转到iRAM中运行的BL1跳转到DDR中运行BL2)。

(2)细节1:uboot编译好后有200多KB,超出了16KB。uboot的组织方式就是前面16KB为BL1,剩下的部分为BL2。

(3)细节2:uboot在烧录到SD卡的时候,先截取uboot.bin的前16KB(实际脚本截取的是8KB)烧录到SD卡的block1~block32,然后将整个uboot烧录到SD卡的某个扇区中(譬如49扇区)

(4)细节3:实际uboot从SD卡启动时是这样的:iROM先执行,根据OMpin判断出启动设备是SD卡,然后从SD卡的block1开始读取16KB(8KB)到iRAM中执行BL1,BL1执行时负责初始化DDR,并且从SD卡的49扇区开始复制整个uboot到DDR中指定位置(0x23E00000)去备用;然后BL1继续执行直到ldr pc, =main时BL1跳转到DDR上的BL2中接着执行uboot的第二阶段。

总结:uboot中的这种启动方式比分散加载的好处在于:能够兼容各种启动方式。

我的总结:假设启动程序为100KB,分散加载将程序分为2部分,一部分BL1为16KB,另一部分BL2为84KB(100-16)。这两部分各有各的链接地址,其中BL1一般是链接在0xd0020010,而BL2链接在0x23E00000。BL1负责初始化DDR,程序运行中将BL2复制到DDR中的相应位置,然后跳转到0x23E00000位置继续执行BL2。

uboot方式假设启动程序为100KB,将程序分为2部分,一部分BL1为16KB,一部分为BL1+BL2 100KB。这两部分链接在同一个地址0xd0020010。BL1负责初始化DDR和将BL1+BL2 copy到DDR中,然后在执行过程中使用ldr pc, =main 语句跳转到DDR中继续执行BL2。

 嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。在评论区输入“嵌入式”,即可0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

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

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

相关文章

ChatGPT启蒙之旅:弟弟妹妹的关键概念入门

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

腾讯云服务器哪个配置比较值得?

腾讯云服务器哪款配置比较好值得买?轻量应用服务器性价比值得买,轻量2核2G3M带宽95元一年、2核4G5M带宽218元一年、2核2G4M带宽三年540元一年、4核8G12M配置446元一年、8核16G18M带宽1668元15个月、16核32G28M轻量服务器3468元15个月。腾讯活动入口&…

tiny模式基本原理整合

【Tiny模式】的基本构成 M【首头在首位】 U【/】 V【HTTP/】 Host H【真实ip】 XH \r回车 \n换行 \t制表 \ 空格 一个基本的模式构成 [method] [uri] [version]\r\nHost: [host]\r\n[method] [uri] [version]\r\nHost: [host]\r\n 检测顺序 http M H XH 有些地区 XH H M 我这边…

lenovo联想台式机 拯救者 刃7000-28ICBR(90KX)原装出厂Windows10系统镜像

LENOVO联想拯救者(90KX)原厂WIN10系统 下载链接:https://pan.baidu.com/s/1beocPJSmnFbY4Y_ZQM2djA?pwd4d1n 系统自带所有驱动、出厂主题壁纸LOGO、Office办公软件、联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式:ISO 文件大…

华为云云耀云服务器L实例评测|云耀云服务器L实例部署ZFile在线网盘服务

华为云云耀云服务器L实例评测|云耀云服务器L实例部署ZFile在线网盘服务 一、云耀云服务器L实例介绍1.1 云耀云服务器L实例简介1.2 云耀云服务器L实例特点 二、ZFile介绍2.1 ZFile简介2.2 ZFile特点 三、本次实践介绍3.1 本次实践简介3.2 本次环境规划 四、购买华为云…

《幸福之路》罗素(读书笔记)

目录 作者简介 作者的感悟 经典摘录 一、不幸福的成因 1、一部分要归咎于社会制度 2、一部分则得归咎于个人心理——当然,你可以说个人心理是社会制度的产物。 二、欠缺某些想要的东西,是快乐的必要条件 三、无聊与刺激 四、现代人的精神疲劳 五…

word已排序好的参考文献,插入新的参考文献,序号更新

原排序好的文献序号。 现在在3号后面插入一个新文献。4,5号应该成为5,6 这时在3号后面,回车,就会自动的增长。如下图: 但是如果手滑,把[4]删除了如何排序?? 如下图: …

基于Java的医院药品管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

聊天记录一句一句出现的视频制作,制作抖音聊天记录视频教程

聊天记录情感中视频制作工具是一款专注于将聊天记录转化为抖音视频的工具。它可以将平淡的聊天截图转化为生动有趣的视频,让你的回忆变得更加具有观赏性和情感共鸣。 首先,聊天记录一句一句出现的视频制作功能是该工具的一大特点。通过这个功能&#xf…

应力分析概要

1.概述 应力分析是一种用于结构件寿命分析的方法,最早的应用场景可能是路桥,因为西方提前我们两百年以上进入大工业时代。许多人工建筑的寿命是有限的,这类实际需求催生出寿命预测和诊断。结构件的失效,最根本的因素是因为应力的…

基于Matlab求解高教社杯全国大学生数学建模竞赛(CUMCM2004A题)-奥运会临时超市网点设计(附上源码+数据)

文章目录 题目思路源码数据下载 题目 2008年北京奥运会的建设工作已经进入全面设计和实施阶段。奥运会期间,在比赛主场馆的周边地区需要建设由小型商亭构建的临时商业网点,称为迷你超市(Mini Supermarket, 以下记做MS)网&#xf…

mybatis项目启动报错:reader entry: ���� = v

问题再现 解决方案一 由于指定的VFS没有找,mybatis启用了默认的DefaultVFS,然后由于DefaultVFS的内部逻辑,从而导致了reader entry乱码。 去掉mybatis配置文件中关于别名的配置,然后在mapper.xml文件中使用完整的类名。 待删除的…

排序---P1781 宇宙总统

思路: 当我们要对这些超大数进行比较排序时,如果我们用int或long基本数据类型时,会超出能承载的范围,因此我们选择用引用数据类型:BigDecimal或BigInteger。 区别在于基本数据类型直接比较大小,而是调用这…

平面图—简单应用

平面图:若一个图𝐺能画在平面𝑆上,且使𝐺的边仅在端点处相交,则称图𝐺为可嵌入平面𝑆,𝐺称为可平面图,简称为平面图。 欧拉公式:设有…

机器学习笔记 - 深入研究spaCy库及其使用技巧

一、简述 spaCy 是一个用于 Python 中高级自然语言处理的开源库。它专为生产用途而设计,这意味着它不仅功能强大,而且快速高效。spaCy 在学术界和工业界广泛用于各种 NLP 任务,例如标记化、词性标注、命名实体识别等。 安装,这里使用阿里的源。 pip install spacy…

Arcgis小技巧【14】——拓扑(Topology)的方方面面

在ArcGIS中,拓扑是定义点要素、线要素以及面要素共享重叠几何的方式的排列布置。 简单来说,我们可以将拓扑理解各类要素的地理空间关系,如重叠、相交、相连等。 拓扑的主要功能就是用于保证数据质量,当然它还有其它很多功能&…

【物联网】浅谈单片机中的看门狗

STM32看门狗是一种重要的系统保护机制,能够监控系统的运行状态并在故障时自动重启。它在各个领域都有广泛的应用,如工业自动化、通信设备和汽车电子等。通过配置和控制看门狗定时器,我们可以提高系统的稳定性和可靠性。在实际应用中&#xff…

43 验证二叉搜索树

验证二叉搜索树 理解题意:验证搜索二叉树:中序遍历是升序题解1 递归(学习学习!)题解2 中序遍历(保持升序) 给你一个二叉树的根节点 root ,判断其是否是一个 有效的二叉搜索树。 有…

selenium查找网页如何处理网站资源一直加载非常卡或者失败的情况

selenium查找网页如何处理网站资源一直加载失败的情况 selenium获取一个网页,某个网页的资源卡了很久还没有加载成功,如何放弃这个卡的数据,继续往下走 有2钟方式。通常可以采用下面的方式一来处理这种情况 方式一、WebDriverWait 这种方式…

【python】pandas库

文章目录 简单介绍Series数据结构DataFrame数据结构索引对象基本功能reindex重新索引drop丢弃指定轴上的项索引、选取和过滤用loc和iloc进行选取算法运行数据对齐DataFrame和Series之间的运算函数应用和映射排名和排序 简单介绍 pandas是python进行数据分析中非常重要的一个库…