http://blog.csdn.net/evilcode/article/details/6079767

arm内部有rom,该rom有代码,上面驻留着系统真正启动的代码,和uboot没有关系。

通过该段代码根据不同的启动模式进行不同的启动方式:
如果是nand会自动读取uboot前4k的代码到片内sdram执行,该代码要完成cpu的初始化和ram初始化(初始化ram为外围的)等。
——————————————————————————
i.mx51没有nand但有SD卡,但都是作为存储设备!
——————————————————————————
一直困惑自己的是,一直以为uboot的前4k是拷贝到外围ram执行的,但片外的ram需要前4k去初始化这样造成了死锁

拿Freescale的imx51为例 片内ROM 36k 片内RAM128k

iMX51启动机制如下(在实际开发中不会涉及到该内容写下这些只是让你更好的了解系统的启动过程,系统的启动过程不单单只有uboot这一块在uboot之前还做了很多的工作):

imx51在系统重启时,会采样启动模式的GPIO管脚(BOOT_MODE[1:0]),采样所得到的值存储在SBMR寄存器中(System Reset Controller Boot Mode Register)。imx51支持的启动模式包括:内部启动模式(通过启动模式的GPIO管脚判断启动外设)、测试模式、下载模式(通过USB/UART下载代码)、内部启动模式(通过启动模式fuse位判断启动外设)。

BOOT_MODE[1:0] 启动模式类型 启动模式细节
00 内部启动模式

(通过启动模式GPIO管脚判断启动外设)

iMX51执行芯片内部的启动代码,可以从以下设备启动

  • Nor Flash(通过WEIM)
  • OneNAND
  • SPI(Serial Flash CS#1)/I2C eeprom
  • NAND Flash, MLC/SLC 0.5K/2k/4kB page ECC
  • SD/MMC(支持大容量)/MoviNAND(通过MMC接口)
01 测试模式  
10 内部启动模式

(通过启动模式fuse位判断启动外设)

与00模式相同,只是不通过启动模式GPIO管脚来判断启动外设,而是通过iMX51的内部fuse位,这些fuse位可以一次性写入。
00 USB/UART下载启动模式 下载并执行代码,可以通过以下接口

l           USB(全速)

l           UART

imx51在系统重启时,会读取GPIO_BT_SEL的内部fuse位:

a)如果GPIO_BT_SEL=1(被烧写过),在芯片内部启动代码会通过读取内部fuse位来判断外设相关性。

b)如果GPIO_BT_SEL=0,imx51会在启动时采样外设相关特性的GPIO管脚,并存储在SBMR寄存器中。芯片内部启动代码会通过读取该寄存器判断外设相关性。所以,芯片内部fuse位与启动相关GPIO管脚是一一对应的。

IMX51内部启动代码

imx51内部有一段ROMcode,在内部启动模式下,系统启动时,会执行这段代码,这段代码会初始化最基本的硬件,然后判断系统的外部存储设备信息(通过读取SBMR寄存器)。然后系统会初始化相应的外设,并将外设中的第一部分代码拷贝到芯片内部RAM中,并跳转到其头地址并执行。

通过这种方式,imx51可以支持从多种外设启动,从而增加启动灵活性,imx51 ROMcode流程如下

我们是按照从SD卡

1)   通过采样SBMR寄存器读取fuse位或者采用启动模式的管脚 <——Reset

2)通过BOOT_MODE[1:0]来判断是否是那种启动模式

为了保持稳定性BOOT_MODE[1:0]=10,内部启动模式(通过启动模式fuse位判断启动外设),将外部信息烧写到芯片内部fuse中,这样系统将从内部fuse中读取相关外设信息。

3)因为是从SD卡启动所以 boot memo ctrol SD/MMC/MoviNAND?

BT_MEM_CTL = 外设接口扩展存储设备

‘00’=SD/MMC HDD

4)配置SD/MMC的控制器 eSDHC1 Controller

5)basic config and obtain base addr of boot device

基本的配置和获取启动硬件的基地址

6)执行镜像

讲这些的作用:imx51的Romcode固化在芯片内部,不能修改,以上分析Romcode主要可以帮助大家理解以下几点:

1)imx51最初是如何启动的

2)在bootloader开始执行前,系统处于何种状态,由以上分析可见

a)imx51已经初始化了硬件部分,包括部分时钟,内部总线以及外部存储设备的控制器,以及外部存储设备本身

b)bootloader的头2k已经被拷贝到imx51内部的RAM了,除开1k的MBR头,以及flash文件头,剩下的部分就是可执行代码。由此可知剩下部分已经不能放下整个bootloader了,所以必须把bootloader分成两个部分:XLDR和Eboot本身。

