码迷,mamicode.com
首页 > 其他好文 > 详细

第0部分:S5PV210_大概的启动过程_1

时间:2016-07-31 19:21:53      阅读:296      评论:0      收藏:0      [点我收藏+]

标签:

S5PV210大概的启动过程

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模式下的,所以我们说的设置栈的时候,就是设置这里的栈

参考资料:朱老师物联网大教程

参考的IROM数据手册的翻译博客:http://blog.csdn.net/a627088424/article/details/9149671

第0部分:S5PV210_大概的启动过程_1

标签:

原文地址:http://www.cnblogs.com/nibuyaoni/p/5723634.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!