一、内存

  • 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启动方式

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

实际上 210 的启动还要更好玩一些,210 内置了一块 96KB 大小的 SRAM(叫 iRAM),同时还有一块内置的 64KB 大小的 NorFlash(叫 iROM)。

210 的启动过程大致是:
第一步:CPU 上电后,先从内部 IROM(NOR Flash)中读取预先设置的代码,执行。这一段 IROM 代码首先做了一些基本的初始化(CPU时钟、关看门狗···)(这一段 IROM 代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的 DRAM 内存,因此这一段 IROM 是不能负责初始化外接的 DRAM 内存 的,因此这一段代码只能初始化 SoC 内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取启动代码到内部 SRAM(叫 iRAM)。

第二步:从 SRAM(叫 iRAM) 去运行刚上一步读取来的启动代码,然后执行。这一段启动代码就会负责初始化 Nand Flash 硬盘, 初始化 DRAM 内存 ,初始化板卡,然后将 OS 从 Nand Flash 硬盘读取到 DRAM 内存 , 然后运行。



思路:因为启动代码的大小是不定的,有些公司可能 96kb 就够了,有些公司可能 1MB 都不够。所以刚才说的两步的启动方式不合适。三星的解决方案是:把启动代码分为两半(BL1 和 BL2),这两部分协同工作来完成启动。

实际的启动方式如下:

第一步:CPU 上电后先从内部 IROM 中读取预先设置的代码(BL0),执行。这一段 IROM 代码首先做了一些基本的初始化(CPU 时钟、关看门狗···)(这一段 IROM 代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的 DRAM 内存,因此这一段 IROM 是不能负责初始化外接的 DRAM 内存的,因此这一段代码只能初始化 SoC 内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取第一部分启动代码(BL1,大小为16KB)到内部 SRAM(叫 iRAM)。
第二步:从 SRAM(叫 iRAM)去运行刚上一步读取来的 BL1(16KB),然后执行。BL1 负责初始化 NandFlash 硬盘,然后将 BL2 读取到 SRAM(叫 iRAM)(剩余的 80KB)然后运行
第三步:从 SRAM(叫 iRAM)运行 BL2,BL2 初始化 DRAM 内存,然后将 OS 读取到 DRAM 内存中,然后启动 OS,启动过程结束。

device copy function 的解释

The S5PV210 internally has a ROM code of block copy function for boot-u device. Therefore, developer may not needs to
implements device copy functions. These internal functions can copy any data from memory devices to SDRAM. User can
use these function after ending up the internal ROM  boot process completely.S5PV210内部有一个用于引导-u设备的块拷贝功能的ROM代码。因此,开发人员可能不需要实现设备复制功能。
这些内部函数可以将任何数据从内存设备复制到SDRAM。用户可以在完全结束内部ROM启动过程后使用这些功能。

也就是, IROM 代码(BL0)拥有针对各种启动介质(NOR Flash/eSSD/OneNand/Nand Flash)的块拷贝函数。因此,开发人员可能不需要实现设备复制功能。这些内部函数可以将任何数据从启动介质设备复制到SDRAM。用户可以在完全结束 IROM(BL0)阶段后使用这些拷贝函数,将 BL1 代码拷贝到 IRAM(internel SRAM)中执行。



五、S5PV210启动过程概述

1、210内部有 iROM 和 iRAM,因此启动时分两个阶段:内部启动阶段和外部启动阶段。对于内部启动阶段各种S5PV210的开发板都是相同的,对于外部启动阶段,不同开发板会有不同。
启动过程主要参考《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》


2、S5PV210出厂时内置了 64KB iROM和 96KB iRAM。iROM 中预先内置烧录了一些代码(称为 iROM 代码),iRAM 属于 SRAM(不需软件初始化,上电即可使用)。210启动时首先在内部运行 iROM 代码,然后由 iROM 代码开启外部启动流程。

为什么需要设计 iROM 和 iRAM?答案是为了支持多种外部设备启动。


3、Second boot support

  • When 1 st boot mode fails, SD/MMC boot will be tried through SD/MMC channel 2 with 4-bit data
  • 当第一启动模式失败时,SD/MMC卡启动模式下将会从SD/MMC2通道尝试再次启动。
  • 这种二级启动是一种冗余设计。SoC 中第一启动介质故障而导致不能启动时,可以从备用启动介质启动。


4、使用 iROM 启动的好处

  • 降低BOM成本。因为 iROM 可以使 SOC 从各种外设启动,因此可以省下一块 boot rom(专门用来启动的rom,一般是norflash)
  • 支持各种校验类型的nand flash
  • 可以在不使用编程器的情况下使用一种外部存储器运行程序来给另一种外部存储器编程烧录。这样生产时就不用额外购买专用编程器了,降低了量产成本。

5、BL0做了什么?

  • 关看门狗
  • 初始化指令 cache
  • 初始化栈
  • 初始化堆
  • 初始化块设备复制函数 device copy function
  • 设置 SoC 时钟系统
  • 复制 BL1 到内部 IRAM(16KB)
  • 检查 BL1 的校验和
  • 跳转到 BL1 去执行

6、S5PV210的所有启动

  • 先1st启动,通过OMpin选择启动介质
  • 再2nd启动,从SD2
  • 再Uart启动
  • 再USB启动

7、启动块分配指南

可以看到,对于 SD卡、MMc、eSSD的启动介质,BL1 代码应该拷贝到启动介质的 1 号扇区;
而对于其他启动介质,BL1 代码应该拷贝到启动介质的 0 号扇区。


8、 Header information data for Boot Code description

The BL1 must have header data. The header data is used for being copied to internal SRAM by iROM code.
The header data has two information. One is size of BL1 and Another is checksum data of BL1.BL1必须有报头数据。报头数据被用于通过iROM代码复制到内部SRAM。头数据有两个信息。一个是BL1的大小,另一个是BL1的校验和数据。

When loading BL1, iROM check size of BL1 in header data and copy BL1 to internal SRAM.
After coping BL1, iROM sum data of copied BL1 and compare it to checksum data in header data of BL1.
If it is success, BL1 start. otherwise iROM will try second boot(4-bit SD/MMC) from SDMMC channel 2 port.当加载BL1时,iROM检查头数据中BL1的大小,并将BL1复制到内部SRAM。拷贝BL1后,将复制的BL1的iROM数据求和,并将其与BL1头数据中的校验和数据进行比较。如果成功,BL1开始。否则iROM将尝试从SDMMC通道2端口进行第二次引导(4位SD/MMC)。


B站朱友鹏老师.
参考文档:
《S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf》
《S5PV210_UM_REV1.1.pdf》

ARM S5PV210的启动过程相关推荐

  1. arm linux内核启动过程,ARM64的启动过程之(一):内核第一个脚印

    ARM64的启动过程之(一):内核第一个脚印 作者:linuxer 发布于:2015-10-10 15:06 分类:ARMv8A Arch 一.前言 kernel的整个启动过程涉及的内容很多,不可能每 ...

  2. S5PV210的启动过程

    初步认识IROM和IRAM S5PV210含有一个内64K的IROM和96K的IRAM,系统启动时主要依靠它们,IROM和IRAM所处的存储空间见下图: S5PV210有IROM,且只能从IROM启动 ...

  3. S5PV210的启动过程:三星推荐的启动方式和uboot的实现方式不同

    三星推荐的启动方式中: (1)bootloader必须小于96KB并大于16KB,假定bootloader为80KB: (2)开机上电后BL0运行,BL0会加载外部启动设备中的bootloader的前 ...

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

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

  5. ARM linux的启动部分源代码简略分析

    ARM linux的启动部分源代码简略分析 以友善之臂的mini2440开发板为平台,以较新的内核linux-2.6.32.7版本为例,仅作说明之用. 当内核映像被加载到RAM之后,Bootloade ...

  6. Android启动过程深入解析【转】

    转自:http://www.open-open.com/lib/view/open1403250347934.html 当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么 ...

  7. Android启动过程深入解析

    当按下Android设备电源键时究竟发生了什么? Android的启动过程是怎么样的? 什么是Linux内核? 桌面系统linux内核与Android系统linux内核有什么区别? 什么是引导装载程序 ...

  8. S5PV210开发 -- 启动流程

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78433564 讲完启动模式.烧写更新,接下来我们看一下启动流程. 参看:S5 ...

  9. ARM linux的启动部分源代码简略分析【转】

    转自:http://www.cnblogs.com/armlinux/archive/2011/11/07/2396784.html ARM linux的启动部分源代码简略分析 以友善之臂的mini2 ...

最新文章

  1. JS基础-Array对象手册
  2. angular代码分析之异常日志设计
  3. SSH免密码登录设置
  4. 让IE兼容background-size的方法_background-size ie下使用
  5. Java客户端操作elasticsearch--添加文档
  6. WebSocket协议探究(序章)
  7. 中文版putty后门事件的曝光过程及我们所受到的报复
  8. Angularjs controller之间的通信
  9. arkit技术介绍_面向移动AR的触觉技术:如何以“触摸”感增强ARKit应用
  10. 静态html的ajax如何发请求,静态页面ajax - 冥焱的个人空间 - OSCHINA - 中文开源技术交流社区...
  11. nacos未授权访问漏洞【原理扫描】
  12. python开发的类似stardict工具
  13. Python使用UDP协议打造在线时间服务器
  14. 【主席树】bzoj1112: [POI2008]砖块Klo
  15. Git add 常见用法
  16. 【Stanford Online】Engineering: Algorithms1 NO.5 QuickSort Algorithm
  17. 计算机电影院管理系统开题报告,开题报告电影院网上订票系统.doc
  18. 用python获取实时地球图像作为壁纸(windows)
  19. 【学习—Scrapy1】日常操作
  20. android 免root冻结,自冻FreezeYou(超强免ROOT冻结神器)

热门文章

  1. NPP: 重复经颅磁刺激产生抗抑郁效果的基础:全脑功能连接与局部兴奋度变化
  2. nmap 端口说明和扫描顺序
  3. 告别XML,Android新声明式UI框架《Jetpack Compose入门到精通》最全开发指南
  4. 我们究竟为什么上大学
  5. python 打印数组第一行_打印数组中的第一个值而不是只打印第一个字母?(Python)...
  6. 如何用指针的方法打印数组的元素
  7. 计算机会计表格应用所有知识,电子表格
  8. Foxit_PDF_SDK.NET.7.X优化插件XFA的改进
  9. kerberos kubernetes读音
  10. [ASPX]常用笔记