- led灯实验是从sd卡读取bin文件,再启动。
- 利用开发板的拨码开关来选择开发板提供的四种启动方式 ( 2位定4 ) ,6ull支持更多启动方式
–
1、启动方式选择
一种是改写eFUSE熔丝(只能改一次),另一种就是改GPIO高低电平(B_M0 , B_M1)
BOOT_MODE0
BOOT_MODE1
这两个是由两个IO来控制的
从开发板拨码开关左边一开始,先是BOOT_MODE1,然后是BOOT_MODE0
–
选择从usb启动还是内部boot启动,
如果要烧写code到开发板内部,可以选择从usb下载。
下载到sd card ,emmc,nand等外置存储中,设置从内部boot启动,烧写完成后,从相应的外置存储中启动
2、启动设备选择
前提是,设置 MODE1 和 MODE0 是从内部boot启动的,也就是设置为MODE1=1,MODE0=0。
可以通过eFUSE配置,也可以GPIO配置。(这里只用GPIO配置)
通过拨码开关来将某些GPIO设置为高低电平
设置内部启动时,支持哪些设备:
nor flash(现在很少用了),oneNand flash,NAND flash,QSPI flash,SD/EMMC,EEPROM
现在最常用的时nand,sd,emmc
如何选择启动设备:
通过BOOT_CFG来选择,有BOOT_CFG1,BOOT_CFG2,BOOT_CFG4.每个8位。
BOOT_CFG是由LCD_DATA0 ~ 23来设置的,再alpha开发板上,大部分默认都47k接地。
BOOT_CFG4的8根线全部接地;BOOT_CFG2的8根线全部接地,BOOT_CFG2 [ bit3 ] 较为重要,此位用来选择sd卡启动接口(eSDHC1,eSDHC2),BOOT_CFG2对应第三个拨码开关;BOOT_CFG1(0,1,2定死的。bit 3,4,5,6,7可以设置的)
–
在核心板上,正点原子开发板 BOOT / 启动 电路设置。核心板 LCD_DATA0 - 23 基本都是下拉,底板上有上拉。
详细见参考手册第八章,以及教程。
image最终会被copy到ram里面去
- 启动头文件
IVT + BOOT DATA + DCD = 3KB
1、BOOT ROM做的事
设置内核时钟为 396 MHz
为了加速启动,下载、验证镜像时会打开 MMU 和 Cache(L1,L2 Cache ) ,验证完成再关闭 MMU 和 Cache
从BOOT_CFG 设置的外置存储中,读取image,做相应的处理
2、IVT 和 BOOT DATA 数据
bin文件要添加头部,
烧写到sd卡中的load.imx在sd卡中的起始地址是 0x400,也就是 1kb ,(sd卡前512B保存的是分区信息,写了卡报废)
头部大小是3kb,将是偏移的1kb,一共是4kb
因此,在sd card 中,bin文件的起始地址为4kb
IVT大小为32B ,共8 条信息,一条四个字节
–
BOOT DATA区域的size不定,但在IVT指定了DCD的地址,那么三块区域的位置都可以确定。
–
DCD: device configure data
就是配置6ull内部寄存器的
首先将CCGR0 ~ CCGR6 置1,打开所有时钟
设置DDR的工作模式位DDR3…
…
…都是和ddr相关的
其它的就是检查数据命令,NOP命令,解锁命令…(也都属于dcd,但本次没写)
- 头部