历史上的今天
返回首页

历史上的今天

今天是:2024年08月30日(星期五)

正在发生

2019年08月30日 | S5PV210开发 -- 启动流程

2019-08-30 来源:eefocus

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


参看: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烧写时,首先要破坏iNand中的bootloader以从SD2启动了。


三、总结

最后,还是要说一下 BL1、BL2 和 uboot 的关系。


通过USB烧写过程分析,如果说  x210_usb.bin 为 BL1,那么它拷贝到SRAM后,下次再启动就掉电丢失了。


所以它应该是起到一个引导作用,然后可以将 uboot 拷贝到SDRAM 中。


更新的时候是将uboot烧写到nand中,然后将uboot下载到SDRAM中,进入系统。


 


那么此时的 uboot 的哪部分相当于 BL1,哪部分相当于 BL2呢?


这个等讲到 uboot 再好好研究一下。

推荐阅读

史海拾趣

捷茂微(GATEMODE)公司的发展小趣事

机顶盒,全称为数字视频变换盒,是连接电视与外部信号源的关键设备,其专业性与科普性并重。作为现代家庭娱乐不可或缺的一部分,机顶盒不仅实现了数模转换功能,让用户在模拟电视机上也能观看数字电视,还通过不断的技术创新,丰富了用户的视听体验。

从广义上讲,机顶盒涵盖了从模拟频道增补器到数字卫星综合接收解码器(IRD)、有线电视数字机顶盒等多种类型。而从狭义上看,主要聚焦于数字设备,如数字卫星机顶盒(DVB-S)、数字地面机顶盒(DVB-T)及IPTV机顶盒等。这些机顶盒能接收来自有线电缆、卫星天线、宽带网络及地面广播的信号,并将其转换为电视机可识别的音视频格式,实现高清甚至4K超高清的播放效果。

随着互联网的普及,网络机顶盒更是成为连接电视与互联网的桥梁。它不仅提供传统的电视节目服务,还通过集成智能技术,实现了语音助手、智能推荐等功能,极大提升了用户体验。此外,网络机顶盒还能接入各种流媒体平台,让用户在电视上观看在线视频、玩游戏、浏览网页等,实现了电视功能的多元化和智能化。

综上所述,机顶盒以其强大的功能和不断的技术创新,成为现代家庭娱乐的重要组成部分,为用户带来了更为丰富、便捷、智能的视听享受。

Adaptive Networks Inc公司的发展小趣事

对不起,我无法提供关于Adaptive Networks Inc公司发展的故事。

奇力新(chilisin)公司的发展小趣事

随着业务的不断发展和市场需求的增长,奇力新开始在全球范围内进行布局。公司先后在亚洲、欧洲、美洲等地设立了生产基地和研发中心,提升了产能和研发能力。同时,奇力新还积极寻求与国际知名企业的合作,共同开发新产品和新技术。这些举措不仅提升了奇力新的品牌影响力和市场竞争力,还为其未来的发展奠定了坚实的基础。

台湾固锝(GD)公司的发展小趣事
对于需要低噪声的应用场景,应选择低噪声的放大器芯片,并合理设计电路以减少噪声。
Digital公司的发展小趣事

DIALIGHT公司一直专注于工业LED照明领域的发展。他们深入了解工业空间照明的需求和挑战,设计了一系列专为工业应用而定制的LED照明产品。这些产品不仅易于安装和维护,而且能在恶劣的环境下持续使用。此外,DIALIGHT还提供集成系统解决方案,帮助客户降低能源成本、维护成本和碳足迹,同时提高设施的安全性和生产力。通过不断创新和优质服务,DIALIGHT在工业LED照明领域赢得了广泛的认可和信赖。

兆易创新(GigaDevice)公司的发展小趣事

DIALIGHT公司的故事始于1938年的纽约布鲁克林,当时该公司专注于为飞机生产仪表板灯。随着技术的不断进步和市场的变化,公司在1971年,即LED推出仅一年后,推出了他们的第一个LED产品。这一举措标志着DIALIGHT正式从传统的飞机仪表板灯制造转向LED照明技术的研发和应用。从此,DIALIGHT彻底改变了LED的用途,将其广泛应用于世界各地的交通控制、指示灯、结构塔和工业场所,为全球提供了优质的照明解决方案。

问答坊 | AI 解惑

Vishay 推出新型超薄电感器

Vishay Intertechnology宣布推出占位面积为 2525,厚度仅为 3.0 毫米并且具有 1.0μH~22 μH 电感值的新型器件,从而扩展了其超薄、高电流的 IHLP 电感器系列。    凭借在各自封装尺寸类 ...…

查看全部问答>

请教 STM32 CAN_Filter的查询问题

怎样在can中断程序中 查出当前的报文是来自于那个filter的阿 看资料说的是结构体中的FMI参数   可我在实验的时候明明filter12收到的 查询fmi却是 8    百思不得其解阿 有哪位知道的请指教一下阿 以下为该语句 if(RxMessa ...…

查看全部问答>

请教高手二极管的性能区别问题

2种二极管除了封装不同外,使用中有什么区别吗…

查看全部问答>

基于LPC1114的LED控制系统

思路:   1. 通过上位机软件编辑处理效果数据,并存入SD卡中;   2. 通过SSP0读取SD卡中的数据信息到RAM中;   3. 更加效果数据的结构,进行数据转换,转换成LED灯具可以设别的灰度数据;   4. 通过SSP1发送灰度数据到LE ...…

查看全部问答>

达芬奇DSP算法很慢的问题

问题是这样,我用videnc_copy修改,加入我的放大算法代码,在process里面要用到width height pitch等值, 要传参数,我把这些变量放到process里面声明称局部变量并赋初值,程序就跑的很快(20ms),但是我把这几个变量 复制到process的外面(全局 ...…

查看全部问答>

求助—关于将st语言转化为plcopen的xml

大家好,现在开始做一个项目,涉及到将structure text语言转化为plcopen定义的xml文件,由于之前没有这方面经验,所以不知道有没有什么工具进行此方面工作,借此宝地特向各位高手求教,谢谢了。…

查看全部问答>

设计一个产品,最花精力是哪一部分?

最好说说是哪类产品. 主要是设计阶段,比如,方案,硬件,软件,调试,测试等等,可以补充, 调研,售后,维护这些可能伸缩性太大,不好比较. …

查看全部问答>

关于输入捕获模式下数脉冲的个数,请大家帮忙啊

                                 输入捕获模式下数脉冲的个数时,频率大于20khz的就出错了,试图改变捕获的预分频值,结果是一样的,不知道怎么解决 ...…

查看全部问答>

web版本Quartus ii 如何新建时序仿真文件(vector waveform file )

在ALTERA官网下载的web版本Quartus ii 如何新建时序仿真文件(vector waveform file )?是不是不能生成啊?  求解答…

查看全部问答>

通过TSP利用3700系列系统开关/万用表和2600系列SourceMeter®

在2005年,随着2600系列第一款一体化源表的引进,吉时利推出了安装有板上测试脚本处理器(Test Script Processors,TSP™)的测试测量仪器。TSP执行基于文本的程序,非常类似于SCPI,具有增强的测试序列/流程控制、决策判断以及利用用户自定义 ...…

查看全部问答>