博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
存储器
阅读量:4112 次
发布时间:2019-05-25

本文共 3984 字,大约阅读时间需要 13 分钟。

一  通用存储设备:

在介绍内存工作原理之前有必要了解下存储设备的存储方式:ROM,RAM

l  ROM(Read-Only Memory):只读存储器,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失。如:PC里面的BIOS。ROM还可以细分为不可编程ROM,可编程ROM(PROM),可擦除(PROM)和电可擦除(EEPROM)。

目前ROM有被flash替代的趋势,NOR和NAND是目前市场上两种主流的flash技术。

l  RAM(Random Access Memory) :随机访问存储器,存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。可以理解为,当你给定一个随机有效的访问地址,RAM会返回其存储内容(随机寻址),它访问速度与地址的无关。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间内随机访问使用的程序。计算机系统里内存地址是一个四字节对齐的地址(32位机),CPU的取指,执行,存储都是通过地址进行的,因此它可以用来做内存。

RAM按照硬件设计的不同,随机存储器又分为DRAM(Dynamic RAM)动态随机存储器和SRAM(Static RAM) 静态随机存储器。

l  DRAM它的基本原件是小电容,电容可以在两个极板上短时间内保留电荷,可以通过两极之间有无电压差代表计算机里的0和1,由于电容的物理特性,要定期的为其充电,否则数据会丢失。对电容的充电过程叫做刷新,但是制作工艺较简单,体积小,便于集成化,经常做为计算机里内存制作原件。比如:PC的内存,SDRAM, DDR, DDR2, DDR3等,缺点:由于要定期刷新存储介质,存取速度较慢。

l  SRAM它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。因此其存取速度快,但是体积较大,功耗大,成本高,常用作存储容量不高,但存取速度快的场合,比如CPU的L1 cache,L2cache(一级,二级缓存) ,寄存器。

 

为了满足开发的需要MINI2440在出厂时搭载了三种存储介质:

(1)NOR FLASH(2M):ROM存储器,通常用来保存BootLoader,引导系统启动

(2)NAND FLASH(256M,型号不一样,Nandflash大小不一样):保存操作系统映像文件和文件系统

(3)SDRAM(64M):内存,执行程序

l  NOR FLASH它的特点是支持XIP芯片内执行(eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中,也就是说可以随机寻址。NOR FLASH的成本较高。

l  NAND FLASH:它能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。其成本较低,不支持XIP。可做嵌入式里的数据存储介质。如:手机存储卡,SD卡等。

Nand Flash:适合大容量数据存储,类似硬盘;

Nor Flash:适合小容量的程序或数据存储,类似小硬盘;

SDRAM:主要用于程序执行时的程序存储、执行或计算,类似内存。SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM。

          Nor Flash有自己的地址线和数据线,可以采用类似于memory的随机访问方式,Nor Flash上可以直接运行程序,所以Nor Flash可以直接用来做boot,采用Nor Flash启动的时候会把地址映射到0x00上。

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

简单点说:

norflash 读取快,写入慢,总线结构,能运行代码,价格贵。nandflash 读取慢,写入快,非总线结构,不能运行代码,价格便宜。sdram 读取和写入都很快,掉电不能保存数据,价格贵。1,SDRAM+nand flash 是因为SDRAM快,nand flash 便宜,现在最好的搭配。2,nor flash + nand flash nor fash慢,nand flash便宜,估计没哪个公司会用。3,SDRAM + nor flashSDRAM快,norflash使用比nand flash简单。

二 S3C2440的启动

 Nand Flash启动:Nand Flash控制器自动把Nand Flash存储器的前4K复制到Stepping Stone(内部SRAM缓冲器),并把0x0000_0000设置为内部SRAM的起始地址,CPU从内部SRAM的0x0000_0000开始启动,这个过程不需要程序干涉。(CPU会自动从Nand Flash中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x0000_0000)。CPU是从0x0000_0000开始执行,也就是Nand Flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x0000_0000,只好使用片内SRAM做一个载体。通过这个载体把Nand Flash中大代码复制到RAM(一般是SDRAM)中去执行)。

         程序员要完成的工作是把最核心的代码放在Nand Flash的前4K中。4K代码要完成S3C2440的核心配置以及启动代码(U-boot)的剩余部分拷贝到SDRAM中。这4K的启动代码需要将Nand Flash中的内容复制到SDRAM中执行。Nand Flash的前4K空间放启动代码,SDRAM速度较快,用来执行主程序的代码。ARM一般从ROM或Flash启动完成初始化,然后将应用程序拷贝到RAM,然后跳到RAM执行。

 

        Nor Flash启动:支持XIP即代码直接在Nor Flash上执行,无需复制到内存中。这是由于Nor Flash的接口与RAM完全相同,可随机访问任意地址数据。Nor Flash速度快,数据不易失,可作为存储并执行起到代码和应用程序的存储器,Nor Flash可像内存一样读操作,但擦除和写操作效率很低,远不及内存,一般先在代码的开始部分使用汇编指令初始化外接的的内存部件(外存SDRAM),最后跳到外存中继续执行。对于小程序一般把它烧到Nand Flash中,借助CPU内部RAM(SRAM)直接运行。

        Nor Flash被映射到0x0000_0000地址(就是nGCS0,这里就不需要片内SRAM来辅助了,所以片内SRAM的起始地址还是0x4000_0000)。然后CPU从0x0000_0000开始执行(也就是在Nor Flash中执行)。

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

 

