IMX6ULL system boot

 1、芯片上电运行的第一段代码

on-chip boot ROM 的 boot ROM code

2、boot mode

boot ROM code通过寄存器BOOT_MODE[0:1]的值决定启动方式。

boot mode被寄存器BOOT_MODE[0:1]控制,寄存器BOOT_MODE[0:1]被引脚BOOT_MODE0和BOOT_MODE1控制。

 

 

Serial Downloader

on-chip boot ROM 放着芯片自带的 boot ROM code,boot ROM code可以通过 USB 或者 UART 接收简单的配置固件(a provisioning program)到 RAM,然后运行配置固件,配置固件可以通过 USB 或者 UART 接收镜像文件到 SD/MMC flash(boot devices)。

Internal Boot

boot ROM code初始化基本硬件后,从选中的boot device加载镜像文件,验证完镜像文件后运行镜像文件。

如果BT_FUSE_SEL等于1,启动参数由寄存器 eFUSEs 决定(产品用)

如果BT_FUSE_SEL等于0,启动参数 GPIOs 决定(开发测试用)

Boot From Fuses

 如果BT_FUSE_SEL等于0,表示boot device还没下载镜像文件,会进入 Serial Downloader 模式。

如果BT_FUSE_SEL等于1,转到 Internal Boot

Boot From Fuses有一个优点:BT_FUSE_SEL出厂默认是0,通过 Serial Downloader 模式批量下载镜像文件到 boot device,并修改BT_FUSE_SEL为1,重启后直接从boot device启动,省去了修改BOOT_MODE0和BOOT_MODE1引脚电平改变boot mode模式。

3、Device Configration

启动参数

boot ROM code读取启动参数,来决定如何运行代码。

启动参数:

  - 决定选择哪个boot device

  - boot device的配置(比如 SD总线宽度、支持的速率)

DCD

DCD参数存放在镜像文件中

4、boot device

SD

SD卡的数据结构如下,uboot和其他数据(比如IVT、DCD)组成Program Image,从地址0x00000400开始存,其中IVT放最前面

 

 由下表可知,IVT的起始地址是0x400,和上图对应上

 

IVT的格式如下,包括header、entry等

entry: Application(也就是uboot)在DDR的绝对地址

boot data start: IVT绝对地址-IVT offset,以SD举例则是将MBR包含在内

Boot Device Memory里的entry记录的是Application的目的地址,不需要指定Application在SD卡的源地址是因为由上图可知,Boot Device Memory的内容是原原本本搬进 Dest. Memory,Application在SD卡的存储地址等于entry-boot data start。

疑问:哪里写了Initial Load Regions是拷贝到OCRAM

 

posted @ 2022-11-20 21:11  流水灯  阅读(200)  评论(0编辑  收藏  举报