【u-boot-2016到s5pv210】0.1 S5PV210的启动流程

/***
开发宿主机:Window7-VMware11-Ubuntu2016.04
交叉编译器: arm-none-linux-gnueabi-4.86
应用开发板:飞凌OK210
*/

一 前言

本篇文章解决如下几个问题:

1 S5PV210是什么

2 S5PV210是怎么启动的

3 裸机点灯测试

一 S5PV210是什么

如下图所示,S5PV210只是三星ARM系统中的一种,它是基于ARMV7指令集,采用Cortex-A8是arm内核架构,主频最高可达1GHz,


【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第1张图片


关于指令集与内核框架,可参考WiKi,如下:

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第2张图片


二 S5PV210是怎么启动的

(一) S5PV210

由《S5Pv210用户手册》的第2.1章可知,内部功能框图如下图所示,采用了ARM Cortex-A8内核,ARM V7指令集,主频可达800M-1GHZ,64/32位内部总线结构,32/32KB的数据/指令一级缓存,512KB的二级缓存。S5PV210的存储控制器支持LPDDR1,LPDDR2和DDR2类型的RAM,Flash支持Nandflash,Norflash,OneNand等。另外,S5Pv210内部含有64KROM和96KSRAM。

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第3张图片

(二 )启动选择

S5PV210的启动流程,主要在《S5Pv210用户手册》的第2.6章中描述,首先,我们可以得到如下描述,即S5Pv210支持nandflash、oneNand、SD卡、eMMC、eSSD、UART/USB设备启动。

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第4张图片

接着,我们可以找到如下信息:即S5PV210的启动过程有三个步骤组成,其中,iROM是平台独立的,存储在片内内存中,即芯片应该固化好的;First boot,也是平台独立的,但是它存储在外部内存中(如nandflash\sd卡等),也就是说,这部分代码由用户去实现;second boot,是平台相关的,存储在外部内存,是真正的boot loader代码。一般称iROM过程为BL0,称First Boot Loader为BL1,称second boot loader为BL2.

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第5张图片

最后要说的是,S5pv210到底从哪里开始启动,是由外部OM(Operation Mode)引脚决定的。在《S5Pv210用户手册》中的2.1 Overview中有如下描述

ETC0, ETC1, ETC2, ETC4: 28 in/out ETC ports - JTAG, Operating Mode, RESET, CLOCK (ETC3 isreserved)

2.1.5.3 Pin Mux Description中有如下描述

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第6张图片

具体的启动设备选择,在《S5Pv210用户手册》的2.6.4中描述,具体如下表:

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第7张图片

而在OK210开发板上,有如下电路,即当Boot为高电平时,OM0-OM5对应的电平为:001100;当Boot为低电平时,OM0-OM5对应的电平为:010010。从上表可得:即正好可以通过调节Boot的电平,让其从SD卡启动或nandFlash启动

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第8张图片

(三)启动流程

1 启动

在《S5Pv210用户手册》中2.6章,给出了如下的启动流程图和过程描述,

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第9张图片

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第10张图片

上电后,首先执行BL0(1),代码位于片内64K ROM中,它初始化基本的系统函数(如时钟、堆栈等),然后加载BL1的镜像到片内96KB的SRAM中,BL1的镜像存放在由OM决定的外设中;接着执行BL1,加载BL2的镜像;最后执行BL2,在BL2的过程中,首先初始化系统时钟、UART、DRAM控制器,然后加载OS镜像到内存中,最后跳转到操作系统,开始运行系统

这里要说的是,boot的目的就是运行os,os运行后,boot就没用了,或不存在了

2 启动流程

为了更清楚的了解S5PV210的启动过程,可以查阅《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》文档。关于其启动过程,有如下描述:

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第11张图片

第零步:设置OM PIN引脚,选择启动方式,即可以通过OM引脚不同的组合,控制不同的启动方式,如从SD卡启动,emmc启动,norflash启动,具体的控制方式,在芯片手册或用户手册中有详细介绍,现假设从SD卡启动;

第一步:IROM内的代码(BL0)对SOC进行初步的初始化工作;
第二步:从SD卡中复制BL1到SOC内的SRAM,执行BL1内的代码
第三步:从SD卡中复制BL2到SOC内的SRAM,执行BL2内的代码(作用:初始化SDRAM控制器,那样就可以用DDR内存了)
第四步:把操作系统OS复制到SDRAM中
第五步:在BL2中进行一个长跳转,跳转到SDRAM中去执行程序,这样整个启动过程就完成了。


(四 )启动过程

1 BL0

BL0的启动过程如下:

【u-boot-2016到s5pv210】0.1 S5PV210的启动流程_第12张图片

第一步:关看门狗
第二步:初始化iCache
第三步:初始化栈区域
第四步:初始化堆区域
第五步:初始化块设备拷贝功能
第六步:初始化PLL并设置系统时钟
第七步:检查OM PIN引脚,看看从哪种介质(如SD/MMC)中复制BL1到SRAM,这里就和第零步的工作相照应了,选择了启动方式了
第八步:检查BL1中的checksum,如果checksum失败,就尝试以第二种启动方式启动(SD/MMC 通道2)
第九步:检查是不是安全模式启动(这步比较少应用)
第十步:跳到BL1的起始地址去执行程序

2 BL1的启动过程

主要目的是将BL2运行代码(u-boot.bin)搬运到DDR中并执行,那么为了实现此目的,需要:

初始化时钟、

初始化DDR

初始化串口(可选)

拷贝u-boot.bin到DDR

运行

具体参照

3 BL2的启动过程 

主要目的是将Kernel搬运到DDR中并执行,那么为了实现此目的,需要:

拷贝kernel(uImage)到DDR

拷贝dts到DDR(视kernel类型)

运行

具体参照

你可能感兴趣的:(ok210-uboot,ok210,u-boot-2017,s5pv210)