• led灯实验是从sd卡读取bin文件,再启动。
  • 利用开发板的拨码开关来选择开发板提供的四种启动方式 ( 2位定4 ) ,6ull支持更多启动方式


1、启动方式选择

一种是改写eFUSE熔丝(只能改一次),另一种就是改GPIO高低电平(B_M0 , B_M1)

BOOT_MODE0

BOOT_MODE1

这两个是由两个IO来控制的

从开发板拨码开关左边一开始,先是BOOT_MODE1,然后是BOOT_MODE0

imx6ull的uboot的emmc配置_启动方式


选择从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 基本都是下,底板上有上拉。
详细见参考手册第八章,以及教程。

imx6ull的uboot的emmc配置_启动方式_02


imx6ull的uboot的emmc配置_sd卡_03


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,但本次没写)

  • 头部

imx6ull的uboot的emmc配置_启动方式_04


imx6ull的uboot的emmc配置_sd卡_05


imx6ull的uboot的emmc配置_sd卡_06


imx6ull的uboot的emmc配置_开发板_07