一、硬件启动方式选择
6ULL是怎么支持从多种外置flash 启动程序的。参考手册chapter 8 :system boot (系统启动)
1、启动方式选择
常用的是01和10。BOOT_MODEO和BOOT_MODE1,这两个是两个来控制的。选择从USB启动还是内部BOOT启动。如果要烧写系统到开发板中可以选择从USB 下载,下载到SD卡,EMMCNADN等外置存储中。烧写完成设置从内部 BOOT 启动,然后从相应的外置存储中启动。
可 通过拨动拨码开关来选择不同的启动方式。LED灯实验,是从SD卡读取 bin 文件并启动,说明6UL 支持从SD 卡启动。6ULL 支持多种启动方式。
IMX6ULL_ALPHA核心板原理图
拨码开关原理图:IMX6ULL_ALPHA_V(底板原理图)
2、启动设备选择
参考手册8.5Boot devices (internal boot)
前提是,你设置 MODE1和 MODE0是从内部 BOOT 启动的,也就是 MODE1=1,MODE0=0
只有设置了内部启动才需要选择启动设备。
支持NOR flash,oneNAND、NAND Flash、QSPIflash、SD/EMMC、EEPROM。我们最常用的就是NAND、SD、EMMC 甚至QSPI Flash。
如何选择启动设备,通过BOOT_CFG来选择,有BOOT_CFG1、2、4,每个8位。BOOT_CFG是由LCD_DATA0-23来设置的。在ALPHA开发板上,大部分默认都47K下拉电阻接地。BOOT_CFG4的8根线全部接地,BOOT_CFG2全部接地,除了BOOT_CFG2[3],此位用来选择SD卡启动接口。BOOT_CFG1[0]、[1]、[2]都是固定的,[3]、[4]、[5]、[6]、[7]是可以设置的。
正点原子开发板BOOT 电路设置。核心板 LCD_DATA0-23 基本47K下拉。·
核心板原理图:
二、启动头文件
在LED裸机实验中,我们需要再生产的.bin文件前面添加一个头文件,否则直接将.bin文件烧录到SD卡里面是无法启动的。当选择BOOT_MODE0和BOOT_MODE1的时候,我们选择从内部BOOT ROM启动的时候(内部BOOT模式)。当我们设置 BOOT 模式为“内部 BOOT 模式”以后,I.MX6U 内部的 boot ROM 代码就会执行,这个 bootROM 代码都会做什么处理呢?首先肯定是初始化时钟。
1、 Boot Rom做的事情:
这个ARM PLL是供6ULL A7内核的。所以要设置的时钟为396MHZ,使能 MMU 和 Cache,使能 L1cache L2 cache MMU,目的就是为了加速启动。
从BOOT_CFG设置的外置存储中,读取 image,然后做相应的处理。
2、 IVT和Boot Data数据
Bin 文件前面要添加头部。可以得到,我们烧写到SD 卡中的 load.imx文件在SD卡中的起始地址是0x400,也就是1024。头部信息是3K,3*1024bit。
3、 DCD数据
复位默认的数据都不是我们想要的所以我们要配置,典型的就是DDR。.bin头部里面包含初始化DDR
其他数据:检查数据命令、NOP 命令、解锁命令。这些其实也都属于 DCD。