imx51 ROM boot code 启动分析 .

来源:互联网 发布:淘宝和易趣的共同点 编辑:程序博客网 时间:2024/05/02 04:56

启动模式

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 Type00internal Boot01Reserved10internal Boot - ROM Select11Serial 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前一部分负责装载

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 京东已经发货了怎么办 苹果7p黑亮掉漆怎么办 淘宝卖家不肯退运费怎么办 健身付款收据丢了怎么办 收据丢了怎么办能退款 苹果售后不承认基带问题怎么办 电话卡欠费了不用了怎么办 软件移不到sd卡怎么办 手机显示sd卡受损怎么办 美的冰箱出现e6怎么办 美的冰箱显示e6怎么办 冰箱电脑板坏了怎么办 笔记本网线接口坏了怎么办 蓝p吃了一片 怎么办 sd卡上锁了忘记密码怎么办 手机sd卡被锁定怎么办 冰箱制冷管堵了怎么办 冰箱的管子破了怎么办 淘宝京东e卡冻结怎么办 苏宁任性付冻结怎么办 苏宁订单删除了怎么办 联通销户话费有余额怎么办 暖气改地热不热怎么办 老楼房暖气不热怎么办 4s店修不好车怎么办 苏宁的发票丢了怎么办 京东退货没有发票怎么办 发票发错了邮箱怎么办 苹果手机忘记电子邮箱验证码怎么办 退差价把红包退还了怎么办 网上购票票丢了怎么办 岗位人手不够老板又不招人来怎么办 辞职后提成不发怎么办 老板给客户吵架员工该怎么办 冰柜声音大怎么办嗡嗡响 交了钱电没有怎么办 小白熊电动吸奶器显示F1怎么办 花洒的水变小了怎么办 手机插卡处坏了怎么办 吉利帝豪一键启动钥匙没电怎么办 居民医保断交5年怎么办