一、硬件启动方式选择
1、启动方式的选择
LED灯实验,是从SD卡读取bin文件并启动,说明6UL支持从SD卡启动。6ULL支持多种启动方式。
6ULL是怎么支持从多种外置flash启动程序的。(阅读6ULL参考手册第8章)
启动方式选择(8.2.1章):
BOOT_MODE0和BOOT_MODE1,这两个是两个IO来控制的。选择从USB启动还是内部BOOT启动。如果要烧写系统到开发版中可以选择从USB下载或者下载到SD卡、EMMC、NADN等外置存储中。烧写完成以后从内部BOOT启动,然后从相应的外置存储中启动。
2、启动设备的选择
前提是,你设置MODE1和MODE0是从内部BOOT启动的,也就是MODE1=1,MODE0=0。
支持哪些设备:
NOR flash、oneNAND、NAND flash、QSPI flash、SD/EMMC、EEPROM。我们最常用的就是NAND、SD、EMMC甚至QSPI flsah。
如何选择启动设备(8.3 - 8.5章):
通过BOOT_CFG选择,有BOOT_CFG1、2、4,每个8位。BOOT_CFG是由LCD_DATA0 - 23来设置的。在ALPHA开发版上,大部分默认都47k接地。BOOT_CFG4的8根线全部接地,BOOT_CFG2除了BOOT_CFG2[3]全部接地,BOOT_CFG2[3],此位用作选从哪个SD启动。BOOT_CFG1的0、1、2都是定死的,主要关注3-7银角。
BOOT_CFG1[3]只是启动速度,基本只选择1(正常启动),在启动芯片上也基本只选下面3种启动存储介质,所以只需要关注存储介质是什么和存储介质里内存块的数量就可以了。(详细需要阅读IMX6ULL参考手册)
正点原子开发版BOOT电路设置。核心板LCD_DATA0 - 23基本47K下拉。
3、启动头文件
1、Boot Rom做的事情
设置内核时钟为396MHZ,使能MMU和Cache,使能L1cache、L2cache、MMU,目的就是为了加速启动。
从BOOT_CFG设置的外置存储中,读取imafge,然后做相应的处理。
2、IVT和Boot Data数据
Bin文件前面要添加头部。可以得到,我们烧写SD卡中的load.imx文件在SD卡中的起始地址是0x400,也就是1024。(8.7.1章)
头部大小为3kb,加上偏移的1kb,一共是4kb,因此在SD卡中的起始地址为4096。
IVT大小为32B/4 = 8条
3、DCD数据
DCD数据就是配置6UL内部寄存器的。
首先,将CCRG0 - CCRG6全部写为0XFFFFFFFF,表示打开所有时钟。然后就是DDR初始化参数。