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前一部分负责装载

相关文章推荐

从1数到n,1出现多少次,有多少个1的问题,想了好长时间,才写出这个。算的速度还是可以的

今天看了一本书,上面说,如果你想编程,就要先把自己想做的先写在纸上,然后按流程去做。我才突然发现,为什么我解决不了这个问题,原来,我一直在用脑子想,脑子再聪明也记不住所有环节。特别是编程。里面要注意的...
  • xgywd
  • xgywd
  • 2008-05-21 00:45
  • 1207

mars board u-boot linux开发环境的搭建及其编译

一、 安装git $sudo apt-get install git 二、 获取交叉编译器 $cd ~ $mkdir work $git clone git://github.com/embest...

FSL Imx53 启动流程分析(1) --上电启动

分类: Android2012-08-29 17:29 172人阅读 评论(0) 收藏 举报   IMx53上电后,进入的是其内部的Memory,从iMx53RM.pdf  Chapter...

I.MX6启动流程

本篇文章是Nxp官方参考手册IMX6DQRM中Chapter 8System Boot的翻译,翻译中如有理解偏差和用词不当之处,请网友多多指教。8.1 总揽 boot处理过程开始于处理器的上电复位,...

I.MX6 PCB设计的一点心得

从最初的protel 99se 双面板,四层板,到使用PADS 设计的8层板,到当前主要使用allegro来进行大部分的4层,6层,8层板设计,做PCB设计和布板断断续续已近10年了。 由于工作需要,...

飞思卡尔IMX51配置参数及启动信息

--------------------------------- BBG U-Boot > pri bootdelay=1 baudrate=115200 loadaddr=0x908000...

IMX51 uboot中设置启动图标

本文档针对 IMX51 android 平台下设置开机图标,其他本台未作测试。 步骤如下 1、LOGO图片保存在tools/logos目录下,可自行进行修改。注意图片大小不要超过你的屏的大小,色...

u-boot-imx6-boundary-v2017.03.zip

  • 2017-08-05 21:05
  • 21.82MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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