gec210 NAND BOOT与SD BOOT启动原理

发布者:DreamyEclipse最新更新时间:2025-02-06 来源: cnblogs关键字:NAND  BOOT  启动原理 手机看文章 扫描二维码
随时随地手机看文章

CPU上电后,此时SP指针指向0x0000_0000,从这个地址取第一条指令。但此时:PLL没有启动,CPU工作频率为外部输入晶振频率,非常低(S5PV210中晶振在CPU旁边,两颗24MHz,一颗27MHz);CPU的工作模式、中断设置等不确定;存储空间的各个BANK(包括内存)都没有驱动,内存不能使用。在这种情况下必须在第一条指令处做一些初始化工作,这段初始化程序与操作系统独立分开,称之为Bootloader。下面以S5PV210用的U-BOOT为例:


友善之臂Smart210 SDK2用的是三星公司的S5PV210,在开始U-BOOT的移植之前,有必要弄清楚S5PV210的启动过程:

 

①时钟的初始化和一些特使控制器的启动

②拷贝BL1代码到SRAM中,并检查BL1的完整性

③拷贝BL2代码到SRAM中,并检查BL2的完整性

④初始化DRAM控制器,并拷贝内核文件到SDRAM中

⑤跳转到SDRAM中执行,启动内核

由图上所知,由OM(Operating Mode)pin导入到iROM中,OM是什么?打开Tiny210V2_V1.0_120713_sch.pdf的原理图,搜索OM

 

 

查找到一个表格,有上表可知,OM1/OM2/OM3决定的是从SD卡启动还是从Nand Flash启动。

 

 

继续往下看,由图可知,OM1/OM2/OM3分别接在XOM1/XOM2/XOM3上面。

 

再来看旁边XOM的一个信号反相器74LVC1G04的图

 

查看74LVC1G04原理图,找到pin脚图和逻辑图

 

 

由图可知,这是一个反相器,2中输入高电平,则4中输出低电平;2中输入低电平,则4中输出高电平,OK。

当XOM拨到1时,XOM1为NC状态,XOM1 = 0,pin4的输出为1,XOM2=XOM3=1,则为0-1-1,为SDBOOT;

当XOM拨到2时,XOM1为输入状态,XOM1 = 1,pin4的输出为0,XOM2 = XOM3 = 0,为1-0-0,Nand启动模式,至此,OM的输入判断分析结束。

 

继续看芯片手册,手册上关于iROM/iRAM及Bootloader描述如下:

  • The iROM code is placed in internal 64KB ROM. It initializes basic system functions such as clock, stack, and heap. 

  • The iROM loads the first boot loader image from a specific booting device to internal 96KB SRAM. The booting device is selected by Operating Mode (OM) pins. According to the secure boot key values, the iROM code may do an integrity check on the first boot loader image. 

  • The first boot loader loads the second boot loader then may check the integrity of the second boot loader according the secure boot key values. 

  • The second boot loader initializes system clock, UART, and DRAM controller. After initializing DRAM controller, it loads OS image from the booting device to DRAM. According to the secure boot key values, the second boot loader can do an integrity check on the OS image. 

  • After the booting completes, the second boot loader jumps to the operating system. 

Smart210(S5PV210) <wbr>U-BOOT(一)----启动过程
从表中可以看出,三星公司的设计的boot过程有三个步骤
①上电时,运行iRom(BL0)中的代码,该部分是有三星公司写好固化在里面的。BLO会对芯片做一些基本的初始化,关看门狗、初始化cache、PLL、堆栈、数据拷贝功能等;然后拷贝BL1(或者说uboot的前16k字节)到SRAM中,并跳到BL1里执行。
②从BL1中执行,根据左边这个框图可以看出,BL1阶段,只做了BL2拷贝工作(拷贝整个uboot到SRAM中),然后跳到BL2中执行。
③从BL2中执行,此时代码还在iSRAM中,BL2代码会初始化SDRAM,并将内核从NANDFLASH或者SD等设备中拷贝到SDRAM中,并跳到SDRAM中启动内核。

上面是哪个步骤似乎都很合理,但是我们看看三星公司设计的SRAM大小只有96k,对于一些简单的boot代码,编译出来有可能小于96k,在这种机制下可行,但是对于uboot这种功能强大的bootloader而言,编译出来有可能是几百k,那么96k的SRAM更本无法容纳这么大的数据,怎么办呢?

