存储器

一  通用存储设备:

在介绍内存工作原理之前有必要了解下存储设备的存储方式: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) 静态随机存储器。

SDRAM(Synchronous Dynamic Random Access Memory)同步动态随机存取存储器,同步是指Memory工作需要步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是由指定地址进行数据读写。目前的168线64bit带宽内存基本上都采用SDRAM芯片,工作电压3.3V电压,存取速度高达7.5ns,而EDO内存最快为15ns。并将RAM与CPU以相同时钟频率控制,使RAM与CPU外频同步,取消等待时间,所以其传输速率比EDO DRAM更快。


SDRAM从发展到现在已经经历了四代,分别是:第一代SDR SDRAM,第二代DDR SDRAM,第三代DDR2 SDRAM,第四代DDR3 SDRAM.
第一代与第二代SDRAM均采用单端(Single-Ended)时钟信号,第三代与第四代由于工作频率比较快,所以采用可降低干扰的差分时钟信号作为同步时钟。
SDR SDRAM的时钟频率就是数据存储的频率,第一代内存用时钟频率命名,如pc100,pc133则表明时钟信号为100或133MHz,数据读写速率也为100或133MHz。
之后的第二,三,四代DDR(Double Data Rate)内存则采用数据读写速率作为命名标准,并且在前面加上表示其DDR代数的符号,PC-即DDR,PC2=DDR2,PC3=DDR3。如PC2700是DDR333,其工作频率是333/2=166MHz,2700表示带宽为2.7G。
DDR的读写频率从DDR200到DDR400,DDR2从DDR2-400到DDR2-800,DDR3从DDR3-800到DDR3-1666。
很多人将SDRAM错误的理解为第一代也就是 SDR SDRAM,并且作为名词解释,皆属误导,SDR不等于SDRAM。


Pin:模组或芯片与外部电路电路连接用的金属引脚,而模组的pin就是常说的“金手指”。
SIMM:Sigle In-line Memory Module,单列内存模组。内存模组就是我们常说的内存条,所谓单列是指模组电路板与主板插槽的接口只有一列引脚(虽然两侧都有金手指)。
DIMM:Double In-line Memory Module,双列内存模组。是我们常见的模组类型,所谓双列是指模组电路板与主板插槽的接口有两列引脚,模组电路板两侧的金手指对应一列引脚。
RDIMM:registered DIMM,带寄存器的双线内存模块
SO-DIMM:笔记本常用的内存模组。
工作电压:
SDR:3.3V
DDR:2.5V
DDR2:1.8V
DDR3:1.5V
 
SRAM
 
SRAM是英文Static RAM的缩写,它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。不像DRAM内存那样需要刷新电路,每隔一段时间,固定要对DRAM刷新充电一次,否则内部的数据即会消失,因此SRAM具有较高的性能,但是SRAM也有它的缺点,即它的集成度较低,相同容量的DRAM内存可以设计为较小的体积,但是SRAM却需要很大的体积,所以在主板上SRAM存储器要占用一部分面积,在主板上哪些是SRAM呢?

一种是置于CPU与主存间的高速缓存,它有两种规格:一是固定在主板上的高速缓存(Cache  Memory );二是插在卡槽上的COAST(Cache On A Stick)扩充用的高速缓存,另外在CMOS芯片1468l8的电路里,它的内部也有较小容量的128字节SRAM,存储我们所设置的配置数据。
 
还有一种是为了加速CPU内部数据的传送,自80486CPU起,在CPU的内部也设计有高速缓存,故在Pentium CPU就有所谓的L1 Cache(一级高速缓存)和L2Cache(二级高速缓存)的名词,一般L1 Cache是内建在CPU的内部,L2 Cache是设计在CPU的外部,但是Pentium Pro把L1和L2 Cache同时设计在CPU的内部,故Pentium Pro的体积较大。最新的Pentium II又把L2 Cache移至CPU内核之外的黑盒子里。
SRAM显然速度快,不需要刷新的动作,但是也有另外的缺点,就是价格高,体积大,所以在主板上还不能作为用量较大的主存。现将它的特点归纳如下:

◎优点,速度快,不必配合内存刷新电路,可提高整体的工作效率。 
◎缺点,集成度低,功耗较大,相同的容量体积较大,而且价格较高,少量用于关键性系统以提高效率。 
◎SRAM使用的系统: 
○CPU与主存之间的高速缓存 
○CPU内部的L1/L2或外部的L2高速缓存 
○CPU外部扩充用的COAST高速缓存 
○CMOS 146818芯片(RT&CMOS SRAM)
 
SRAM与SDRAM的比较:

SRAM是靠双稳态触发器来记忆信息的;SDRAM是靠MOS电路中的栅极电容来记忆信息的。由于电容上的电荷会泄漏,需要定时给与补充,所以动态RAM需要设置刷新电路。但动态RAM比静态RAM集成度高、功耗低,从而成本也低,适于作大容量存储器。所以主内存通常采用SDRAM,而高速缓冲存储器(Cache)则使用SRAM,在存取速度上,SRAM>SDRAM。另外,内存还应用于显卡、声卡及CMOS等设备中,用于充当设备缓存或保存固定的程序及数据。

 

为了满足开发的需要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 flash
SDRAM快,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等等功能。


S3C2440的启动时读取的第一条指令是在0x00上,分为成nand flashnor flash上启动。

 norflash有自己的地址线和数据线,可以采用类似于memory的随机访问方式,在nor flash上可以直接运行程序,所以nor flash可以直接用来做boot,采用nor flash启动的时候会把地址映射0x00上。mini2440就是直接把vivi直接烧录在norflash上。

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

S3C2440boot loader烧到nandflash上启动,因为S3C2440里有一个内置的SRAM,叫做stepping stone(垫脚石,很形象…),系统启动加电后,会把nand flash上的起始4KB的内容拷贝到SRAM里执行,这样就实现了从nand flash启动。如果bootloader小于4KB的话(像vboot),在SRAM里就能boot,大于4KB的话(u-bootvivi),在SRAM里做一些基本初始化后,再把bootloader的剩余部分拷贝到SDRAM里(>0x30000000)。

//==========================================================================//注:bootloader是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,bootloader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的bootloader几乎是不可能的。尽管如此,我们仍然可以对 BootLoader 归纳出一些通用的概念来,以指导用户特定的 bootloader设计与实现。

//==========================================================================//

我们使用S3C2440的时候,经常通过nor flash启动,进入vivi的菜单(S3C2440norflash已经烧录好了vivi),之后通过viviUSB下载功能,把其他的bootloader下载到nand flash里,下载完成后,再通过nand flash启动,测试我们的boot loader

 nor flash适合做代码存储并EIP的,nand flash适合用来作大量数据存储的。

Nand flash启动: nand flash存储器的前4K将被自动加载到Stepping stone(内部SRAM缓冲器),然后系统自动执行这些载入的启动代码,这4K的启动代码需要将nand flash中的内容复制到SDRAM中执行。nand flash的前4K空间放启动代码,SDRAM速度较快,用来执行主程序的代码。

//==========================================================================//注:SDRAM(SynchronousDynamic Random Access Memory),同步动态随机存储器,同步是指 Memory工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;动态是指存储阵列需要不断的刷新来保证数据不丢失;随机是指数据不是线性依次存储,而是自由指定地址进行数据读写。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值