内存:

SRAM  静态内存     特点就是容量小、价格高、优点是不需要软件初始化直接上电就能用

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

单片机中:内存需求小、而且希望开发尽量简单,适合全部SRAM

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

实际上210的启动还要复杂一些,210内置了一块97KB大小的SRAM(iRAM),同时还有一块内置的64KB大小的NorFlash(iROM).

210的启动大致过程是:

第一步:CPU上电后从内部IROM中读取预先设置的代码,执行,这一段IROM代码做了一些基本的初始化(时钟初始化、关闭看门狗...)

(这一段IROM代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样DRAM,因此这一段IROM是不能负责初始化外接的DRAM的,因此这一段代码只能初始化SOC内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储去读取第一部分启动代码(BL1,16KB)到内部SRAM。

第二步:从IRAM去运行刚上一步读取来的BL1(16KB),然后执行,BL1负责初始化NANDFlash,然后将BL2读取到IRAM(剩余80KB)然后运行。

第三步:从IRAM运行BL2,BL2初始化DRAM,然后将OS读取到DRAM中,然后启动OS,启动过程结束

思路:因为启动代码的大小不是固定的,有些公司可能96KB就够了,有些公司1M都不够,所以把第二部分分为2半(BL1和BL2),这两部分协同工作来完成启动。

iROM(BL0)(64KB)是三星公司写好固化的,CPU上电从0地址开始执行

参考 博客http://blog.csdn.net/asd451006071/article/details/43088381

BL0:

关看门口

初始化指令cache

初始化栈

初始化堆

初始化块设备复制函数(用于快速从nand、nor、sd卡中把数据拷贝到ram中)(所以可以支持多种启动)

设置SoC时钟系统

复制BL1到内部IRAM(16KB)

检查BL1的校验和

跳转到BL1去执行

S5PV210的所有启动

先1st启动 ,通过OMpin选择启动介质

再2nd, 从SD2

再UART

再USB

S5PV210启动过程详解1的更多相关文章

  1. Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

    启动第一步--加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息.设备启动顺序信息.硬 ...

  2. Linux启动过程详解

    Linux启动过程详解 附上两张图,加深记忆 图1: 图2: 第一张图比较简洁明了,下面对第一张图的步骤进行详解: 加载BIOS 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的 ...

  3. Android 核心分析 之八Android 启动过程详解

    Android 启动过程详解 Android从Linux系统启动有4个步骤: (1) init进程启动 (2) Native服务启动 (3) System Server,Android服务启动 (4) ...

  4. 【STM32H7教程】第13章 STM32H7启动过程详解

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第13章       STM32H7启动过程详解 本章教 ...

  5. fabric网络环境启动过程详解

    这篇文章对fabric的网络环境启动过程进行讲解,也就是我们上节讲到的启动测试fabric网络环境时运行network_setup.sh这个文件的执行流程 fabric网络环境启动过程详解 上一节我们 ...

  6. (转)Linux 开机引导和启动过程详解

    Linux 开机引导和启动过程详解 编译自:https://opensource.com/article/17/2/linux-boot-and-startup作者: David Both 原创:LC ...

  7. linux 开机启动过程详解

    Linux开机执行内核后会启动init进程,该进程根据runlevel(如x)执行/etc/rcx.d/下的程序,其下的程序是符号链接,真正的程序放在/etc/init.d/下.开机启动的程序(服务等 ...

  8. 转-Linux启动过程详解(inittab、rc.sysinit、rcX.d、rc.local)

    http://blog.chinaunix.net/space.php?uid=10167808&do=blog&id=26042   1)BIOS自检2)启动Grub/Lilo3)加 ...

  9. [转载] Linux启动过程详解-《别怕Linux编程》之八

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket.为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. = ...

随机推荐

  1. java 多线程 day06 threadLocal

    import java.util.HashMap;import java.util.Map;import java.util.Random; /** * Created by chengtao on ...

  2. 关于source insight、添加.s和.S文件,显示全部路径、加入项目后闪屏幕

    1.source insight使用也有一年多时间了,今天出现建工程后添加文件“no files found” 百思不得姐: 后面发现是原工程命名时出现非法字符.重新命名就ok了. 切记切记 2.实用 ...

  3. 快速排序算法Java版

    网上关于快速排序的算法原理和算法实现都比较多,不过java是实现并不多,而且部分实现很难理解,和思路有点不搭调.所以整理了这篇文章.如果有不妥之处还请建议.首先先复习一些基础.    1.算法概念. ...

  4. AngularJS 笔记之创建服务方式比较 : factory vs service vs provider 。

    首先说一下服务这个东西是用来干嘛的.很多时候我们把太多的数据和逻辑都一股脑儿地往 controller 里放.这样我们的 controller 原来越臃肿.从它们的生命周期可以发现,其实 contro ...

  5. T25健身视频全集+课表

    http://jianfei.39.net/thread-3639251-1.html T25健身视频全集+课表 强度适中 不伤膝盖! [复制链接]     zytttt         主题 好友 ...

  6. PAT 天梯赛 L1-007. 念数字 【水】

    题目链接 https://www.patest.cn/contests/gplt/L1-007 AC代码 #include <iostream> #include <cstdio&g ...

  7. HDU 3966 Aragorn's Story (树链剖分入门题)

    树上路径区间更新,单点查询. 线段树和树状数组都可以用于本题的维护. 线段树: #include<cstdio> #include<iostream> #include< ...

  8. GPU:并行计算利器

    http://blog.jobbole.com/87849/     首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他技术 - 导航条 - 首页 最新文章 IT 职场 前端 - Ja ...

  9. 外部类与main方法笔记

    外部类 1. 外部public class只能有一个 2. 外部类只能有两种访问控制级别: public 和默认 3. 一个文件中,可以有多个public class,即外部类为public,还可以有 ...

  10. Java_Chapter6_类与对象

    6.1 类与对象的概念 6.2 定义类 class Cylinder { double radius; int height; double pi; void setCylinder(double r ...