朱老师ARM裸机学习笔记(四):S5PV210启动过程详解

常用器件特性

内存:
SRAM 静态内存 特点就是容量小、价格高,优点是不需要软件初始化直接上电就能用
DRAM 动态内存 特点就是容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用。

单片机中:内存需求量小,而且希望开发尽量简单,适合全部用SRAM
嵌入式系统:内存需求量大,而且没有NorFlash等可启动介质
PC机: 内存需求量大,而且软件复杂,不在乎DRAM的初始化开销,适合全部用DRAM

外存:
NorFlash:特点是容量小,价格高,优点是可以和CPU直接总线式相连,CPU上电后可以直接读取,所以一般用作启动介质。
NandFlash(跟硬盘一样):特点是容量大,价格低,缺点是不能总线式访问,也就是说不能上电CPU直接读取,需要CPU先运行一些初始化软件,然后通过时序接口读写。

所以一般PC机都是:很小容量的BIOS(NorFlash)+ 很大容量的硬盘(类似于NandFlash)+ 大容量的DRAM
一般的单片机: 很小容量的NorFlash + 很小容量的SRAM
嵌入式系统:因为NorFlash很贵,所以现在很多嵌入式系统倾向于不用NorFlash,
直接用:外接的大容量Nand + 外接大容量DRAM + SoC内置SRAM

S5PV210使用的启动方式是:外接的大容量Nand + 外接大容量DRAM + SoC内置SRAM

S5PV210启动过程详解

概述

关于S5PV210的启动过程和方式,samsung专门提供了一份文档,《S5PV210_iROM_Application Note》,以下启动过程分析大多翻译自这本手册。
朱老师ARM裸机学习笔记(四):S5PV210启动过程详解_第1张图片
在这张图中可以看出S5PV210的启动可大致分为五个步骤
1、iROM阶段(BL0)
2、BL1阶段
3、BL2阶段
4、拷贝OS到SDRAM
5、启动OS

samsung在S5PV210内部的IROM中固化了一段代码,用于初始化时钟,识别用户选择的启动模式,并从相应的地方拷贝boot-loader第一阶段代码到SRAM中运行。此外samsung在S5PV210内部也集成了96KB的内部SRAM,由于SRAM不需要初始化,上电就能使用,因此可当作DRAM初始化之前的代码运行空间。

iROM都做了些什么?

1、关闭看门狗;
2、初始化icache;
3、初始化栈;
4、初始化堆;
5、初始化块设备拷贝函数
6、初始化PLL,设置系统时钟;
7、拷贝BL1到内部的SRAM区域;
8、检查BL1的校验和;
9、检查是否是安全启动模式;
10、跳转到BL1的起始代码处。

刚开始看S5PV210的启动过程时有一个地方一直想不明白:Boot-loader代码都在Flash中存储着,iROM是怎么不初始化Flash并将BL1拷贝到SRAM中运行的(Nand Flash 的初始化代码在BL1阶段才执行),后来通读了《S5PV210_iROM_Application Note》后才明白。iROM中固化了一系列的块设备拷贝函数,这个块设备拷贝函数,就是用来初始化不同种Nand并拷贝代码的,关于这些函数手册2.7节有介绍
朱老师ARM裸机学习笔记(四):S5PV210启动过程详解_第2张图片

S5PV210启动流程图

朱老师ARM裸机学习笔记(四):S5PV210启动过程详解_第3张图片
从图可以看出210在启动的时候首先会判断,系统是从休眠中唤醒还是刚上电,从而决定是重新引导系统还是直接跳转到OS继续执行休眠前的代码。

然后还有一个”Checksum OK?”的判断,如果BL1的代码检验出错会自动跳转尝试用“2nd”方式启动

S5PV210还提供了一个”Secure Boot” 安全启动的模式。

S5PV210提供多种启动方式,其中”1st启动”可以通过引脚选择,当”1st启动”失败后会尝试从”2nd启动”,也就是从SD卡通道2,通过SD卡启动方式启动。如果”2nd启动”仍然失败,会尝试从“Uart boot”启动,如果仍然失败将会尝试从 “USB boot”启动。

iROM 2nd boot-up sequence when 1st bootfail (当1st启动失败后的2nd启动流程)

朱老师ARM裸机学习笔记(四):S5PV210启动过程详解_第4张图片

启动方式选择引脚的配置

朱老师ARM裸机学习笔记(四):S5PV210启动过程详解_第5张图片

bootloader、Kernel、filesystem等在nand中的分布

朱老师ARM裸机学习笔记(四):S5PV210启动过程详解_第6张图片

S5PV210的启动方式很多种,第一次学习的理解就这么多,做个记录,相信随着学习的深入理解也会不一样,到时候再回来更新。

你可能感兴趣的:(ARM内核和驱动)