zoukankan      html  css  js  c++  java
  • i.MX53 上电启动过程

    1. BOOT_MODE[1:0] 内部寄存器

    RESET_B上升沿时,BOOT_MODE[1:0]从BOOT_MODE0和BOOT_MODE1两个引脚获取初始值。
    (BOOT_MODE[1:0]的值可以从SRC_SBMR寄存器的BMOD[1:0]域读到)



    2. Boot eFUSE

    (1) BT_FUSE_SEL

    * BOOT_MODE[1:0]=0b00
      BT_FUSE_SEL=0, SBMR的值由GPIO决定。
      BT_FUSE_SEL=1, SBMR的值由eFUSE设置(BOOT_CFG1/2/3)。

    * BOOT_MODE[1:0]=0b10
      BT_FUSE_SEL=0, 启动设备(如Flash,SD/MMC)未编程过,启动流程跳到Serial Downloader。
      BT_FUSE_SEL=1, 继续执行常规启动(BOOT_CFG1/2/3)。

    一块板子第一次使用,i.MX53中的eFUSES设置很可能是不正常的。上电后,BOOT ROM可能会尝试从一个
    不存在的设备上启动。使用"Boot From Fuses"就没有这个问题:

    首次使用时,BT_FUSE_SEL=0,使得启动直接跳到Serial Downloader。这样可以先加载一个bootloader,
    然后再烧写image到启动设备上。然后再写BT_FUSE_SEL=1,下次启动就会按照eFUSE里的配置来进行了。

    这样不用调整BOOT_MODE[1:0](拉高/拉低BOOT_MODE引脚的电平)就可以完成烧写过程。(烧写到最后再将BT_FUSE_SEL blown掉)。



    从eMMC启动:
    0. MMC时钟频率最早设置为357.143KHz,经过初始化之后会上升到20MHz或40MHz。
    1. 从eMMC中复制2Kbyte数据到CPU内部RAM。这2Kbyte数据中包括IVT,DCD和Boot Data structures。
    2. 检查数据格式。进行DCD配置。

    使用Mfgtools烧写的最后,会对/dev/mxc_iim做一些写操作,就是用来设置eFUSE中的一些位。

    使得板子正常启动是按BOOT_MODE[1:0]>eFUSE->eMMC(BOOT_CFG1/2/3)顺序进行的。


    echo "0x804 0x10" > /dev/mxc_iim : BT_FUSE_SEL=1
    echo "0x80c 0x60" > /dev/mxc_iim : BOOT_CFG1[7:5]=0b011 (eMMC)
    echo "0x810 0xc0" > /dev/mxc_iim : BOOT_CFG2[7:5]=0b110 (8-bit DDR)
    echo "0x814 0x20" > /dev/mxc_iim : BOOT_CFG3[5:4]=0b10 (ESDHCV3-3)



  • 相关阅读:
    详解用em替换px
    js判断是否为ie浏览器
    nth-child()选择器小结
    HTML5之canvas
    MQTT-SN协议乱翻之消息格式
    MQTT-SN协议乱翻之简要介绍
    MQTT 3.1.1,值得升级的6个新特性
    MQTT 3.1协议非严肃反思录
    MQTT协议笔记之mqtt.io项目HTTP协议支持
    MQTT协议笔记之mqtt.io项目Websocket协议支持
  • 原文地址:https://www.cnblogs.com/sammei/p/3295619.html
Copyright © 2011-2022 走看看