×
单片机 > 单片机程序设计 > 详情

S5PV210开发 -- 启动流程

发布时间:2020-06-06 发布时间:
|

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


参看: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烧写时,首先


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
单片机中高阻态的实质及意义