对于uboot而言,他们的团队搞了一个spl.bin,大小刚好是16k,然后在spl.bin中直接对SDRAM进行初始化,然后将整个uboot直接拷贝的SDRAM中运行。。。

对于我们而言,如果自己写bootloader,若编译出来的bin文件小于16k,烧写的SD卡第1个block中或者nandflash的0地址中,IROM中的程序会自动将bin文件拷贝到sram中运行;若大于16k小于96k,则可以使用三星机制,不过要注意的是,如果只编译一个bin文件,那么该文件必须小于80k,且前16k中需要包含拷贝bin功能,然后将bin文件拷贝到SD卡第1个block中或者NANDFLASH的0地址。如果编译分为BL1.bin和BL2.bin,那么BL1必须小于16k,且BL1.bin中有拷贝BL2.bin功能,BL2必须小于80k,然后将BL1.bin烧写到SD卡的第1个block中或者nandflash的0地址处,将BL2.bin烧写到BL1.bin中要拷贝的SD或nandflash的地址处;若自己编译的bootloader大于96k,则可以效仿uboot机制,在BL1阶段就初始化SDRAM,然后将整个bootloader拷贝到SDRAM中运行。。。。当然,我们也可以不管自己的bootloader编译出来有多大,直接拷贝到SDRAM中运行。。。。

按照芯片手册上的启动分析图及上面的描述,总结uboot启动流程为:

S5PV210上电将iROM(interal ROM)处执行固化的启动代码,它对系统时钟进行初始化,对启动设备进行判断,并从启动设备中复制BL1(最大16KB)到iRAM(0xd002_0000处,其中0xd002_0010之前的16个字节存储的的BL1的校验信息和BL1尺寸)中,并对BL1进行校验,检验OK转入BL1进行执行;BL1执行完成后,开始执行BL2,BL2加载内核,把OS在SDRAM中运行起来。

BL0,BL1,BL2:

(1)BL0:是指S5PV210的iROM中固化的启动代码

作用:初始化系统时钟,设置看门狗,初始化堆和栈,加载BL1

(2)BL1:是批在iRAM自动从外扩存储器(nand/sd/usb)中拷贝的uboot.bin二进制文件的头最大16K代码

作用:初始化RAM,关闭Cache,设置栈,加载BL2

(3)BL2:是指在代码重定向后在内存中执行的uboot的完整代码

作用:初始化其它外设,加载OS内核

(4)三者之间的关系:(Interal ROM固化代码)BL0将BL1(bootloader的前16KB--BL1)加载到iRAM;BL1然后在iRAM中运行将BL2(整个bootloader)加载到SDRAM(DDR);BL2加载内核,把OS在SDRAM中运行起来,最终OS是运行在SDRAM(内存)中的。

在这个过程中,u-boot需要初始化的硬件是CPU和DDR,所以,这两个硬件必须在u-boot阶段就做好初始化的工作。


关键字:NAND  BOOT  启动原理 引用地址:gec210 NAND BOOT与SD BOOT启动原理

上一篇:uboot 2014.04 运行过程记录
下一篇:总结:代码重定位

推荐阅读最新更新时间:2026-03-25 13:10

