02. IMX启动方式

02. IMX启动方式

  • 硬件启动方式的选择
    • 启动方式的选择
      • 串行下载
      • 内部BOOT模式
    • 启动设备的选择
  • 启动头文件
    • BOOT ROM做的事情
    • IVT和BOOT Data数据
  • DCD数据
  • 其他的数据

硬件启动方式的选择

启动方式的选择

6ULL是怎么支持从多种外置flash启动程序的?
BOOT_MODE0和BOOT_MODE1,这两个IO控制的,选择从USB启动还是从内部BOOT启动。如果要烧写系统到开发板中可以选择从USB下载到SD卡、EMMC等外置存储中。烧写完成后从内部BOOT启动,然后从相应的外置存储中启动。

02. IMX启动方式_第1张图片
上表中的四个方式,一般只用到2和3

串行下载

01时,表示可以通过USB或者UART将代码下载到板子的外置存储设备中,可以使用OTG1向SD、EMMC、NAND等存储设备下载代码

内部BOOT模式

10时,表示芯片会执行内部的boot ROM代码,这段代码会进行硬件初始化,然后从boot设备(就是存放代码的设备,如SD)中将代码拷贝到指定的RAM中,一般时DDR。
初始化时,会将主频设置为396MHz。内部boot ROM为了加快执行速度会打开MMU和cache,下载镜像时 L1 ICache 会打开,验证镜像的时候 L1 DCache、 L2 Cache 和 MMU 都会打开。一旦镜像验证完成, boot ROM就会关闭 L1 DCache、 L2 Cache 和 MMU。
中断向量偏移会被设置到boot ROM起始位置,当boot ROM启动了用户代码后就可以重新设置中断向量偏移了。一般是重新设置到用户代码开始的地方。

启动设备的选择

前提是设置MODE1和MODE0是从内部BOOT启动的,也就是MODE1=1,MODE0=0。通过BOOT_CFG,有1、2、4,每个有8位,BOOT_CFG是由LCD_DATA0~23来设置的。在ALPHA上,大部分默认都47k下拉接地。BOOT_CFG4的8根全部接地。BOOT_CFG2全部接地,除了BOOT_CFG2[3],用来选择SD卡接口,因为6ULL支持两个SD卡接口。BOOT_CFG1的0、1、2全部定死,3是设置速度的,一般直接选择0,为高速;7654选择启动设备。
02. IMX启动方式_第2张图片

启动头文件

BOOT ROM做的事情

设置内核时钟为396MHz,使能MMU和cache,使能L1cache L2cache MMU,目的就是加速启动。从BOOT_CFG设置的外置存储中,读取image,然后做相应的处理

IVT和BOOT Data数据

bin文件前面需要添加头部,我们烧写到SD卡中的imx文件在SD卡中的起始地址是0x400,也就是1024。头部大小为3k,加上偏移地址,因此在SD卡中bin文件的起始地址是4096

DCD数据

DCD数据就是配置6ULL内部寄存器的。首先,将CCGR0~CCGR6全部写为0xFFFFFFFF,表示打开所有外设时钟,然后就是DDR初始化参数,设置DDR控制器,也就是初始化DDR。

其他的数据

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

你可能感兴趣的:(嵌入式裸机ARM驱动开发,嵌入式硬件)