如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78433564

讲完启动模式、烧写更新,接下来我们看一下启动流程。

参看:S5PV210开发 -- 烧写/启动模式

参看:S5PV210开发 -- 通过 SD 卡烧写

参看:S5PV210开发 -- 通过 DNW、fastboot 烧写

参看:DM368开发 -- Bootloader 开发(转毕设)

学习S5PV210 启动流程部分,需要查看芯片手册和相关的文档。  下载:相关文档

一、iROM启动方式简介

在讲烧写/启动模式的时候其实已经提到,S5PV210 采用 iROM 启动方式进行启动,支持从MoviNAND/iNand, MMC/SD Card ,pure Nand, eMMC, eSSD, UART and USB等存储设备启动。

我们可以通过外部引脚OM[5:0]来选择相应的启动模式。

下面看一下手册上是怎么说的吧!!

(1)硬件支持需求

使用iROM启动方式有几种硬件需求:
    基于CortexA8的S5PV210X微处理器
    64KB iROM
    96KB iRAM
    通用的SDRAM和控制器
    4/8 Bit的高速SD/MMC控制器
    4-bit SD / 4-bit MMC / 4 or 8-bit eMMC
    Nand Flash控制器
    OneNand控制器
    eSSD控制器
    UART/USB控制器

(2)启动模式

OneNand启动(Mux/Demux)
    Nand启动(支持8/16-Bit ECC)
    SD/MMC启动(MMC4.3标准,兼容eMMC)
    eSSD启动
    UART/USB启动
    安全启动模式支持:对除UART/USB 外的所有启动设备的BootLoader采用整体校验,安全秘钥值写在S5PV210内部,如果安全秘钥值没有写在S5PV210内部,则为非安全启动模式。三星在制造阶段就将安全秘钥值写入到了S5PV210内部。
    第二启动模式支持:当第一启动模式(安全启动模式)失败后,就会试图从4 bit的SD/MMC通道2通过SD/MMC启动。

(3)iROM启动方式的优点

降低BOM(材料清单)成本
iROM启动支持从Movinand/iNAND/MMC/eMMC Card, eSSD设备启动,系统无需启动介质就可以启动,不需要像nor flash这样的启动设备。
改善读特性
采用iROM启动方式从nand flash启动时,S5PV210支持8/16-bit H/W ECC。但是16-bit ECC仅支持4KB 5cycle的Nand。
降低生产成本
能从其他启动设备烧录启动设备,无需Gang programmer烧录器。

(4)电路设计

使用OM引脚选择iROM启动设备
所有的S5PV210启动设备都可以从MMC通道2使用SD/MMC设备以第二启动方式启动。
OneNand 启动时,Xm0CSn4/NFCSn2/ONANDXL_CSn0信号必须有效。BL1代码段起始处必须是BL1的校验数据。
Nand启动时,Xm0CSn2/NFCSn0信号必须有效。BL1代码段起始处必须是BL1的校验数据。
SD/MMC/eMMC启动时,MMC通道0分配给第一启动模式使用,通道2分配给第二启动模式使用。BL1代码段起始处必须是BL1的校验数据。
UART启动使用串口端口2

二、iROM启动流程

S5PV210启动过程分为BL0、BL1、BL2三个阶段,S5PV210内部有96Kb的IRAM和64Kb的IROM。S5PV210启动过程如下图:

注释:其中 BL1 最大 16KB,BL2 最大 80KB
第一步:iROM初始化,初始化系统时钟、特殊设备控制寄存器和启动设备
第二步:iROM启动代码加载BL1(bootloader)到iRAM,在安全启动模式下iROM对BL1进行整体校验。
第三步:执行BL1,BL1加载BL2(剩余的bootloader)到iRAM,BL1将会对BL2进行整体校验。
第四步:执行BL2,BL2初始化SDRAM控制器,将OS下载到SDRAM
第五步:跳转到OS起始地址,进入系统

(1)BL0启动阶段

S5PV20 上电从 0 地址(iROM)开始 运行 Samsung 出厂时固化在里面的代码,这部分代码叫做 BL0(boot loader0),BL0 将执行如下操作: 
在BL0阶段初始化的内容如下:
1、关闭看门狗
2、初始化icache
3、初始化栈(设置中断栈、SVC栈)
4、初始化堆
5、初始化块设备copy函数
6、初始化PLL和设置系统时钟
7、拷贝BL1到iram
8、校验BL1,如果校验失败,将从SD卡启动。
9、检查是否是安全启动模式
10、跳转到BL1的地址(0xD0020010)

解析:

首先简单的了解一下,iROM和RAM是什么意思?

iROM 是 Internal Read-Only Memory 的缩写,即 内部只读存储器。

RAM  是 Random-Access Memory 的缩写,即 随机存取存储器,数据掉电丢失。

==================================================

ROM和RAM指的都是半导体存储器,ROM是Read Only Memory的缩写,RAM是Random Access Memory的缩写。ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

RAM有两大类,一种称为静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了,但是它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲。另一种称为动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。

DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等。

ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后,就无法修改了,这种是早期的产品,现在已经不可能使用了,而EPROM是通过紫外光的照射擦出原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。

==================================================

然后,从启动设备中拷贝前16K的代码到IRAM的0xD0020010处,即 BL1 的地址 0xD0020010。

这个地址很熟悉啊,在使用usb烧写的时候,我们用过的,参看:S5PV210开发 -- 通过 DNW、fastboot 烧写

当时有拷贝两个文件 x210_usb.bin 和 uboot.bin 分别拷贝到地址 0xd0020010  和 0x23e00000 处。

你有想过为什么是这个地址吗?

我们看一下 S5PV210 存储空间分配图。(芯片手册29页)

需要关注的是上图标出的两个地址,IRAM起始地址 0xD002_0000 和 DRAM 起始地址 0x2000_0000

然后看上图IRAM开始处包含 Header Info(头信息),所以 BL1开始地址是 0xD002_0010

我们再看 x210_usb.bin 和 uboot.bin 这两个文件大小

即 x210_usb.bin 为 BL1,其小于 16KB。再看 uboot.bin 大小为 300多 KB。如果当做BL2拷贝到 IRAM,很显然空间不够。所以我们实际的流程是:在 BL1 中初始化时钟、DRAM 控制器,拷贝 BL2 到外部 DRAM,跳转到 DRAM 中执行 BL2,BL2 加载 OS 到 OS 的起始地址执行 OS。

然后就有了操作 拷贝文件 uboot.bin 到地址 0x23e00000 处。

我们通过上面的存储空间分配图,可知DRAM 有两个通道的DRAM0起始地址为0x2000_0000,DRAM1起始地址为 0x4000_0000。你怎么知道它选的是哪个?

这个要看原理图了:

Xm1CSn0 和 Xm1CSn1 这两根片选信号线对应两个 DRAM 的地址,开发板的DDR2 SDRAM的片选信号接到了 Xm1CSn0引脚,所以它的访问地址为 0x2000_0000 开始的地址空间。

(2)安全启动模式(第一启动模式)的启动过程

解析:

结合之前将的系统的烧写更新,来看一下这个启动过程。

首先启动固化在IROM里的 BL0,它的作用:关闭看门狗、初始化icache、初始化PLL和设置系统时钟 等等这些上面已经有讲了。接下来通过OM[5:0] 来判断它的启动模式。

我买的开发板是烧写模式是 USB、SD卡烧写,启动模式为从 eMMC 启动。

我简单讲一下烧写更新的过程:

USB烧写:

拷贝 x210_usb.bin 到 0xd0020010 (IRAM)

拷贝 uboot.bin 到地址 0x23e00000 (SDRAM,掉电丢失)

nand更新:

将 uboot.bin 先拷贝到 0x20008000(SDRAM,掉电丢失)   命令: tftp 20008000 u-boot.bin

擦除 nand(nand的特性:要向Nand Flash中写数据之前,必须先擦除)   命令:nand erase 0 200000

最后将 uboot.bin从SDRAM的 0x2008000 烧写到 nand里,命令:nand write 20008000 0 200000

同理更新 内核、根文件系统。

这里就有点意思了,先将uboot拷贝到 0x23e00000,让开发板可以启动进入uboot。

然后再将uboot拷贝到 0x20008000,从这个地址烧写uboot到nand中。

我讲了这么多,就是想说明 SDRAM 是内存,它掉电丢失;nand 是硬盘,最终应将uboot、内核、根文件系统等烧写到这里面。将其复制到内存,最后进入系统。

所以完整的启动顺序应该是:

1.开机启动运行iROM(BL0)的固化代码
这里所做的事情就可以结合上面最左边的图和之前说的BL0做的一些事情,然后接下来程序跳到BL1的起始地址执行。
2.执行BL1代码
从图中可以看出它的主要作用就是将BL2从启动介质内复制到内部的SRAM中,并将程序将要运行的地址转向BL2首地址。
3.执行BL2代码
BL2做的就是先初始化SDRAM/DRAM,也就是内存,并把操作系统程序代码复制到内存中,然后程序调到内存中继续执行,整个过程完成。

(3)第二启动模式启动流程

解析:

举个栗子,SD/MMC/eMMC启动时,MMC通道0分配给第一启动模式使用,通道2分配给第二启动模式使用。

先看下原理图:

根据上图可以看出,MMC通道0分配给第一启动模式(iNand/eMMC)使用,通道2分配给第二启动模式(SD卡)使用。

根据上面的启动流程图,iROM开始;检查启动模式;从第一启动模式(iNand/eMMC)下载BL1;校验和是否0K;成功进入BL1;失败从第二启动模式(SD卡)下载BL1;校验和是否0K;成功进入BL1;失败从UART启动;UART启动再失败,从USB启动;如果USB启动再失败的话,则停止启动。

分析完以后,也就很好的解释了,为什么通过SD烧写时,首先要破坏iNand中的bootloader以从SD2启动了。

三、总结

最后,还是要说一下 BL1、BL2 和 uboot 的关系。

