相关链接:

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

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

IM51有4种启动模式,通过GPIO管脚BOOT_MODE[1:0]来选择。在系统重启时,所有的启动引脚被采样并存储到SBMR(System reset controller Boot Mode Register,系统复位控制器启动模式寄存器)。连接BOOT_MODE到地对应逻辑0,对于逻辑1,飞思卡尔推荐连接到NVCC_PER3(为什么推荐此电平,是为了最大可能的避免启动时启动引脚电平处于unknown状态导致启动异常吗?)。

这4中启动模式分别是Internal BOOT、reserved、Internal BOOT-ROM Select和Serial Downloader,它们对应于BMOD[1:0](SMBR寄存器的14和15位)的值如下:

图1

其中BMOD[1:0]=01是飞思卡尔预留用来作为内部测试使用的。

1.      Internal Boot(BMODE = 00)

在此模式下设备上电时,处理器从Internal ROM(IMX51内部的ROM大小为36KB)启动,内部启动代码执行HW初始化,通过使用HAB库校验application image的有效性和跳转到application image(这里指uboot或是xldr)的地址并接着执行。如果在内部ROM执行过程出错,启动代码将跳转到serial downloader模式。

当设置为BMODE = 00模式,将由eFUSE设置或使用GPIO覆盖的fuse设置来控制启动流程,这两种选择是通过GPIO引导选择熔丝(GPIO_BT_SEL)来控制的:

⑴如果GPIO_BT_SEL(=1)熔丝被熔断(被烧录过),所有的启动选项由eFUSEs来控制。内部的启动代码可以从SBMR中读取BMOD[1:0]的值,或是直接通过IIM(IC Identification Module,IC识别模块)模块读取eFUSEs。

⑵如果GPIO_BT_SEL(=0)熔丝是完整的(没有被动过),启动选项由SBMR的设置来决定。此模式下一些熔丝选型可能被覆盖,具体哪些熔丝可以被覆盖,这是由GPIO那一列中写明了YES来决定的,比如:

图2

在此模式下之能通过SBMR来读取启动选项的值,比如图2的BT_MEM_CTL[1:0](也对应SBMR[1:0]),至于eFUSE中哪些驱动选项的值可以由哪些对应的GPIO口来覆盖的,见图3:

图3

由图3可知,DISP1_DAT[14:13](GPIO)的值会覆盖BT_MEM_CTL[1:0]的值,也就是说BT_MEM_CTL[1:0]的值由DISP1_DAT[14:13]来决定,由此可见此模式下这些GPIO的设计非常重要,否则很有可能导致启动无法正常启动。

2.      Internal Boot-ROM Select(BMODE= 10)

BMODE = 10模式相当于BMODE = 00模式,差别在于BMODE= 10模式忽略GPIO的启动覆盖,也不管BT_GPIO_SEL的设置。此模式只使用eFUSE的设置来启动,这样可允许用户在最终的产品上(完成开发,交付给客户的产品)熔断熔丝。没有了外部的BOOT_MODE引脚,没启动GPIO上拉和下拉,这样就不会出现在设备启动时,由于启动引脚(比如图3左边的GPIO)的不确定值导致了调用Serial Downloader。

此模式下,启动流程发现如果BT_BLANK=0没有被烧录过(ROM没有被烧录过),启动流程被重新定向并跳转到Serial Downloader。如果BT_BLANK=1被烧写过,则是正常的启动流程,并且使用eFUSE来启动。

当板子第一次使用时,如果没有熔丝被熔断,连接到启动GPIO引脚上的pad可能产生一些值,这可能被ROM code错误使用而导致启动流程从不存在的设备上启动。这可能产生电气/逻辑上的破坏,但此模式解决了这个问题。

3.      Serial Downloader(BMODE = 11)

当外部Flash设备没有程序,或是在启动过程中遇到错误,或是遇到下面的一些情况,启动留出都会跳转到Serial Downloader:

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

⑵BMOD[1:0] = 10和eFUSE的BT_BLANK=0

⑶BMOD[1:0] = 10但熔丝没有被正确设置。

⑷BMOD[1:0] = 00或10,且没有有效的镜像文件在Flash中。

⑸ Security hardware failure

⑹运行时产生异常

⑺ Error returned by the HAB functions while in productionmode. Errors are ignored in engineering

mode)