总结:ARM的启动都是从0地址开始,所不同的是地址的映射不一样。在ARM开电的时候,要想让ARM知道以某种方式(地址映射方式)运行,不可能通过你写的某段程序控制,因为这时候你的程序还没启动,这时候ARM会通过引脚的电平来判断。

1.当引脚OM0跟OM1有一个是高电平时,这时地址0会映射到外部nGCS0片选的空间,也就是Nor Flash,程序就会从Nor Flash中启动,ARM直接取Nor Flash中的指令运行。

2.当OM0跟OM1都为低电平,则0地址内部bootbuf(一段4k的SRAM)开始。系统上电,ARM会自动把Nand Flash中的前4K内容考到bootbuf(也就是0地址),然后从0地址运行。这时Nand Flash中的前4K就是启动代码(他的功能就是初始化硬件然后在把Nand Flash中的代码复制到RAM中,再把相应的指针指向该运行的地方)

 

        为什么会有这两种启动方式,关键还是两种Flash的不同特点造成,NOR FLASH容量小,速度快,稳定性好,输入地址,然后给出读写信号即可从数据口得到数据,适合做程序存储器。Nand Flash总容量大,但是读写都需要复杂的时序,更适合做数据存储器。这种不同就造成了Nor Flash可以直接连接到ARM的总线并且可以运行程序,而Nand Flash必须搬移到内存(SDRAM)中运行。

        在实际的开发中,一般可以把bootloader烧入到Nor Flash,程序运行可以通过串口交互,进行一定的操作,比如下载,调试。这样就很可以很方便的调试你的一些代码。Nor Flash中的Bootloader还可以烧录内核到Nor Flash等等功能。

转载地址:http://byrsi.baihongyu.com/

你可能感兴趣的文章
部分常用到的SQLite语句
查看>>
堆和栈的区别
查看>>
当异常出现时
查看>>
<iOS>iPhone 应用里实现截屏功能的代码
查看>>
iOS6 中新的控件UIRefreshControl下拉刷新
查看>>
bitbucket和git 进行代码管理
查看>>
在CGD中快速实现多线程的并发控制
查看>>
IOS开发网络篇之──ASIHTTPRequest详解
查看>>
IOS开发网络篇之──ASIHTTPRequest下载示例(支持断点续传)
查看>>
<iOS>通过运行时来实例化一个,只知道名字的类, 名字为变量
查看>>
工作备注一下
查看>>
通过UIView寻找UIViewController(Find UIViewController by UIView)
查看>>
UIButton在设置Image时,会把之前设置的frame给覆盖掉。
查看>>
ios的一些知识点
查看>>
Wax 将Lua带人iPhone开发
查看>>
开发愤怒的小鸟的Lua语言:Wax框架详解(二)
查看>>
用Lua开发iphone程序
查看>>
苹果个人开发者账号如何升级成公司账号
查看>>
清华大学老师的一席话——太受益了
查看>>
iOS 粒子效果 CAEmitterCell CAEmitterLayer
查看>>