嵌入式启动过程笔记

内存。

sram:静态内存,价格贵容量大,不需要初始化上电就能用。

dram:动态内存,价格便宜容量小,需要初始化后才能使用。

在单片机额中,由于内存小希望开发尽量简单,所以内存适合全部用sram,在pc机中,所需内存大,软件复杂,不在乎dram初始化的开销,所以应该全部选用dram,在嵌入式系统中,内存需求量大而且没有norflash等启动介质。(一般内部有iram就是sram用来启动,运行用dram,我推测的)。

外存

norflash:容量小,价格贵,可以和cpu总线直接相连,直接读取,所以一般作为启动介质。

nandflash:容量大,价格便宜,不能总线式访问,不可以直接读取,需要初始化,然后通过时序接口读写。

pc机一般用很小的BIOS(norflash)+大容量硬盘(类似于nandflash)+大容量dram

嵌入式系统一般用 外接大容量nandflash +大容量Dram+soc内置sram(由于norflash比较昂贵,一般不用)

单片机:很小的sram+很小的norflash。

S5PV210使用的启动方式是:外接的大容量Nand + 外接大容量DRAM + SoC内置SRAM

实际上210的启动还要更好玩一些,210内置了一块96KB大小的SRAM(叫iRAM),同时还有一块内置的64KB大小的NorFlash(叫iROM)。210的启动过程大致是:

第一步:CPU上电后先从内部IROM中读取预先设置的代码(BL0),执行。这一段IROM代码首先做了一些基本的初始化(CPU时钟、关看门狗···)(这一段IROM代码是三星出厂前设置的,三星也不知道我们板子上将来接的是什么样的DRAM,因此这一段IROM是不能负责初始化外接的DRAM的,因此这一段代码只能初始化SoC内部的东西);然后这一段代码会判断我们选择的启动模式(我们通过硬件跳线可以更改板子的启动模式),然后从相应的外部存储器去读取第一部分启动代码(BL1,大小为16KB)到内部SRAM。

第二步:从IRAM去运行刚上一步读取来的BL1(16KB),然后执行。BL1负责初始化NandFlash,然后将BL2读取到IRAM(剩余的80KB)然后运行

第三步:从IRAM运行BL2,BL2初始化DRAM,然后将OS读取到DRAM中,然后启动OS,启动过程结束。

我的困惑:

我用的时s3c2451的开发板是在nandflash启动,上面说nandflash不能直接读取数据,那怎么启动?

解决:norflash启动和nandflash启动的区别

norflash:norflash有自己的地址总线和数据总线,cpu可以直接读取 ,所以norflash可以直接运行程序,也可以直接做uboot,地址被映射到0x0000 0000处。

nandflash:Nand flash是IO设备,数据、地址、控制线都是共用的,需要软件区控制读取时序,所以不能像nor flash、内存一样随机访问,不能EIP(片上运行),因此不能直接作为boot。

NANDFlash控制器自动把nandflash存储器的前4K载到Steppingstone(内部SRAM缓冲器),并把0x00000000S设置为内部SRAM的起始地址,cpu从内部SRAM的0x00000000开始启动,这个过程不需要程序干涉。

(cpu会自动从NAND flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,只好使用片内SRAM做一个载体。通过这个载体把nandflash中大代码复制到RAM(一般是SDRAM)中去执行)。

程序员要完成的工作是把最核心的代码放在nandflash的前4K中。4K代码要完成S3C2451的核心配置以及启动代码(U-boot)的剩余部分拷贝到SDRAM中。

。NORflash速度快,数据不易失,可作为存储并执行起到代码和应用程序的存储器,norflash可像内存一样读操作,但擦初和写操作效率很低,价格很昂贵。SDRAM和nandflash的价格比较适中。根据这些特点,一些人产生了这样一种想法:外部nandflash中执行启动代码,SDRAM中执行主程序。NANDFlash控制器自动把nandflash存储器的前4K载到Steppingstone(内部SRAM缓冲器),并把0x00000000S设置为内部SRAM的起始地址,cpu从内部SRAM的0x00000000开始启动,这个过程不需要程序干涉。这4K的启动代码需要将NANDFlash中的内容复制到SDRAM(dram中的一种)中执行。NANDFlash的前4K空间放启动代码,SDRAM速度较快,用来执行主程序的代码。ARM一般从ROM或Flash启动完成初始化,然后将应用程序拷贝到RAM,然后跳到RAM执行。

时间: 2024-10-12 23:57:37

嵌入式启动过程笔记的相关文章

Linux启动过程笔记

Linux启动过程 1.启动流程(BIOS->MBR:Boot Code->引导GRUB->加载内核->执行init->runlevel) 2./boot/grub/下有多个文件   其中stage1为MBR镜像(512字节) stage2为引导程序 3./boot/grub/grub.conf为引导的配置文件 default=0#默认加载下边哪个系统 timeout=3#引导等待时间 splashimage=(hd0,1)/boot/grub/splash.xpm.gz#引

