I.MX6U启动方式详解

Posted reverse-xiaoyu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了I.MX6U启动方式详解相关的知识,希望对你有一定的参考价值。

I.MX6U 启动方式详解

1、启动方式的选择

  根据 NXP(恩智浦)官方提供的 I.MX6U 参考手册 chapter8:System Boot

Overview
The boot process begins at Power On Reset (POR) where the hardware reset logic forcesthe ARM core to begin execution starting from the on-chip boot ROM.

(启动过程开始于电源上的复位(POR)硬件复位逻辑强制 ARM 核心从芯片上的引导 ROM 开始执行)

Boot ROM code uses the state of the internal register BOOT_MODE[1:0] as well as the state of various eFUSEs and/or GPIO settings to determine the boot flow behavior of the device.

(引导 ROM 代码使用内部寄存器 BOOT_MODE[1:0] 的状态以及各种各样的 eFUSEs 的状态 和/或 GPIO 设置来确定设备引导流行为)

The main features of the ROM include:

(ROM 的主要特点包括)
• Support for booting from various boot devices--(支持从各种引导设备引导)
• Serial downloader support (USB OTG and UART)--(支持串行下载)
• Device configuration data (DCD) and plugin--(支持 DCD 设备配置数据和插件)
• Digital signature and encryption based High Assurance Boot (HAB)--(基于数字签名和加密的高保证引导(HAB))
• Wake-up from low power modes--(从低功率模式唤醒)

The boot ROM supports the following boot devices:

(引导 ROM 支持以下引导设备)
• NOR Flash
• NAND Flash
• OneNAND Flash
• SD/MMC
• Serial (SPI) NOR Flash and EEPROM
• QuadSPI (QSPI) Flash

The Boot ROM uses the state of BOOT_MODE and eFUSEs to determine the boot device. For development purposes, eFUSEs used to determine the boot device may be overridden by using GPIO pin inputs.

(引导 ROM 使用 BOOT_MODE 和 eFUSEs 的状态来决定引导设备,为了发展目的,使用 eFUSEs 来确定引导设备将被使用 GPIO引脚输入替代)

  BOOT 的处理过程是发生在 I.MX6U 芯片上电以后,芯片会根据 BOOT_MODE[1:0]的设置来选择 BOOT 方式。 BOOT_MODE[1:0]的值是可以改变的,有两种方式,一种是改写 eFUSE(熔丝),一种是修改相应的 GPIO 高低电平。第一种修改 eFUSE 的方式只能修改一次,后面就不能再修改了,所以我们不使用。我们使用的是通过修改 BOOT_MODE[1:0]对应的 GPIO 高低电平来选择启动方式,所有的开发板都使用的这种方式, I.MX6U 有一个 BOOT_MODE1 引脚和BOOT_MODE0 引脚,这两个引脚对应这 BOOT_MODE[1:0]I.MX6U-ALPHA 开发板的这两个引脚原理图如下图所示:
             技术图片

              技术图片

 

 

  其中 BOOT_MODE1 BOOT_MODE0 在芯片内部是有 100KΩ下拉电阻的,所以默认是0。 

  I.MX6U 有四个 BOOT 模式,这四个 BOOT 模式由 BOOT_MODE[1:0]来控制,也就是BOOT_MODE1 BOOT_MODE0 这两 IOBOOT 模式配置如表所示:

              技术图片

 

 

 1.1、串行下载

  当 BOOT_MODE1 0BOOT_MODE0 1 的时候此模式使能,串行下载的意思就是可以通过 USB 或者 UART 将代码下载到板子上的外置存储设备中,我们可以使用 OTG1 这个 USB 口向开发板上的 SD/EMMCNAND 等存储设备下载代码。我们需要将 BOOT_MODE1 拨到 “OFF”,将 BOOT_MODE0 拨到“ON”。这个下载是需要用到 NXP 提供的一个软件,一般用来最终量产的时候将代码烧写到外置存储设备中的 。

1.2、内部 BOOT 模式

  当 BOOT_MODE1 1BOOT_MODE0 0 的时候此模式使能,在此模式下,芯片会执行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设备(就是存放代码的设备、比如 SD/EMMCNAND)中将代码拷贝出来复制到指定的 RAM 中,一般是 DDR

