[project X] tiny210(s5pv210)上电启动流程(BL0-BL2)

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

建议参考文档:

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的流程部分)

Created with Raphaël 2.1.0
实验一、嵌入式开发板tiny210基本使用实验1 1、用开发板配套的串口线,连接PC的COM1或COM2Tiny210开发板的控制台串口,开启PC机SecureCRT终端窗口,配置SecureCRT,注意根据实际所连接的COM1或COM2设置好串口连接参数,(以115200波特率 、无CTS/RTS流控方式),打开串口;使用winscp 软件以SFTP协议向Tiny210 嵌入式Linux 开发板下载文件,把hello-tiny210.arm复制下载到开发板,然后配置相关的文件权限使该文件能够能在tiny210开发板的shell终端中正确运行。 阅读详情

相关推荐

arm-2-基础阶段

arm基础

weixin_42427637的博客 865

tiny210原理图

tiny210原理图,可以用于arm板的开发

[project X] tiny210(s5pv210)从存储设备加载代码到DDR

[uboot] uboot流程系列: [project X] tiny210(s5pv210)启动流程BL0-BL2) [uboot] (第一章)uboot流程——概述 [uboot] (第二章)uboot流程——uboot-spl编译流程参考文档: S5PV210-iROM-ApplicationNote-Preliminary-20091126 S5PV210_UM_REV1.1

ooonebook的博客 7202

基于tiny210 printf实现

基于tiny210 编写的printf实现 含有led 蜂鸣器等初始化

tiny210文档】tiny210文档的阅读

1、关于端口功能、端口寄存器的阅读:http://www.tudou.com/programs/view/3RDRMimMheM/ 寄存器文档:Datasheet 里的:S5PV210_UM_REV1.1.pdf 2、CPU 引脚图:Schematic-PCB\Tiny210 里的Tiny210-1204.pdf ...

小鱼菜鸟的博客 144

【ARM】ARM(2440)嵌入式开发全套视频教程|tiny210文档的阅读

1、 2、 3、ARM嵌入式开发之ARM指令与ARM汇编入门 4、ARM嵌入式开发之ARM汇编高级教程与APCS规范详解 视频下载地址: http://pan.baidu.com/share/link?shareid=209825&uk=3523275049 内容: 01_ARM嵌入式开发之ARM基础概念介绍与开发板使用教程.mp4 02_ARM嵌入...

我的笔记本 1164

Tiny210串口通信测试及编程实现

通过本文,我们了解了在Tiny210开发板上进行串口通信测试的方法,并提供了相应的编程示例。通过配置串口参数和使用相应的读写函数,我们可以实现与外设或其他设备之间的数据交互。本文将介绍如何在Tiny210开发板上进行串口收发测试,并提供相应的编程示例。在进行串口通信之前,需要对串口进行相应的配置,包括波特率、数据位、停止位和校验位等。首先,确保开发板上已经正确连接了串口线,并将其连接到PC或其他设备上。配置完成后,我们可以进行串口收发测试。设备文件,如果你选择使用其他串口接口,需要相应地修改设备文件路径。

DevScribe的博客 202

[project X] tiny210 uboot移植进度说明

这份移植进度是当时在project X项目移植对应版本上的uboot到tiny210上的时候写的。 现在回过头来,想要整理一些uboot的移植心得和学习笔记,所以先把当时的移植进度发出来,方便后续文档整理的思路。零、项目说明project X项目是由wowo发起的,希望能够在一个项目中可以支持多个板子的项目。 在wowo的project X项目上对友善之臂tiny210的板子进行支持。 目前已

ooonebook的博客 2185

[uboot] (第五章)uboot流程——uboot启动流程

uboot启动流程

ooonebook的博客 1万+

[uboot] (番外篇)uboot relocation介绍

uboot relocation

ooonebook的博客 1万+

tiny210-uboot之二BL1分析

这里42-26注销了 ,我犯了个错,打开后反而启动不了 ,因为BL1的编译地址就在d0020010(也是0地址),那么这时运行地址和编译地址是一样的,就会跳到run_on_dram,而这时内存条还没初始化,所以打开后反而会报错;同样的代码在 arch/arm/armv7/cpu/start.s这里却是打开的的,因为这时uboot部分(编译在23e00000),那么这时运行地址和编译地址是一样的(不过是都是在内存里),就会跳到 board_init_in_ram。@ _start当前所位于的地址。

嵇康的专栏 855

Tiny210(S5PV210) U-BOOT()----配置时钟频率基本原理

U-BOOT在启动的过程中,需要配置系统时钟。 1.基本原理 首先输出一个高平,然后,通过三个晶振,输出一个频率,然后,通过倍频器(锁相环),将频率升高,然后,再通过分频,把分出来的不同的频率,提供给不同的器件,比如ARM Cotrex内核、各种设备控制器等等。 Tiny210(S5PV210)上蓝色的框标注的就是晶振的位置,最上面的是27MHz,中间和下面两颗是24MHz,顺便讲一下另外

南山一梦 3508

实验三、建立tiny210的嵌入式Linux交叉开发环境

4、用开发板配套的网线(交叉网线)连接开发板以太网络接口与PC机以太网络接口,在控制台终端Shell中查看并设置开发板的网络接口(默认设置的开发板IP地址为192.168.1.230),使用ifconfig命令为开发板设置与PC主机的网络地址同网段的IP地址,实现开发板与PC主机间的网络互通。(提示:使用串口方式向开发板传文件,适合传较小的文件使用,同时需要在开发板的控制台Shell中启动rz命令接收文件,然后在SecureCRT的弹出的文件发送窗口中选择需要发送的文件,)

m0_73939014的博客 1170

Tiny210移植Tslib

缓存文件用于存储已经检查过的条件信息,以便在下次编译时直接使用,而不需要再次进行检查。是一个在C语言标准库中定义的函数,它用于分配内存并确保返回的指针不为NULL。这样,在下次编译时,Autoconf可以直接从缓存文件中读取条件信息,而不需要重新检查。为了解决Tiny210容屏失效问,让10年前的板子焕发第二春,故决定为其移植Tslib。图中显示为ARM,表明交叉编译成功,若为X86则需要重新配置交叉编译环境。前一个1.21为对这个分支的命名,后一个为找到的1.21分支。为交叉编译后的安装路径。

m0_70788037的博客 519

[uboot] (番外篇)uboot串口&console&stdio设备工作流程

uboot串口输出流程 console工作流程 stdio设备工作流程

ooonebook的博客 9208

Tiny210裸机开发初体验

从昨天开始搞了一下Tiny210的裸机,长时间没玩有点生疏了 由于开发板光盘自带裸机程序例程,所以先跑一下简单的点灯,打通调试通路然后再进行学习 首先使用了方法1: 参考国嵌视频烧录superboot,下载.bin文件,一直提示Can not open /dev/secbulk0 进入dev目录查看确实不存在secbulk0文件,分析dev属于驱动,只要流程正确应该不会有问题,仔细参看发现mini...

5念since 1417
上一篇: [project X] tiny210 uboot移植进度说明
下一篇: [uboot] (第一章)uboot流程——概述
ooonebook
博客等级 码龄10年 1103粉丝 48原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值