S5PV210启动过程

常用器件特性

内存:
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使用的启动方式是:外接的大容量Nand + 外接大容量DRAM + SoC内置SRAM

 

1.大体的启动过程如下:

第零步:设置OM PIN引脚,就可以选择启动方式了,譬如从SD卡启动,emmc启动,norflash启动等等,我们这里假设从SD卡启动。

第一步:IROM内的代码(BL0)对SOC进行初步的初始化工作

第二步:从SD卡中复制BL1到SOC内的SRAM,执行BL1内的代码

第三步:从SD卡中复制BL2到SOC内的SRAM,执行BL2内的代码(作用:初始化SDRAM控制器,那样我们就可以用DDR内存了)

第四步:把我们的操作系统OS复制到SDRAM中

第五步:我们在BL2中进行一个长跳转,跳转到SDRAM中去执行程序,这样我们整个启动过程就完成了。

2.大体流程的具体实现过程

(0)设置OM PIN引脚,选择启动的介质(图为部分截取)

  从图上我们可以看到,只要我们的OM[0-5]设置为:100000或000000(1代表的就是供电,0代表接地)的时候,我们就选择了essd介质的启动方式

当我们OM[0-5]设置为:001100或者101100的时候,我们选择的就是SD/MMC的模式。这就看你需要什么启动方式了。

  我的开发板(九鼎X210)支持SD卡启动和USB启动:

  SD卡启动:001100或者101100

  USB启动:1XXXX1(x表示没有)

  所以,我们在切换的时候,只需要在SD卡的基础上进行改动(因为OM[1-4]位为什么并不影响USB启动的),拨动引脚OM5就可以了,OM为1就是USB启动,OM为0就是SD卡启动。

(1)IROM代码所做的工作

第一步:关看门狗

第二步:初始化iCache

第三步:初始化栈区域

第四步:初始化堆区域

第五步:初始化块设备拷贝功能

第六步:初始化PLL并设置系统时钟

第七步:检查OM PIN引脚,看看从哪种介质(如SD/MMC)中复制BL1到SRAM,这里就和第零步的工作相照应了,选择了启动方式了

第八步:检查BL1中的checksum,如果checksum失败,就尝试以第二种启动方式启动(SD/MMC 通道2)

第九步:检查是不是安全模式启动(这步比较少应用)

第十步:跳到BL1的起始地址去执行程序

以上就是IROM所做的工作。具体的图示如下:

  从上图我们可以看到,我们的启动凡事可以有6种,找到启动方式后,就从那介质中复制BL1到SDRAM中,然后执行BL1,,执行完BL1之后,查看它是不是唤醒状态,不是就载入BL2到SRAM中,然后就不是安全模式,就跳转到BL2执行,然后判断是不是唤醒状态,不是就开始初始化DRAM了,然后就把操作系统OS载入到DRAM中,之后就跳转到DRAM中去了,然后就是操作系统启动了。(这里就是后面步骤的示意图了)

第二种情况:我们的第一种启动方式不成功,进入到第二种启动方式去执行程序的过程。

  从上图我们可以看到:第一种启动方式失败之后,就会跳转到第二种启动方式,然后检查checkSum(校验和),如果正常的话,就跳转到从第二种启动介质里面复制过来的BL1去执行,如果不正常,就跳转到了串口启动的方式去执行,串口成功的话,那就跳转到串口上传过来的BL1去执行,还是不行的话,就跳转到USB启动的方式去执行,可以就跳转到USB下载下来的BL1执行,还是不行的话就是启动失败了。

最后:我们的文档还涉及了一些其他的具体的内容,如:USB/UART启动模式(注意:UART模式启动的时候,只是支持UART2这个接口,我们不要接错了)的设置的一些内容,还有SRAM内存映射的区域,还有从SD卡等内存介质中复制BL1到SRAM中需要用到的一些函数,还有一些时钟设置的内容。

因为进行裸机实验的时候,需要用到USB启动的方式,还有后面的SRAM内存映射的一些内容,所以下面就顺带介绍一下这些内容。

首先是:USB启动模式

1.我们可以使用DNW工具,看看我们的USB是否接好(看到上面的USB:OK字样)

2.设置好具体的值:波特率是115200,你用的是哪个COM端口,就设哪个COM端口,具体的COM端口可以看右键我的电脑->管理->设备管理器->usbdnw处

3.下载具体的程序就好了

注意:因为我们的UART/USB启动模式都不需要头校验的,所以,我们的下载地址是:0xD0020000,像SD卡那些的,需要头校验和的,他们的下载地址就是:0xD0020010

接下来就是:SRAM的内存映像了

看着这个图:我们就知道了我们的下载地址为什么是0xD0020000和0xD0020010了,因为SRAM的头地址就是这些。

Exception Vector Table:中断异常向量表

Heap:堆,申请堆的时候,在这里申请

Global Variable:全局变量放在这里

IRQ stack:中断模式下的栈

SVC stack:SVC模式下的栈,我们平时就是SVC模式下的,所以我们说的设置栈的时候,就是设置这里的栈

 

bootloader、Kernel、filesystem等在nand中的分布

这里写图片描述

S5PV210的启动方式很多种,第一次学习的理解就这么多,做个记录,相信随着学习的深入理解也会不一样,到时候再回来更新。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值