c)可以利用DCD段来初始化某些寄存器,例如AndroidBSP利用它来初始化系统DDR2控制器。

mx51 uboot启动感悟相关推荐

  1. 2014.4新版uboot启动流程分析

    原文 http://blog.csdn.net/skyflying2012/article/details/25804209 此处转载有稍作修改 最近开始接触uboot,现在需要将2014.4版本ub ...

  2. UBOOT启动内核过程

    1.摘要 (1).启动4步骤 第一步:将内核搬移到DDR中 第二步:校验内核格式.CRC等 第三步:准备传参 第四步:跳转执行内核 (2).涉及到的主要函数是:do_bootm和do_bootm_li ...

  3. tiny4412 u-boot 启动参数的设置

    参考 http://www.cnblogs.com/chenfulin5/p/5887552.html 制作SD卡 u-boot 编译完之后, 进入 u-boot 目录里面的 sd_fuse cd ~ ...

  4. 嵌入式学习笔记之四 (uboot启动流程)

    1.boot ROM阶段 CPU 上电之后执行的第一段代码并不是 uboot 代码,因为 uboot 存储在启动介质(存储介质),如eMMC Flash.NAND Flash.SD 卡,CPU 想要执 ...

  5. u-boot启动过程

    目录: 一.初识u-boot 3 1,Bootloader介绍 3 2,Bootloader的启动方式 3 (1)网络启动方式 4 (2)磁盘启动方式 4 (3)Flash启动方式 4 3,U-boo ...

  6. u-boot启动代码start.S详解360

    (1)定义入口.由于一个可执行的Image必须有一个入口点,并且只能有一个全局入口,通常这个入口放在ROM(Flash)的0x0地址,因此,必须通知编译器以使其知道这个入口,该工作可通过修改连接器脚本 ...

  7. uboot流程——uboot启动流程

    [uboot] (第五章)uboot流程--uboot启动流程 2016年11月07日 20:12:07 阅读数:2230 以下例子都以project X项目tiny210(s5pv210平台,arm ...

  8. uboot启动过程中关闭Caches

    原文地址:<uboot启动代码分析之系统引导时为什么要关闭Caches?> 目录 一.在哪关闭cache 二.系统引导时为什么要关闭Caches 三.关键字Volatile 一.在哪关闭c ...

  9. uboot启动流程概述_uboot 分析之 启动流程

    uboot的启动流程: 看一幅图: 1.第一阶段:start.s的内容: 点击(此处)折叠或打开 #include @该文件是第二步中mkconfig文件执行时创建的.include/config.h ...

最新文章

  1. python解多项式方程_python – SymPy不能求解四阶多项式方程
  2. nodejs安装部署与运行
  3. 遭遇Web print
  4. 编程中的一些小问题记录
  5. 文巾解题 372. 超级次方
  6. Python中有了列表,为什么还有元组?
  7. 动态规划下的巴什博弈
  8. linux系统内核从3.2.0-100-generic升级到3.13版本
  9. 【POJ - 1502】MPI Maelstrom(Dijkstra单源最短路--求一点到其余个点的最小值的最大值)
  10. 20172307 2017-2018-2 《程序设计与数据结构》实验5报告
  11. python中exit 的作用_Python退出命令-为什么要使用这么多?何时使用每个命令?
  12. 和 远程文件夹同步_云同步实操(2)安卓端同步文件夹2
  13. Linq中字段数据类型转换问题(Linq to entity,LINQ to Entities 不识别方法System.String ToString()问题解决)...
  14. (转)观点|运营做的好不好,一看系统,二看流程
  15. 积分简明笔记-第二类曲线积分的类型
  16. 贴片电阻字码阻值对照表
  17. Java线程之线程的五种状态
  18. gmoj 6842. 【2020.11.5提高组模拟】淘淘蓝蓝之扮猪吃愉悦
  19. Packet Tracer - 排除 HSRP 故障
  20. Leetcode:面试题 01.06. 字符串压缩

热门文章

  1. 005_Spring Data JPA条件查询
  2. Material Design
  3. 产品经理入门——PM
  4. CAD2019软件安装教程
  5. oracle解析失败事件,ORACLE诊断事件及深入解析10053事件
  6. vue 如何生成一个dom元素_vue 学习心得——DOM树如何被构建
  7. 什么时候用转发什么时候用重定向_验孕棒什么时候用最准确
  8. 分站实现php,php城市分站是什么原理
  9. c语言程序存为bin程序,对文件进行加密与解密(c语言)-bin文件打开
  10. java预期_预期. java的