u-boot移植(九)---代码修改---NAND
一、NAND原理      NAND 无地址空间,地址和数据的发送都依赖于LDATA 这一串数据总线。      不看随机页编程,看到从高位到低位的页,总共分为64个页面,每个页的组成是2K + 64 个byte,一个块的大小是(128K + 4K)byte,64页组成一块。 1.1 NAND Flash的编址   nand flash的的页的大小是(2048 + 64)byte,64这个数据是不参与编址的。   访问 nand flash: 发出命令:读、写、擦除 发出地址 传输数据   命令设置如下:    1.2 nand flash的访问      可以看看上面的模式选择,然后对应引脚进行操作,就
[单片机]
u-<font color='red'>boot</font>移植(九)---代码修改---<font color='red'>NAND</font>
u-boot-2014.10移植(5)支持nand
在smdk2440.h里面加上NAND的配置选项 #define CONFIG_CMD_NAND 编译出错 drivers/mtd/nand/s3c2410_nand.c: In function 's3c2410_hwcontrol': drivers/mtd/nand/s3c2410_nand.c:44: warning: implicit declaration of function 's3c2410_get_base_nand' drivers/mtd/nand/s3c2410_nand.c:44: warning: initialization makes pointer f
[单片机]
Mini2440开发板:U-boot-2008-10之支持nand flash驱动K9F1G08U0B
U-Boot版本:U-boot 2008.10 目标板:Mini2440 Nandflash型号: K9F1G08U0B 256M 修改include/configs/mini2440.h。 1)添加命令支持: #define CONFIG_CMD_ELF #define CONFIG_CMD_NAND 2)添加nand flash 参数设置: /*nand flashsettings******************************************************************************************/ #define CFG_NA
[单片机]
Mini2440开发板:U-<font color='red'>boot</font>-2008-10之支持<font color='red'>nand</font> flash驱动K9F1G08U0B
U-boot-2014.04移植到MINI2440(7) nand flash datasheet及arm9控制寄存器分析
我的MINI2440上有一个256M的nand flash,后面我们需要从nand启动u-boot,然后引导加载内核,再挂载根文件系统,这里先对其做一个较为细致的认识。主要是硬件管脚定义,控制方式,处理器的控制寄存器对其做一个了解,因为现在市面上nand的用途比较广泛,数码相机,mp3都要使用,进入正题。 一.nand flash datasheeet 在移植好的u-boot下输入nand info会出现下面的信息: Device 0: NAND 256MiB 3,3V 8-bit, sector size 128 KiB 这说明nand大小为256M,工作电压3.3v,数据总线为8位,扇区大小为128K。首先我们
[单片机]
U-<font color='red'>boot</font>-2014.04移植到MINI2440(7) <font color='red'>nand</font> flash datasheet及arm9控制寄存器分析
第六章、Tiny4412 U-BOOT移植六 Nand Flash源码分析
一、U-Boot参考源码 NandFlash的初始化代码我们放在board/samsung/tiny4412/lowlevel_init.S ,这一段代码是三星SMDK4212中没有提供的,所以我们需要自己写。我们在里面增加一个函数叫nand_asm_init。当然,由于 Nand Flash 的操作是有一定的规律的,所以,我们可以去别的地方找一段写好的NandFlash源码,然后根据自己的电路原理图进行移植即可。 二、代码分析 1、初始化Nand Flash 打开原理图,参看原理图配置各个功能引脚----状态引脚R/nB,读使能引用脚nRE,片选信号nCE,命令使能引脚CLE,地址使能引脚ALE,写使能引脚nWE。
[单片机]
第六章、Tiny4412 U-<font color='red'>BOOT</font>移植六 <font color='red'>Nand</font> Flash源码分析
Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD启动环境搭建
/*********************************************************************************** * * linux 3.5,U-Boot,Busybox,SD卡启动环境搭建 * * 声明: * 1. 本系列文档是在vim下编辑,请尽量是用vim来阅读,在其它编辑器下可能会 * 不对齐,从而影响阅读. * 2. 以下所有的shell命令都是在root权限下运行的; * 3. minicom(U-Boot)指的是用minicom连接开发板做为U-Boot的终端; * 4. 文中在需
[单片机]
S3c2440如何利用JLINK烧写U-bootNAND Flash中
很多同学使用笔记本作为自己的ARM开发和学习的平台,绝大多数笔记本都没有并口,也就是无法使用JTag调试和烧写程序到Nand Flash中,幸好我们还有JLINK,用JLINK烧写U-boot到Nor Flash中很简单,大部分NOR Flash都已经被JLink的软件SEGGER所支持,而新手在学习的时候经常会实验各种各样的命令,最悲剧的莫过于将NAND Flash中原有的bootloader给删除了,这时候开发板上电后由于没有bootloader,硬件没有被初始化,在NAND Flash中的操作系统也就无法被加载,开发板成“砖”了,这时候笔记本又无法利用JTag烧写程序进Nand Flash。起始这些可以利用JLink通过两种
[单片机]
如何在Ubuntu下使用TF/SD 卡制作Exynos 4412 u-boot启动
/** ****************************************************************************** * @author Maoxiao Hu * @version V1.0.1 * @date Feb-2015 ****************************************************************************** * COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY **************************************************
[单片机]
如何在Ubuntu下使用TF/<font color='red'>SD</font> 卡制作Exynos 4412 u-<font color='red'>boot</font><font color='red'>启动</font>盘
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved