//本文章基于HI35XX soc 与 U-boot-2010.06
从上电到加载uboot第一阶段
关于为什么不写从上电到加载bootloader,因为uboot是一种bootloader,在uboot运行之前,CPU运行的程序也是一种bootloader
uboot启动后做的工作请参考嵌入式启动顺序 - uboot
uboot 之前的启动顺序 是 1 2 或者 1 3 .
具体有多少种启动顺序
,这个是soc相关的
,也就是说一个soc制造出来
,就已经确定了有几种启动顺序
.
具体可以看soc 的芯片手册
这里只是概述出了作者见过的各种启动顺序的集合
1/上电
执行块
:索引代码
存放位置
:未知
运行位置
:未知
上序
:无
功能
:检查硬件的config
,去判断从哪里启动
,并执行对应的操作
下序
:多种可能
.可能
1:bootrom中的bootimage
.可能
2:类似sram接口的Norflash中的uboot第一阶段
.
其他
1:我也不知道他是什么
,有人说这一块是硬件电路
.但是我不确定
.
其他
2:cpu需要从sram或者norflash中取指
.这个接口必须要初始化或者这个接口根本不需要初始化
2/ 从bootrom启动
执行块
:bootImage
存放位置
:bootrom(soc中的irom
)
运行位置
:sram(也叫iram
,也叫L2 Cache
)
上序
:索引代码
功能
:
1.初始化串口
2.初始化spi接口
2.检测上位机是否发送东西
2.1.如果没有
,则从
norflash(spi接口
)上读取uboot第一阶段到sram
.
2.2.如果有
,则从串口读取数据到sram
,并尝试启动从串口来的数据
(程序
)
其他
:
1.cpu与sram的接口是不需要初始化的
.
2.cpu与irom的接口也是不需要初始化的
.
2.所以cpu可以直接读irom里面的数据到sram
.
3/ 从NorFlash(类sram接口)启动
执行块:uboot第一阶段
存放位置 :NorFlash
0x00000000处
运行位置 :NorFlash
上序 :索引代码
功能
:
uboot第一阶段的功能
其他
:
1.cpu与sram的接口是不需要初始化的
.
2.cpu与
NorFlash(类sram
)的接口也是不需要初始化的
.
2.所以cpu可以直接读NorFlash里面的数据到sram
.
综上,如果说从NorFlash启动的话,那么NorFlash与SOC(cpu)的接口一定是类SRAM接口.
存在一种特殊情况
,芯片手册上写着支持NorFlash启动
,且NorFlash是SPI接口
.其实是从bootrom启动的
.
硬件上的config
当BOOTROM_SEL
=1 时
,芯片从片内ROM 启动,将会启动串口通信机制,通过串口与PC 端相应的软件建立通
信
如果在规定时间内
,通信成功
,则开始下载boot程序
.
如果与串口通信超时,置BOOTROM_SEL为
0,并判断
BOOT_SEL1(与芯片外部管脚NF_ALE 复用
)和BOOT_SEL0(与芯片外部管脚NF_CLE 复用)的上下拉电平
.
当BOOTROM_SEL
=0、BOOT_SEL1
=1、BOOT_SEL0
=0 时,NAND Flash 启动。
当BOOTROM_SEL
=0、BOOT_SEL1
=0、BOOT_SEL0
=0 时,SPI Flash 启动。
当BOOTROM_SEL
=0、BOOT_SEL1
=0、BOOT_SEL0
=1 时,DDR 启动。
一般情况下
,一开始在硬件上都是置BOOTROM_SEL为
1