为了检测有效的串行端口(UART或USB),处理器的ROM程序定期间隔32s轮询UART和USB状态寄存器。如果在预定的轮询时间内没有发现有效的端口,ROM程序就通过看门狗对处理器断电。当serial downloader有效,看门狗定时服务,如果serial host和IM51之间的通讯在32s之外没有反应或是处理器进入死循环,看门狗就timeout并对设备下电。

IMX51启动模式的更多相关文章

  1. Android中Activity的四大启动模式实验简述

    作为Android四大组件之一,Activity可以说是最基本也是最常见的组件,它提供了一个显示界面,从而实现与用户的交互,作为初学者,必须熟练掌握.今天我们就来通过实验演示,来帮助大家理解Activ ...

  2. Android Activity的4种启动模式详解(示例)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/5233269.html 先介绍下Android对Activity的管理,Android采用Task来管理多个A ...

  3. Centos7更改默认启动模式(转载)

    今天心血来潮安装一个centos7的图形界面,但发现用之前的方式无法修改默认启动为命令行模式. 之前的方法:修改/etc/inittab文件中的           id:3:initdefault ...

  4. Android进阶--Acticivity的启动模式

    一.引言 我们在多次启动同一个Activity时,系统默认会重复创建多个实例,这样看上去便十分的愚蠢,所以android在设计时提供了启动模式来修改系统的默认行为.目前有四种启动模式:standard ...

  5. android 启动模式介绍

    Android启动模式 (1)Task:与Android系统是个多任务的系统中的任务是不同的.后者更倾向于多进程和多线程来说的,而这里的任务与application(应用程序)和activity(活动 ...

  6. activity的启动模式

    有四种启动模式:standard.singleTop.singleTask.singleInstance. 可在AndroidManifest.xml设置android:launchMode属性,如: ...

  7. Android启动模式

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...

  8. Activity四种启动模式

    转载博客:http://blog.csdn.net/shinay/article/details/7898492 Activity启动方式有四种,分别是:standardsingleTopsingle ...

  9. Activity的四种启动模式

    Activity有四种启动模式: 1. standard,默认的启动模式,只要激活Activity,就会创建一个新的实例,并放入任务栈中,这样任务栈中可能同时有一个Activity的多个实例. 2. ...

随机推荐

  1. SQL Server 2008 R2密钥序列号

    SQL Server 2008 R2密钥序列号 序列号: 开发版(Developer): PTTFM-X467G-P7RH2-3Q6CG-4DMYB 企业版(Enterprise): JD8Y6-HQ ...

  2. Python串行运算、并行运算、多线程、多进程对比实验

    转自:http://www.redicecn.com/html/Python/20111223/355.html Python发挥不了多核处理器的性能(据说是受限于GIL,被锁住只能用一个CPU核心, ...

  3. 用JS写的放大镜

    代码如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...

  4. Python urllib2多进程共享cookies

    如果想多个进程共享同一个cookies,不用每个进程都重新登录,可以就cookies保存到一个文件,然后多个进程直接共享一个锁来实现 1.一个进程登录完成后,把cookies保存到一个文件里面 sel ...

  5. 退出telnet

    telnet时,很多时候通过ctrl+c依然无法退出.可以采取下面的方式进行退出:  ctrl+],然后进入 telnet>,然后输入q或quit即可.

  6. 在Qt Creator中添加OpenCV库

    在项目的pro文件中添加如下代码:INCLUDEPATH += D:/opencv/build/include win32:CONFIG(debug, debug|release): {LIBS += ...

  7. EXTJS 4.2 资料 Grid嵌套

    如图: var ParentContCateId = 0; var start = 0; var limit = 20; DistributionPointForm = function () { E ...

  8. MongoDB安装,启动,注册为windows系统服务

    MongoDB安装与启动 周建旭 2014-08-10 解压完后配置环境变量 下载Windows 32-bit或64-bit版本并解压缩,程序文件都在bin目录中,其它两个目录分别是C++调用是的头文 ...

  9. (转)关于ARM9协处理器CP15及MCR和MRC指令

    网址:http://blog.csdn.net/zhou1232006/article/details/6150198 在基于ARM的嵌入式应用系统中,存储系统通常是通过系统控制协处理器CP15完成的 ...

  10. ExtJs 4.2.1 点击按钮弹出表单的窗口

    初学ExtJs,做项目的时候想做一个这样的效果:点击按钮弹出对话框,之前一直是使用EasyUi来做的, EasyUi里有Dialog,用起来很方便,但是现在转移到ExtJs上后,发现没有Dialog这 ...