2、I.MX6ULL学习笔记一I.MX启动方式

一、硬件启动方式选择

  I.MX6U 支持多种启动方式以及启动设备,比如可以从 SD/EMMC、NAND Flash、QSPI Flash等启动。用户可以根据实际情况,选择合适的启动设备。

1.启动方式选择

  BOOT_MODE0和BOOT_MODE1这两个是两个IO来控制的。选择从USB启动还是内部BOOT启动。如果要烧写系统到开发板中可以选择从USB下载,下载到SD卡、EMMC、NAND等外置存储设备中。烧写完成设置从内部BOOT启动,然后从相应的外置存储中启动。

BOOT_MODE[1:0]BOOT Type
00Boot From Fuses(从FUSE启动)
01Serial Downloader(串行下载器)
10Internal Boot(内部启动)
11Reserved(保留)

①、串行下载器
  当 BOOT_MODE1 为 0,BOOT_MODE0 为 1 的时候此模式使能,串行下载的意思就是可以通过 USB 或者 UART 将代码下载到板子上的外置存储设备中,我们可以使用 OTG1 这个 USB口向开发板上的 SD/EMMC、NAND 等存储设备下载代码。
②、内部BOOT启动
  当 BOOT_MODE1 为 1,BOOT_MODE0 为 0 的时候此模式使能,在此模式下,芯片会执行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设 备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中,一般是 DDR。

2、启动设备选择

  当 BOOT_MODE 设置为内部 BOOT 模式以后,可以从以下设备中启动:
   ①、接到 EIM 接口的 CS0 上的 16 位 NOR Flash。
   ②、接到 EIM 接口的 CS0 上的 OneNAND Flash。
   ③、接到 GPMI 接口上的 MLC/SLC NAND Flash,NAND Flash 页大小支持 2KByte、4KByte和 8KByte,8 位宽。
   ④、Quad(四线) SPI Flash
   ⑤、接到 USDHC 接口上的 SD/MMC/eSD/SDXC/eMMC 等设备。
   ⑥、SPI 接口的 EEPROM。
  上面高亮部分为常用设备。
  如何选择启动设备?
  通过BOOT_CFG选择,有BOOT_CFG1\2\4,每个8位。BOOT_CFG是由LCD_DATA0~23来设置的。在ALPHA开发板上,大部分都默认通过47k电阻下拉接地。BOOT_CFG4的8根线全部接地。
在这里插入图片描述
  BOOT_CFG2的8根线全部接地,除了BOOT_CFG2[3] (LCD DATA11),此位用来选择SD卡启动接口。为 0 时从 SDHC1 上的 SD/EMMC 启动,为 1 时从SDHC2 上的 SD/EMMC 启动。
在这里插入图片描述
  BOOT_CFG1的0、1、2都是顶死的,3、4、5、6、7是可以设置的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  I.MX6U-ALPHA 开发板从 SD 卡、EMMC、NAND 启动的时候拨码开关各个位设置方式如表:

12345678启动设备
01XXXXXX串行下载,可以通过 USB 烧写镜像文件
10000010SD 卡启动
10100110EMMC启动
10001001NAND FLASH 启动

二、启动头文件

  学习 STM32 的时候我们可以直接将编译生成的.bin 文件烧写到 STM32 内部 flash 里面,但是 I.MX6U 不能直接烧写编译生成的.bin 文件,我们需要在.bin 文件前面添加一些头信息构成满足 I.MX6U 需求的最终可烧写文件,I.MX6U 的最终可烧写文件组成如下:
  ①、Image vector table,简称 IVT,IVT 里面包含了一系列的地址信息,这些地址信息在ROM 中按照固定的地址存放着。
  ②、Boot data,启动数据,包含了镜像要拷贝到哪个地址,拷贝的大小是多少等等。
  ③、Device configuration data,简称 DCD,设备配置信息,重点是 DDR3 的初始化配置。
  ④、用户代码可执行文件,比如 led.bin。
  可以看出最终烧写到 I.MX6U 中的程序其组成为:IVT+Boot data+DCD+.bin。load.imx 在用户代码前面又有 3KByte 的 IVT+Boot Data+DCD 数据,下面会讲为什么是 3KByte,因此 load.imx 在 DDR 中的起始地址就是 0X87800000-3072=0X877FF400。

1、Boot Rom做的事情

  设置内核时钟为396MHz。使能MMU(Memory Management Unit内存管理单元)和caches,使能L1 data cache、L2 cache 和MMU,目的是加速启动。

2、IVT和Boot Data数据

  load.imx 最前面的就是 IVT 和 Boot Data,IVT 包含了镜像程序的入口点、指向 DCD 的指针和一些用作其它用途的指针。内部 Boot ROM 要求 IVT 应该放到指定的位置,不同的启动设备位置不同,而 IVT 在整个 load.imx 的最前面,其实就相当于要求 load.imx 在烧写的时候应该烧写到存储设备的指定位置去。整个位置都是相对于存储设备的起始地址的偏移,如图:
在这里插入图片描述
  以 SD/EMMC 为例,IVT 偏移为 1Kbyte,IVT+Boot data+DCD 的总大小为 4KByte(初始负荷区域大小Initial Load Region Size)- 1KByte=3KByte。假如 SD/EMMC 每个扇区为 512 字节,那么 load.imx 应该从第三个扇区开始烧写,前两个扇区要留出来。load.imx 从第 3KByte 开始才是真正的.bin 文件。

  Bin文件前面要添加头文件。可以得到,我们烧写到SD卡中的 load.imx 文件在SD卡中的起始地址是 0x400,也就是1024。否则会损坏SD卡。
  头部文件大小3KB,加上偏移的1KB,一共有4KB,因此在SD卡中Bin文件起始地址为4096。
  IVT(Image vector table图像矢量表)大小为 32B/4=8条

3、DCD数据

Device configuration data,DCD(设备配置信息)配置6ULL内部寄存器。
首先,将CCGR0-CCGR6全部写为0xFFFFFFFF,表示打开所有外设时钟,然后就是DDR初始化参数。设置DDR控制器,也就是初始化DDR。

4、其他的数据

检查数据命令、NOP命令、解锁命令。这些其实也是属于DCD。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值