IMX6上电流程分析

最近开始学习Uboot,但是在学习Uboot时产生了一个疑惑——Uboot是怎么被加载起来的?抱着这个疑惑,分析了下IMX6ULL上电流程。

几乎所有芯片内部都有一块BootROM,或者叫RomCode。RomCode存储介质为eFUSE(熔丝,只能烧写一次)。

RomCode中会初始化部分外设,比如串口,DDR,FLASH之类。RomCode的作用有:

1、把时钟打开,配置和时钟有关的寄存器。

2、读取和启动有关的几个引脚的电平,根据这个电平确定CPU接下来要去哪里读用户代码,可以是Nand,SD卡等,这个是我们根据自己的需要进行配置的。

有些RomCode会从存储介质中读用户代码到片内RAM(OCRAM)中去,并执行该部分代码。比如三星的部分芯片。

ROMcode是真正意义上的上电首次启动的代码,一般会用BL0代称,表明为Bootloader 0。由BL0加载BL1,BL1可以是UBoot也可以是裸机程序。

那么ROMcode是怎么被加载起的呢?

在设计芯片时,规定芯片一上电,CPU会去0x00000000地址去取指令,这个地址就是BootROM的起始地址。

IMX6上电流程分析

3、从存储介质中拷贝用户代码到片内RAM(OCRAM)中

拷贝多少用户代码呢?

如下图所示:

IMX6上电流程分析

最后一列列出了初始加载的区域大小,以SD卡和EMMC这俩我们常用的大容量存储介质为例,Boot ROM程序都是先读4K到片内RAM(OCRAM)中。

这4K的数据是什么?IVT表+Boot Data+DCD表

IVT表全称是:Image Vector Table,其中存放的是各种地址信息,比如bin文件的起始地址(这个也叫镜像程序的入口地址,该地址由链接脚本指定,称为链接起始地址,可以是内部RAM也可以是外部DDR),Boot Data的地址,DCD表的地址等。

IMX6上电流程分析

Boot Data包含了整个imx文件的起始地址以及整个bin文件的大小信息。

IMX6上电流程分析


DCD表全称是:Device Config Data,其中包含的是要配置SoC的外设控制器的寄存器地址,以及要写入的值。有了DCD表,就可以初始化一部分外设了,一般要初始化外设的有GPIO,时钟,DDR。

IMX6上电流程分析

通过这4K的信息,就知道了要把真正的bin文件放到哪里去,是内部RAM还是DDR,具体大小是多少也就知道了。

如果在IMX6ULL上运行裸机程序,除了自己的c文件以外,必须还要有一个start.S这个启动文件,就类似STM32里面的启动文件。这个启动文件用于设置处理器运行模型,设置堆栈,跳转到C程序去执行。

参考资料:

IMX6ULL启动过程详解
https://blog.csdn.net/Priscilla_cola/article/details/124892098


3_IMX6ULL启动流程
https://blog.csdn.net/thisway_diy/article/details/122476595


i.MX6处理器u-boot.imx文件解析
https://blog.csdn.net/eurphan_y/article/details/105324455



原文始发于微信公众号(TreeNewBeer):IMX6上电流程分析

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115082.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!