00 开发板启动方式选择
开发板启动流程
Linux(Cortex A系列)芯片和STM32不一样,除了能从内部Flash启动,还可以从其他多种外部介质中启动,比如SD卡,EMMC,NAND Flash等。
芯片的启动可以分为启动方式选择、启动设备选择2个问题
1.启动方式
以I.MAX6ULL为例,它的启动方式有4种,具体选择哪种由芯片上特定的引脚BOOT_MODE0和1
决定,这点和STM32类似,STM32芯片上也有BOOT0
和BOOT1
这样的引脚。
- 通常只使用方式2和3,绝对不能使用方式1。
1.1串行下载
就是通过USB或者串口将代码下载到板子上的SD卡之类的存储设备上,这个下载需要用NXP提供的软件。一般用于设备最终量产时。
1.2内部BOOT模式
该模式会执行内部的boot ROM中的代码,将一部分外设初始化(比如SD卡这样的boot设备),再从对应的boot设备中将代码拷贝到指定的RAM(一般是DDR)中运行。
1.2.1Boot ROM初始化内容
初始化时钟
初始化启动设备:启动设备由芯片对应的GPIO的高低电平决定——板子上的拨码开关
2.启动设备
启动设备如何选择每个芯片应该都不同,这部分要看数据手册/参考手册,上面有详细的介绍

3.镜像烧写
裸机开发时,编译完会生成一个.bin
文件,但该文件不能直接烧到SD卡,需要加上一个头部信息,变成.imx
格式
但是一般不需要手动加上头部信息,使用imxdownload
工具即可将bin转换成imx格式,并下载到SD卡
最终烧写的.imx
文件包含以下几个部分:
Image Vector Table(IVT):包含了ROM中一系列的地址
Boot Data:启动数据,包含了镜像要拷贝到哪个地址及镜像大小
Device Configuration Data(DCD):设备配置信息。在设备启动时,所有寄存器都会被恢复初值,DCD用来配置这些寄存器(主要是时钟、DDR3的)
用户代码可执行文件,比如
led.bin
启动时,执行内部Boot ROM时,会把这个.imx
镜像拷贝到DDR里执行