imx51 ROM boot code 启动分析

转载 2012年03月26日 14:02:14

转:http://blog.csdn.net/kickxxx/article/details/7236040

启动模式

mx51支持四种启动模式,这些模式的选择是通过IC package上的焊点来决定的(BOOT_MODE 0/1),在reset后会采样这两个焊点,然后把他们的状态保存到SRC Boot Mode Register(SBMR) 寄存器。焊点连接到地对应logic 0,对于logic 1,freescale推荐使用NVCC_PER3

四种启动模式分别为: internal, reserved, internal boot with fuses 以及通过USB/UART的serial boot

BMOD[1:0] Boot Type
00 internal Boot
01 Reserved
10 internal Boot - ROM Select
11 Serial Downloader

Internal Boot (BMODE == 00)

在这种模式下处理器从internal ROM启动,启动代码执行HW初始化,然后跳转到AP image.

在internal Boot模式下,启动流程是由eFUSE设置或者GPIO管脚来控制的,这两个控制的选择是通过GPIO Boot Select(GPIO_BT_SEL)焊点控制的:

1 如果GPIO_BT_SEL被烧写过,所有的启动选项由eFUSE来控制,boot ROM代码通过IIM module读取eFUSEs

2 如果BPIO_BT_SEL没有被动过,那么启动选项是由SBMR寄存器的设置决定的,一些fuse选项可能在这种mode下被覆盖。覆盖是通过GPIO管脚来控制的,如果是YES,那么选项值就通过读取SBMR register 来获取


Internal Boot - ROM Select (BMODE == 10)

这种模式和Internal boot BOOT_MODE[1:0] == 00 的区别是10模式忽略GPIO覆盖,也就是不管GPIO_BT_SEL设置,启动过程使用eFUSE启动设置。这种模式主要用在量产设备上,不需要GPIO的上拉下拉,以及在产品级设备上由于boot pin值不正确导致serial downloader调用

在这种模式下,启动流程如果发现BT_BLANK没有被烧写过(表示ROM还没有被烧写过),那么直接跳转到serial downloader,如果BT_BLANK被烧写过,则正常的启动流程,并且使用eFUSE设置。

在板子第一次使用时,fuses还没有被烧写,如果使用internal boot模式BMOD==00,此时连接到BT GPIO pads上的值被使用,但是这些值可能并不是系统需要的,ROM code错误的使用了这些值,可能会导致这些pads的electrical/logic损坏。internal boot模式BMOD==10可以解决这个问题,如果BT_BLANK fuse没有被烧写过,启动过程跳转到serial downloader,而下一次BT_BLANK被烧写后ROM code则执行正常的启动流程。


Boot eFUSE 描述

mx51 boot eFUSE是启动流程的配置参数,包括

DIR_BT_DIS 直接external memory启动使能

BT_MEM_CTL[1:0] 启动memory类型控制:可支持WEIM,NAND flash以及扩展设备类型,BT_MEM_TYPE[1:0]定义了这些扩展设备设置

BT_PAGE_SIZE[1:0]: 定义NAND flash的page size,这个设置对应BT_MEM_CTL里面的NAND flash 类型

BT_SPARE_SIZE 定义4KByes page大小NAND flash的spare bytes,需要BT_MEM_CTL设置为NAND flash并且BT_PAGE_SIZE为4KB

BT_BUS_WIDTH[1:0] 定义NAND/NOR总线宽度

BT_MEM_TYPE BT_MEM_CTL定义的是大的memory类型,BT_MEM_TYPE对相应的类型又给出了更细的分类

BT_SRC[1:0] 定义了扩展设备类型的来源: eSDHC 1/2/3/4; I2C 1/2, HS-I2C; CSPI, eCSPI1/2

BT_WEIM 选择WEIM muxed模式

BT_UART_SRC 选择serial downloads使用的UART controller

BT_MLC_SEL SLC/MLC NAND 设备选择;或者eMMC fast boot mode 使能

....


GPIO Boot 覆盖

一些fuse设置可以被GPIO覆盖,当GPIO_BT_SEL被设置为0并且BOOTM[1:0] == 00时,GPIO覆盖生效


Serial Downloader(BMOD[1:0] == 11)

当外部flash device没有写入程序,或者在启动过程中碰到了失败,boot过程会调用serial downloader。

以下情况会调用serial downloader:

1 BMOD[1:0] == 11(serial downloader mode)

2 BMOD[1:0] == 10(internal boot with fuses) 并且eFuse_BT_BLANK=0

