bootloader新的理解

1.对于bootloader这样的程序,作为板卡刚开始启动的部分,大致的顺序是一致的,大部分都是分为两个部分,一部分是汇编编写的,一部分是用c语言编写的。一般在汇编部分完成各种初始化的操作,比如关闭看门狗,防止开发板每3s启动一次,初始化SDRAM,初始化NANDFLASH,由于希望裸板有可以工作在更加高的频率下,因此要初始化时钟,设置FCLK:HCLK:PCLK的比例,另外nandflash有个特殊操作,会将前4k大小的空间自动复制到cpu中的前4kRAM中,这时cpu这4k代码其实是将存在nandflash中的bootloader复制到sdram中。然后跳转利用位置无关码的指令ldr pc,=main跳到sdram中的main处执行。然后在主函数中设置内核参数,开始tag,命令行tag,memrory tag,以及end tag,之后将内核读入到内存中。之后跳转执行。但是当内核启动时会输出一些打印信息,例如根文件系统在什么地方,终端是什么的信息。因此还需要设置串口,设置串口当然有一些初始化,例如设置GPIO为端口复用,设置内部上拉,设置是否用流控,设置传输的长度,设置奇偶校验位,设置波特率,设置查询还是用中断。之后编写读函数。

2.对于nandflash来说,对其读写是以页为单位来进行读写的因此,对于一个nandflash来说,其一共有多少页,之后选中这其中的某一页之后,之后将这一页的数据读到移位页中,然后再发送出去,一页的大小是0到2047,每一页都会有oob,大小是64字节,这是由nandflash的特性决定的,这是因为读nandflash可能读写过程中会出现读写的坏块,oob是校验用的,通过某种算法,当读取到某一页时,会生成相应的效验码,与之前的对比,如果不相同,则对其坏块进行修正。读nandflash时首先需要设置时序,这需要我们去看时序图,去计算出这三个参数是多少,之后设置地址。注意nandflash只有8个IO读写的口,因此命令,地址,数据肯定是分时复用的。在设置nandflash时要注意的是时间要延迟一会儿,不然会出问题。

3.对于bootloader从norflash启动还是nandflash启动还是有很大的差别i的,对于bootloader从norflash启动的话,此时cpu看到的0地址是在norflash上,bootloader从norflash上复制到sdram中,链接地址在sdram中。

对于bootloader从nandflash启动,根据nandflash的特性,此时cpu看到的0地址是在cpu的片内ram中,上电后将前4k移动到ram中,此时cpu看到的是ram中的地址0,在这4k代码中,将nandflash中的bootloader复制到sdram中,当运行这4k代码中的跳转到main函数时,它会直接跳到nandflash中的bootloader中的main处执行,用的位置无关码。

原文地址:https://www.cnblogs.com/zzm1/p/10620467.html

时间: 2024-10-22 03:02:01

bootloader新的理解的相关文章

浅谈我对机器学习和文本挖掘的新的理解

转眼间已经工作了一段时间了,回想起2014年初学机器学习时的付出.艰苦和努力,感觉都是值得的.从现在往前看,我是沿着“计算机->统计学->数据分析->数据挖掘->机器学习->文本挖掘”的路径走过来的,我觉得这个思路还是属于比较传统的进阶方法,学习的内容有不少的冗余,但相对来说更稳健一些.今天写这篇文章的目的是想总结一下我最近关于文本挖掘的工作体会以及我对机器学习的一些新的看法,只为探讨,还望与大家共勉. 我先来说一些文本挖掘的东西.似乎大家做Text Mining的不太多,可

对于卷积层得新的理解

卷积层得参数: in * kernelw * kernel *c: 可以理解为全连接,我们可以把一个饼状图当做一个节点, 如果把一个饼,也就是一个kernel*kernel(例:2*2)当做一个节点,那么这个参数层也就是  in * 1 * out 那么这个所谓的in * 1 *out 不就是全连接里面的w吗!w的参数刚好就是前面的节点乘后面的节点的个数! 继续理解,那么每个 总共20个channel img1(w*h*1(此处的1可以表示为channel为1)),img2(w*h*1),img

关于分母计算_0615新的理解

