首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

DM6446的Bootloader分析(2)

DM6446的Bootloader分析(2)

三、UBL

UBL
对上与RBL交互,对下要加载运行U-Boot,再由U-Boot加载uImageDDR2中运行,最后将控制权交给操作系统。因此,UBL的重要性不言而喻。

UBL
首先完成系统时钟、DDR频率以及运行环境的初始化,然后复制U-BootDDR,并转到start_armboot
         具体设置如下:

设置引导配置寄存器BOOTCFG,使BTSEL[1:0]=00,即选择NAND Flash引导启动模式;并根据外部NAND Flash型号设置EM_WIDTH位。在RBLNAND读数据时要根据BOOTCFG的第5位(EM_WIDTH)的值来判断总线宽度和存取数据的大小,EM_WIDTH=0,数据宽度为8位(Bit);EM_WIDTH=1,数据宽度为16位。

定义NAND UBL描述符,包括魔术数、UBL入口点地址、页面数、起始块号、起始页号等。RBL首先要读取NAND Flash的设备ID以及设备存取信息(即块和页的大小、UBL标识符等,保存在设备信息表中),然后从NAND设备CIS/IDI Block之后(Block1)的第0页开始读取有效的UBL描述符。如果没有找到与默认UBL标识相匹配的UBL,就搜索下一个块,最多连续搜索5个块,以避免NAND设备开始连续的几个块存在坏块的情况(一般不会出现。NAND Flash在出厂前会保证第一块和第二块是好的);如果还是没有适合的UBL,则切换到UART启动模式。

RBL找到一个有效的UBL时,首先读取并处理UBL描述符,RBL根据描述符信息来决定是否开启EMIFExternal Memory Interface)或I-CacheInstruction-Cache)、是否采用DMA等操作。一旦具备了UBL运行条件,RBL就把UBL拷贝到AIRAM中,并跳转到起始入口地址0x00000020处运行UBL

UBL将为U-Boot建立运行环境。其主要流程如下:

DM644xInit初始化硬件平台:屏蔽所有中断,电源/休眠管理控制器复位

UARTInit串口初始化设置

PLL1Init,系统锁相环PLL1设置

PLL2InitDDR,锁相环PLL2设置

DDR2InitDDR2初始化

AEMIFInitAEMIF接口初始化

IVTInit,中断向量表初始化

NAND_InitNAND初始化,在读BOOTCFG时,如果BTSEl[1:0]=00就调用

NAND_Copy,拷贝U-Boot代码到DDR2

拷贝成功,根据NAND_BOOT::entryPoint跳转到U-Boot入口的运行

四、AIROM NAND启动过程

继承事业,薪火相传
返回列表