建议参考文档:
S5PV210-iROM-ApplicationNote-Preliminary-20091126
S5PV210_UM_REV1.1
项目介绍参考
[project X] tiny210 操作说明
===================================================================
零、说明
本文主要以友善之臂的tiny210板子作说明,使用的是s5pv210核心。
主要集中于以下几个问题:
* 支持哪些存储介质?
* 上电之后的启动流程?分成了几个阶段?具体负责什么功能?
* 各个阶段使用的存储介质是什么?原因?
* 各个阶段的运行地址是什么?
* 镜像存放可能存放在几种存储介质中,如何判断要从哪种存储介质中获取镜像?(也就是启动模式)
本文只介绍non secure boot的情况。也就是说不是在secure环境下,无需做签名处理。
一、和启动相关的硬件介绍
1、可运行存储介质
要先理解一点,运行介质都会在CPU的地址空间上,占用地址空间的一部分。CPU可以根据寻址地址从运行介质从读取一条指令或者一条数据,而并不是说直接在运行介质上执行。
- IROM
ROM(Read Only Memory),唯读记忆体。ROM数据不能随意更新,但是在任何时候都可以读取。主要用于存放一些固定的不需要修改的代码或者数据。掉电之后,数据还可以保存。
IROM则是指集成于芯片内部的ROM. - SRAM
SRAM(Static Random Access Memory),即静态随机存取存储器。它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。
- 优点,速度快,不必配合内存刷新电路,可提高整体的工作效率。初始化简单。
- 缺点,集成度低,掉电不能保存数据,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。
- SDRAM
由General SDRAM and Controller进行控制。
SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器,同步是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。相对于SRAM来说,体积较小且价格偏移。
三者差异简单归纳如下表:
可运行存储介质 | 掉电数据保存情况 | 数据修改 | 访问速度 | 动态刷新电路 | 价格 |
---|---|---|---|---|---|
ROM | 掉电数据保存 | 不易修改 | 最慢 | 不需要 | 最便宜 |
SRAM | 掉电数据丢失 | 可以修改 | 最快 | 不需要 | 最贵 |
SDRAM | 掉电数据丢失 | 可以修改 | 快 | 需要 | 便宜 |
补充说明
综上,因为BL0是上电启动代码,固定不变的,所以将其固化在IROM中运行。
因为SRAM是集成在平台内部,BL0阶段之后可以直接使用,但是size比较小。
而SDRAM需要根据外围DDR进行初始化,BL0之后还无法使用,需要在BL1中进行初始化之后才能使用。
故BL1放在SRAM中运行,BL2放在SDRAM中运行。
后续会继续说明。
2、存储介质
- SD/MMC/eMMC
- nand flash / nor flash / OneNand flash
- eSSD
3、tiny210运行介质和存储介质说明
首先看一下对应s5pv210平台和存储相关的硬件支持
- 64KB的IROM
- 94KB的内部SRAM
- 通用SDRAM控制器,用于控制SDRAM
需要外部实现SDRAM. - 4/8位高速SD/MMC控制器,用于控制4-bit SD / 4-bit MMC / 4 or 8-bit eMMC
需要外部实现SD/MMC/eMMC - Nand Flash控制器,用于控制nand flash
需要外部实现nand flash - OneNand控制器,用于控制OneNand flash。
需要外部实现OneNand flash - eSSD控制器,用于控制eSSD
需要外部实现eSSD - UART/USB控制器
在s5pv210的基础上,对应tiny210板子上有如下外围硬件:
* 512MB的DDR支持
* 1GB的nand flash支持(K9K8G08U0B)
* SD card接口支持,可以直接支持SD card
综上,tiny210板子上有如下存储介质:
- 64KB的IROM
- 94KB的内部SRAM
- 512MB的DDR
- 512MB的nand flash支持
- SD card(自己插了一个4GB的SD卡)
二、s5pv210 上电启动的几个阶段
注意:以下介绍的启动流程和官方给的启动流程《S5PV210-iROM-ApplicationNote-Preliminary》有所差异,是实际上我在项目中使用的启动流程,也是比较通用的启动流程。
和官方文档中比较大的差异在于,BL2在下面介绍是放在SDRAM中运行,而官方文档《S5PV210-iROM-ApplicationNote-Preliminary》中则是放在IRAM中运行,因为编出来的uboot过大,超过了限制,所以官方文档是不可行的。
1、BL0
运行在IROM上!!!
加载说明
上电后启动的第一个阶段。其代码固化在s5pv210的IROM中,也就是出厂后已经完成,无法进行修改。上电后CPU会直接从IROM上的BL0的代码上开始执行。主要工作有:
- 初始化系统时钟、特殊设备的控制器、启动设备、看门狗、堆栈、SRAM等等
- 验证BL1镜像
- 从存储介质上(比如SD\eMMC\nand flash)或者通过USB加载BL1镜像到对应内部SRAM上
- 跳转到BL1镜像所在的地址上
2、BL1
运行在内部SRAM上!!!
- 加载说明
上电后启动的第二个阶段。BL0阶段会将其镜像或者代码从存储介质上(比如SD\eMMC\nand flash)上加载到内部SRAM上. - 主要工作有:
- 初始化部分时钟(和SDRAM相关)
- 初始化DDR(外部SDRAM)
- 从存储介质上(比如SD\eMMC\nand flash)将BL2镜像加载到SDRAM上
- 验证BL2镜像的合法性
- 跳转到BL2镜像所在的地址上
3、BL2
运行在外部SDRAM上!!!
- 加载说明
上电后启动的第三个阶段,BL1阶段会将其镜像或者代码从存储介质上(比如SD\eMMC\nand flash)上加载到外部SDRAM上. - 主要功能
BL2就是指传统意义上的bootloader,也就是我们这里的uboot的主体,负责flash操作、uboot命令操作等等,并且最终目标是加载OS和启动OS,如linux。关于uboot的实现,会在后面具体分析,这里不详细说明。
上电到BL2的流程图如下(略过BL2的流程部分)