1.之前计算分母的话,是将每一个待更新粒子的观测区域的观测数据t_data和所有其他粒子计算似然比.其他粒子能量更具扩散过去的能量进行比较: 2.而实际上PHD-TBD的话顶多将所有格子当作目标,也就是说顶多每一个格子单做潜在目标或者有粒子在那里,所以计算的时候也应该是潜在目标附近的观测数据和随机生成粒子之间的 似然计算:所以如果格子设置为30*40=120的话,粒子数取100的话,这样的一帧时间遍历为120*100=12000.这样的时间差不多两个多小时就够了,如果换成占荣辉的那个参数6000

对Delphi控件作用的新理解

最近几天,对Delphi控件的含义有了一个新的理解.其实它不仅仅是给程序员提供功能的一个表层调用,控件本身的源代码就是一个很强的工业级源码.而且它的Main例子,往往就已经是半成品.而别的语言里没有那么多控件——换句话说,就是没有那么多工业级项目的源代码(往往都是通用工具类型)供你使用和学习(两层意思).这是我们Delphier独一无二的优势.不得不说,当年设计Delphi的两位老兄Anders Hejlsberg和Chuck Jazdzewski真是双剑合璧,无敌于天下——当然,只是产品无敌于

javascript中重要概念-闭包-深入理解

在上次的分享中javascript--函数参数与闭包--详解,对闭包的解释不够深入.本人经过一段时间的学习,对闭包的概念又有了新的理解.于是便把学习的过程整理成文章,一是为了加深自己闭包的理解,二是给读者提供学习的途径,避免走弯路. 在javascript--函数参数与闭包--详解这篇文章中,我详细介绍了闭包的概念.以下的分享对闭包的基本概念只会稍稍带过.如果对闭包的概念不熟悉的同学,请移步至javascript--函数参数与闭包--详解. 以下的分享会分为如下内容: 1.let命令 2.闭包特

【Linux 驱动】设备驱动程序再理解

学习设备驱动编程也有一段时间了,也写过了几个驱动程序,因此有对设备驱动程序有了一些新的理解和认识,总结一下.学习设备驱动编程也有一段时间了,也写过了几个驱动程序,因此有对设备驱动程序有了一些新的理解和认识,总结一下. ★什么是驱动程序 刚开始学习设备驱动程序的时候,产生了许多的问题.什么是驱动程序?驱动程序是干嘛的?它是如何工作的?它又是如何跟操作系统联系起来的?一系列的问题,现在有些地方还是不一定清楚,但是相比起刚开始的那个阶段,感觉自己还是清楚了很多. 设备驱动程序说白了(实质)就是为应用程

SQLServer 理解copyonly备份操作

Alwayson在添加数据库的过程中如果同步首选项选择的是"完整",那么就会在主副本上执行copyonly的完整备份和日志备份在辅助副本上执行还原操作,也正是这个操作让我对copyonly有了新的理解.虽然以前也经常使用copyonly执行完整备份,但是之前对copyonly的理解存在一点误区.接下来详细说明copyonly的操作. 一.备份测试 CREATE DATABASE city;GOCREATE TABLE city.dbo.test(id INT);---执行完整备份BAC

理解机器学习

理解机器学习 0. 前言 当决定想写这篇文章,以对前段时间的学习做个总结,同时对自己的努力有所交代的时候,一个难题摆在了我的面前:人工智能的命题太大,我驾驭不了.而选择一个具体的题目,其容量又不足以表达作者的思路.这与我们设计网络.选择参数何其相似! 最终,我选择了机器学习这个不大不小的范围.题目也是增删数次,风格一变再变,最终还是定了这个严肃一点的.希望大家能够喜欢. 当提到机器学习的时候,我们必须要弄清楚几个问题: 希望学到什么? 用什么方法学? 学习的效果如何? 不能学得更好的原因是什么?

对MVC模型的自悟,详尽解释,为了更多非计算机人员可以理解

今天小编在复习之前刚刚学会的一个小项目,然后突然对MVC有了新的理解,决定迅速将其写成文档,否则可能会忘记,就算是一个顿悟,学了java语言好久了,刚刚才对其有了比较深入的理解,希望对于同样的人能够有一个小小的帮助. 借用一下,这张图,感谢画图的大神. 首先,我从单词来解释M,就是画方框的位置,这个M是Model,就是建模,就是建立一个模型,这个模型就是建立javabean,模型就是你要用什么样的数据来进行你想要实现的功能,比如你想要实现一个登陆,那么就是设置两个变量String Usernam