嵌入式开发学习(2)<S5PV210启动过程详解>

基本概念: 内存: SRAM  静态内存  特点:容量小.价格高,优点:不需要软件初始化,上电就能用. DRAM  动态内存  特点:容量大.价格低,缺点:上电不能用,需要软件初始化. 单片机中:内存需求量小,而且希望开发尽量简单,适合全部用SRAM. 嵌入式系统:内存需求量大,而且没有NorFlash等可启动介质.(介于单片机和PC机中间). PC机:内存需求量大,而且软件复杂,不在乎DRAM的初始化开销,适合全部用DRAM. 外存: NorFlash 容量小,价格高,可以和cpu总线式相连,

openstack学习笔记一 虚拟机启动过程代码跟踪

本文主要通过对虚拟机创建过程的代码跟踪.观察虚拟机启动任务状态的变化,来透彻理解openstack各组件之间的作用过程. 当从horizon界面发送一个创建虚拟机请求,horizon api 将会依据前端给定的数据信息.调用novaclient 生成一个创建虚拟机的http post 请求来创建vm服务. >/usr/lib/python2.6/site-packages/horizon/api/nova.py(334)server_create() > /usr/lib/python2.6/

iOS复习笔记16:应用启动过程和工程结构

一 新建项目 打开Xcode->new->Project->iOS->Single View Application->下一步->输入工程名->下一步->选择路径->create 二 启动过程 1 载入程序到内存 2 在main函数中创建UIApplication 3 创建AppDelegate 4 开始主循环,监听事件 5 创建UIWindow,设置活动窗口 7 加载Info.plist文件,读取主storyboard文件 8 加载storyboar

嵌入式Linux学习笔记(基于S5PV210 TQ210)

基于S5PV210.TQ210平台. 本文更多的是教会大家如何学习! 包括如下内容: 1.前言 2.开发环境搭建 3.制作交叉编译器 4.裸机编程 4.1.汇编学习 4.2.S5PV210启动流程 4.3.点亮一个LED 4.4.串口 4.5.实现printf 4.6.时钟配置 4.7.重定位 4.8.DDR 4.9.NAND读写 4.11.LCD操作 5.移植u-boot(基于u-boot-2014.4版本) 5.1.概述 5.2.u-boot配置过程分析 5.3.u-boot编译过程分析 5

嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )

发现放到Blog之后排版全乱套了.. 已经把PDF上传到资源页了  http://download.csdn.net/detail/lyy289065406/8934637 那边排版好看一点...看官们随意吧 >...< · 目 录 导 航 1. 引言 1.1. 编写目的 1.2. 阅读范围 1.3. 声明 1.4. 缩写词/名词解释 1.5. 参考资料 2. 嵌入式开发学习笔记 2.1. 开发环境/测试环境 2.2. 开坑:提要 2.3. 入坑:JNI 2.3.1. navicate 接口定

嵌入式OS入门笔记-以RTX为案例:十.Keil的RTX调试支持

嵌入式OS入门笔记-以RTX为案例:十.Keil的RTX调试支持 调试(debug)是软件开发的一个重要环节,对于嵌入式开发而言这个环节其实比较依赖一些硬件资源(硬件debugger)的支持.传统的嵌入式系统的调试比较依赖断点(breakpoint)和单步调试(single step through).而 ARM cortex-M 系列的芯片其实有很强的CoreSight片上调试支持,实际上就是一个小的调试硬件,作为ARM的标准,内嵌在ARM的芯片里.在ARM自家的调试器ULINK-pro等的帮

memcached-1.4.20 主要启动流程笔记

以下笔记主要是关注tcp模式下memcached的启动过程. main() 设置信号处理函数为sig_handler() 初始化系统设置,保存在全局变量settings里面 settings_init(); 解析启动参数,使用settings局变量保存配置 根据启动参数初始化系统具体使用的hash函数,默认为jenkins_hash()哈希函数 hash_init() ; 根据tcp_specified的值设置网络监听模式,默认为tcp模式 之后设置可使用的cpu核的数量以及最大链接数量 限制启

嵌入式启动之二:资源宽裕型嵌入式系统

上一篇介绍了资源紧缺型嵌入式系统的启动过程,如今介绍资源宽裕型嵌入式系统的启动过程. 内存资源宽裕型操作系统一般都外挂SDRAM,而且CPU的计算能力都比較强,比如基于cortex A.MIPS 74k等核心的SOC. 下图是两种嵌入式系统架构的差别: 图1,对于资源紧缺型系统,内置flash和ram. 上电之前就已经通过烧写工具将代码写到内置flash(nor flas).而iram用于data读写. 图2是资源宽裕型系统.其代码都放在外置存储介质中,如nand.sd卡等,包含引导OS的启动代