通过USB烧写过程分析,如果说  x210_usb.bin 为 BL1,那么它拷贝到SRAM后,下次再启动就掉电丢失了。

所以它应该是起到一个引导作用,然后可以将 uboot 拷贝到SDRAM 中。

更新的时候是将uboot烧写到nand中,然后将uboot下载到SDRAM中,进入系统。

那么此时的 uboot 的哪部分相当于 BL1,哪部分相当于 BL2呢?

这个等讲到 uboot 再好好研究一下。

参看:x210v3开发板u-boot-2012.10移植之补充篇---uboot启动流程详解

参看:uboot学习之三-----uboot启动第一阶段--start.S之一

参看:S5PV210的启动过程

如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/78433564

S5PV210开发 -- 启动流程相关推荐

  1. STM32开发 -- 启动流程

    如需转载请注明出处:https://blog.csdn.net/qq_29350001/article/details/80586534 启动模式讲完了,我们知道是主闪存存储器启动的(主闪存存储器就是 ...

  2. 【嵌入式】S5PV210的启动流程

    S5PV210的启动流程 S5PV210上电后执行iROM中的固化代码,即BL0(Bootloader0).这个代码是厂家出厂前烧写好的,不提供源代码,但提供相应的功能说明,比如进行一些时钟初始化.设 ...

  3. u-boot2013.01.01 for s5pv210: u-boot启动流程

    转载请注明地址:http://blog.csdn.net/zsy2020314/article/details/9824035 1.关于启动流程 1.1 启动阶段分为3个,bl0,bl1,bl2.下面 ...

  4. [project X] tiny210(s5pv210)上电启动流程(BL0-BL2)

    建议参考文档: S5PV210-iROM-ApplicationNote-Preliminary-20091126 S5PV210_UM_REV1.1 项目介绍参考 [project X] tiny2 ...

  5. 【嵌入式开发】 Bootloader 详解 ( 代码环境 | ARM 启动流程 | uboot 工作流程 | 架构设计)

    作者 : 韩曙亮 博客地址 : http://blog.csdn.net/shulianghan/article/details/42462795 转载请著名出处 相关资源下载 :  -- u-boo ...

  6. 移植u-boot-2012-10到tiny210v2(一)-----基本芯片介绍和启动流程介绍

    软硬件环境 宿主机系统:Fedora10 U-boot版本:U-boot-2012-10 板子芯片:S5PV210(Contex-A8),512M DDR2,512M SLC Nand 交叉编译器:a ...

  7. s5pv210开发板学习笔记(3)——开发板刷系统

    S5PV210的启动流程: 根据OM pin选择是哪种启动方式然后 通过校验和的方式checksum判断是否能成功启动. 如果第一次启动失败,就会进入second启动. 所以我们需要破坏iNand中的 ...

  8. uboot流程——uboot启动流程

    [uboot] (第五章)uboot流程--uboot启动流程 2016年11月07日 20:12:07 阅读数:2230 以下例子都以project X项目tiny210(s5pv210平台,arm ...

  9. [uboot] (第五章)uboot流程——uboot启动流程

    以下例子都以project X项目tiny210(s5pv210平台,armv7架构)为例 [uboot] uboot流程系列: [project X] tiny210(s5pv210)上电启动流程( ...

最新文章

  1. Ibatis调用Oracle存储过程,以及返回Cursor结果集的问题
  2. 网络性能测试工具Iperf上手指南
  3. oracle 排序的分析函数,oracle下数据的排序分组row_number() over()--分析函数,可用于去重...
  4. JAVA常见算法题(三十一)---冒泡排序
  5. 嵌套查询和连接查询的效率_Elasticsearch 7.x Nested 嵌套类型查询 | ES 干货
  6. React入门教程第三课--gulp编译优化
  7. spring-boot 免xml配置直接使用spring
  8. 九小时九个人九扇门(01背包)
  9. C#调用C语言生成的DLL“未找到入口”
  10. thinkphp学习总结
  11. python皮卡丘编程代码_Python高级编程-(Part 6 部署代码)
  12. Map转JSON内容解释
  13. 基于Matlab/Simulink的1/4车辆动力学模型
  14. 超自动化如何提升保险业?
  15. 人脸识别的又一滥用案例:大数据杀熟,买房多付30W
  16. java vml_VML书签
  17. 使用粒子效果动画组成模型[自定义shader实现]
  18. 用C语言对一元二次方程求解
  19. 戴尔笔记本重装系统后识别不出固态盘的问题的方法
  20. 微信小程序中的授权、登录注册token和code

热门文章

  1. python numpy中astype使用不当导致图像出现artifact
  2. docker 启动mongodb
  3. Snmp扫描-snmpwalk、snmpcheck
  4. LUA string的状态
  5. Android 编译 SDK
  6. 【转】匈牙利命名法(Hungarian Notation)
  7. Vscode html代码快速填写
  8. [MATLAB学习笔记]peaks函数1013(2)
  9. Python 深度学习,你的 Keras 准备好了吗?
  10. 吴恩达《卷积神经网络》精炼笔记(2)-- 深度卷积模型:案例研究