嵌入式启动顺序 - uboot之前

xiaoxiao2021-02-28  68

//本文章基于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,并尝试启动从串口来的数据(程序)//该路径不会执行到uboot第一阶段 其他: 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
转载请注明原文地址: https://www.6miu.com/read-78277.html

最新回复(0)