3 BMOD[1:0] == 10 (internal boot with fuses) 但是fuses没有正确的设置

4 BMOD[1:0] == 00 或者 10(internal or internal boot with fuses),并且Flash device上没有有效image

5 Security hardware failure

6 运行时异常发生

7 在产品模式下HAB函数返回错误


启动总结

从上面可以看出,在系统进入uboot前,imx51实际上要执行一段内部代码ROM boot code,

1. ROM boot code会读取eFUSE以及boot GPIO来获取启动配置参数,这些配置参数决定了uboot代码的存储位置,存储layout,物理位置等等。

2. 在执行uboot代码前,系统已经初始化好了部分系统时钟,内部ram,flash主机控制器和设备控制器等(至于是ROM code初始化的 还是系统上电缺省初始化好的,就不做深究了)

3. ROM boot code会把uboot最前面的部分读取出来,放在内部ram,并且把指针指向这个内部地址执行uboot的前一部分

4. uboot的前半部分会做基本的初始化,并且把后半部分读入外部ram中(前面的初始化已经设置好了NAND device,外部ram),然后跳转到第二部分uboot的地址执行


因此uboot本身必须分为两个部分,前面部分由ROM code装载到内部RAM,后一部分由uboot前一部分负责装载

关于U-BOOT,以及ZYNQ7启动文件的对话记录。

对话的中心不是很明确,但是解释的很明白。保存下来 :  念奴娇(573479288) 10:25:03 请教:  在zedborad板卡上跑linux操作系统时,编写的arm程序和qt...
  • mcupro
  • mcupro
  • 2016年10月26日 11:03
  • 810

PXE远程启动过程分析

基本原理   1) 什么是PXE   PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动。协议分为client和server...
  • miss_acha
  • miss_acha
  • 2015年12月21日 17:00
  • 4298

spring boot实战(第五篇)配置源码解析

前言 前面的文章都采用markdown编写的,但编辑图片上极其不方便,以后还是采用网页的形式。 上一篇中讲述了spring boot配置文件的使用,本篇开始从源码的角度来看看配置文件。 环境(En...
  • liaokailin
  • liaokailin
  • 2015年10月02日 22:56
  • 10341

android启动 uboot启动 rom制作

android recovery模式及ROM制作 转载时请注明出处和作者 文章出处:http://www.cnblogs.com/xl19862005 作者:Xandy 1    ...
  • wjzhangcsu
  • wjzhangcsu
  • 2016年01月21日 16:21
  • 793

几个地址参数及uboot加载启动内核过程的理解

关于uBoot和Linux内核中几个地址参数及uboot加载启动内核过程的理解     uboot一般使用mkimage工具先制作一个启动映象文件来引导识别内核的,uboot源代码的tools/目录...
  • BoArmy
  • BoArmy
  • 2013年03月08日 21:36
  • 1823

U-Boot启动流程(Linux内核)的分析(写得好)

前面一段时间一直在移植U-Boot,Linux内核和构建根文件系统,其中有些地方还不是很明白,现在回过头来,理解一下U-boot的启动流程,以及 u-Boot是如何加载引导内核启动的。这里的分析也都是...
  • hushup
  • hushup
  • 2014年04月02日 09:10
  • 2054

芯片到uboot启动流程 :ROM → MLO(SPL)→ uboot.img

AM335x 中bootloader被分成了 3 个部分: 第一级 bootloader:引导加载程序,板子上电后会自动执行这些代码,如选择哪种方式启动(NAND,SDcard,UART。。。)...
  • hushup
  • hushup
  • 2014年03月07日 12:25
  • 2650

spring boot应用启动原理分析

spring boot quick start在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web...
  • hengyunabc
  • hengyunabc
  • 2015年11月30日 22:36
  • 125574

97. SpringBoot-启动流程分析第一篇

感谢网友给我的打赏,感谢Leonzhang的支付宝打赏,非常感谢!         《从零开始学Spring Boot》系列博客已经介绍了不少篇幅了,有些博友说要介绍下理论的知识,确实本系列博客都是...
  • gebitan505
  • gebitan505
  • 2017年02月13日 11:20
  • 746

IMX51启动模式

相关链接: http://blog.csdn.net/kickxxx/article/details/7236040 http://blog.csdn.net/evilcode/article/det...
  • LoongEmbedded
  • LoongEmbedded
  • 2013年07月16日 18:33
  • 1364
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:imx51 ROM boot code 启动分析
举报原因:
原因补充:

(最多只允许输入30个字)