S5PV210的启动

如需转载请注明出处: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值