2、BOOT ROM 初始化内容

  当我们设置 BOOT 模式为“内部 BOOT 模式”以后, I.MX6U 内部的 boot ROM 代码就会执行,这个 boot ROM 代码都会做什么处理呢?首先肯定是初始化时钟, boot ROM 设置的系统时钟如图所示:

             技术图片

 

 

  在图BT_FREQ 模式为 0,可以看到, boot ROM 会将 I.MX6U 的内核时钟设置为 396MHz, 也就是主频为 396MhzSystem PLL=528MhzUSB PLL=480MHzAHB=132MHzIPG=66MHz。关于 I.MX6U 的系统时钟,我们后面会详细讲解。

  内部 boot ROM 为了加快执行速度会打开 MMU Cache,下载镜像的时候 L1 ICache 会打开,验证镜像的时候 L1 DCacheL2 Cache MMU 都会打开。一旦镜像验证完成, boot ROM就会关闭 L1 DCacheL2 Cache MMU
  中断向量偏移会被设置到 boot ROM 的起始位置,当 boot ROM 启动了用户代码以后就可以重新设置中断向量偏移了。一般是重新设置到我们用户代码的开始地方,关于中断的内容后面会详细讲解。

3、启动设备

  当 BOOT_MODE 设置为内部 BOOT 模式以后,可以从以下设备中启动:
  ①、接到 EIM 接口的 CS0 上的 16 NOR Flash
  ②、接到 EIM 接口的 CS0 上的 OneNAND Flash
  ③、接到 GPMI 接口上的 MLC/SLC NAND FlashNAND Flash 页大小支持 2KByte4KByte 8KByte8 位宽。
  ④、 Quad SPI Flash
  ⑤、接到 USDHC 接口上的 SD/MMC/eSD/SDXC/eMMC 等设备。
  ⑥、 SPI 接口的 EEPROM
  这些启动设备如何选择呢? I.MX6U 同样提供了 eFUSE GPIO 配置两种, eFUSE 就不讲解了。我们重点看如何通过 GPIO 来选择启动设备,因为所有的 I.MX6U 开发板都是通过 GPIO来配置启动设备的。正如启动模式由 BOOT_MODE[1:0]来选择一样,启动设备是通过 
BOOT_CFG1[7:0]BOOT_CFG2[7:0]BOOT_CFG4[7:0]24 个配置 IO,这 24 个配置 IO 好对应着 LCD 24 根数据线 LCD_DATA0~LCDDATA23,当启动完成以后这 24 IO 就可以作为 LCD 的数据线使用。这 24 根线和 BOOT_MODE1BOOT_MODE0 共同组成了 I.MX6U 的启动选择引脚,如图所示: 

             技术图片

 

 

  通过图 9.3.1 中的 26 个启动 IO 即可实现 I.MX6U 从不同的设备启动, BOOT_MODE1 和 BOOT_MODE0 已经讲过了。看到这 24 IO 是不是头大?调整这 24 IO 的高低电平得多复杂啊?其实不然,虽然有 24 IO,但是实际需要调整的只有那几个 IO,其它的 IO 全部下拉接地即可,也就是设置为 0。打开 I.MX6U-ALPHA 开发板的核心板原理图,这 24 IO 的默认设置如图所示

             技术图片

 

 

  可以看出在图中大部分的 IO 都接地了,只有几个 IO 接高,尤其是 BOOT_CFG4[7:0] 8 IO 10K 电阻下拉接地, 所以我们压根就不需要去关注 BOOT_CFG4[7:0]。我们需要重点关注的就只剩下了 BOOT_CFG2[7:0]BOOT_CFG1[7:0]16 IO。这 16 个配置 IO 含义在原理图的左侧已经贴出来了,如图所示:

             技术图片

 

 

  上图看着是不是也很头大, BOOT_CFG1[7:0]BOOT_CFG2[7:0]16 IO 还能不能在减少呢?可以!打开 I.MX6U-ALPHA 开发板的底板原理图,底板上启动设备选择拨码开关原理图如图所示:

             技术图片

 

 

  在上 图 中 , 除 了 BOOT_MODE1 BOOT_MODE0 必 须 引 出 来 ,LCD_DATA3~LCDDATA7LCD_DATA11 6 IO 也被引出来了,可以通过拨码开关来设置其对应的高低电平,拨码开关拨到“ON”就是 1,拨到“OFF”就是 0。其中 LCD_DATA11 就是 BOOT_CFG2[3]LCD_DATA3~LCD_DATA7 就是 BOOT_CFG1[3]~BOOT_CFG1[7],这 6 IO 的配置含义如表所示:

             技术图片

 

  根据上表中的 BOOT IO 含义, I.MX6U-ALPHA 开发板从 SD 卡、 EMMCNAND 启动的时候拨码开关各个位设置方式如表所 示:

             技术图片

 

NXP(恩智浦官方提供的手册,有关 boot 启动模式讲解的很详细,我也没看全,后续有新的理解再加以补充)

           技术图片

 

以上是关于I.MX6U启动方式详解的主要内容,如果未能解决你的问题,请参考以下文章

模仿stm32开发I.MX6U

模仿stm32开发I.MX6U

模仿stm32开发I.MX6U

数据库实例开启关闭详解

s5pv210的启动方式详解

Oracle 数据库启动与关闭 各种方式详解整理