Linux嵌入式系统开发
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.4 存储器

存储器是ARM体系结构中的重要组成部分。

3.4. 1 存储器简介

存储器主要分为以下几种类型:

■ 按照静态和动态分类

静态Static:SRAM,FIFO

动态Dynamic:SDRAM,DRAM

■ 按照易失性和非易失性分类

易失性Volatile:RAM,SRAM,SDRAM,FIFO,Dual-PORT

非易失性Nonvolatile:ROM,EPROM,EEPROM,Flash

■ 按照同步和异步分类

同步Synchronous:SDRAM

异步Asynchronous:DRAM

(1)RAM

随机存储器(Random Access Memory,RAM)又称主存,俗称内存(Memory)。

RAM称为内存条,它的技术、性能及容量等随着CPU的更新而不断更新与提高,以适应更快更好的CPU运行的需要。

RAM的特点是可以随时存取数据,但是一旦断电,保存在其中的数据就会全部丢失。

RAM一般分为两类:动态RAM(Dynamic RAM,DRAM)及静态RAM(Static RAM,SRAM)。

一个SRAM单元通常由4~6只晶体管组成,当这个SRAM单元被赋予“0”或者“1”的状态之后,它会保持这个状态直到下次被赋予新的状态或者断电后才会更改或者消失。SRAM的速度相对比较快,而且比较省电,但是存储1bit的信息需要4~6只晶体管,制造成本太高。

DRAM动态随机存储器,DRAM必须在一定的时间内不停的刷新才能保持其中存储的数据。DRAM只需1只晶体管就可以实现。

由于SRAM的读写速度远大于DRAM,所以PC中SRAM大都作为高速缓存使用,DRAM则作为普通的内存和显示内存使用。

(2)SRAM结构

SRAM结构如图3-4所示。

图3-4 SRAM结构图

是芯片选择引脚,在一个实际的系统中,会有很多芯片,所以需要选择从哪一片芯片中写入或者读取数据。

是写入启用引脚,当SRAM得到一个地地址后,它需要知道进行什么操作,是写入还是读取,就告诉SRAM要写入的数据。

■ Vcc是供电引脚。

■ Din是数据输入引脚。

■ Dout是数据输出引脚。

■ GND是接地引脚。

■ Output Enable(OE):有的SRAM芯片中也有这个引脚,但是图3-4中并没有。这个引脚同引脚的功能是相对的,它是让SRAM知道要进行读取操作而不是写入操作。

■ A0~A13是地址输入信号引脚。

(3)SRAM读取操作

■ 通过地址总线把要读取的bit的地址传送到相应的读取地址引脚。此时,引脚应该没有激活,所以,SRAM知道它不会执行写入操作。

■ 激活,选择该SRAM芯片。

■ 激活引脚,让SRAM知道是读取操作。

经过这三步操作后,要读取的数据就会从Dout引脚传输到数据总线。

(4)SRAM写入操作

■ 通过地址总线确定要写入信息的位置。

■ 通过数据总线将要写入的数据传输到Dout引脚。

■ 激活引脚,选择SRAM芯片。

■ 激活引脚,通知SRAM执行写入操作。

经过上面的4个步骤后,需要写入的数据就已经放在了需要写入的地方。

(5)DRAM读取过程

■ 通过地址总线将行地址传输到地址引脚。

引脚被激活,这样行地址被传送到行地址门闩线路中。

■ 行地址解码器根据接收到的数据选择相应的行。

引脚确定不被激活,所以,DRAM知道它不会进行写入操作。

■ 列地址通过地址总线传输到地址引脚。

引脚被激活,这样列地址被传送到行地址门闩线路中。

引脚同样还具有引脚的功能,所以,此时Dout引脚知道需要向外输出数据。

都不被激活,这样就可以进行下一个周期的数据操作。

(6)DRAM刷新

DRAM与SRAM最大的不同就是不能长久的保持数据。DRAM内仅仅能短暂的保持其内存储的电荷,所以,它需要在其内的电荷消失之前就进行刷新,直到下次写入数据或者计算机断电才停止。

每次读/写操作都能刷新DRAM内的电荷,所以,DRAM就被设计为有规律的读取DRAM内的内容。

■ 仅仅使用激活每一行就可以达到全部刷新的目的。

■ 用DRAM控制器来控制刷新,这样可以防止刷新操作干扰有规律的读/写操作。

3.4.2 SDRAM操作

SDRAM主要有以下操作内容。

(1)初始化

SDRAM在上电后,首先必须按照预定的方式进行初始化才能正常运行。一旦VDD和VDDQ被同时供电并且时钟稳定下来,SDRAM就需要一个100mm的延迟,在这个时间段中,COMMANDINHIBIT和NOP指令有效,这个过程实际上就是内存的自检过程,一旦这个过程通过后,一个PRECHARGE命令就会紧紧随着最后一个COMMANDINHIBIT或者NOP指令而生效,这期间所有的内存处于空闲状态,随后会执行两个AUTOREFRESH周期,当AUTOREFRESH周期完毕后,SDRAM为进行Mode Register编程做好了准备。

Mode Register必须在所有的bank处于idle状态下才能被载入,在所有初始化工作进行完毕前,控制器必须等待一定的时间。在初始化过程中发生任何非法的操作都可能导致初始化失败,从而导致整个系统不能启动。

(2)突发长度

Read和Write操作都是通过突发模式访问SDRAM的,突发模式的长度都是在初始化过程中载入Mode Register中的参数,这些参数是由厂商或者用户定义的。突发长度决定了Read或者Write命令能够访问的列地址的最大数目。对于sequential和interleaved这两种突发模式,它们的突发长度是1、2、4、8,全页突发模式仅仅适用于sequential类型。

(3)SDRAM读取状态进阶分析

当行地址选定并且相应的行被打开后,Read命令将要开始执行。BA引脚决定对哪个bank进行操作,A10引脚的信号决定了是否进行AUTOPRECHAGE,如果它处于高电平就说明在读取突发进行完毕之后所读取的行会进入预充电状态,该行也会从打开状态变为关闭状态。A0~A7传输列地址数据。CS处于低电平状态,保证对于需要操作芯片的选择。RAS此时处于高电平,因为该行已经打开,直到执行PRECHAGE命令才会关闭,所以,RAS此时处于无效状态。因为这个时候是对于列的选择,所以,CAS处于低电平状态,进行列地址的选择。因为是读取操作,WE是高电平,处于无效的状态。

(4)Write过程分析

Write突发过程是以Write指令的初始化开始的,在初始化过程中起始行和bank地址将会被确定。如果AUTOPRECHARGE有效,被访问的行将会在突发结束后进行预充电。

对一般的Write指令来说,AUTOPRECHARGE指令是会被屏蔽的。

Write命令写入时的状态,在这个时钟的上升沿,CS#也进行相应的芯片选择,BA已经确定了需要进行操作的bank,需要操作的行已经打开,直到执行下次读取操作或者PRECHARGE命令时,才会关闭该行,所以,此时RAS#是高电平处于无效状态,因为需要进行列地址的选择,所以,CAS#处于低电平,因为要进行写入操作WE#也是低电平状态。

3.4.3 Flash

Nor和Nand是现在市场上两种主要的非易失闪存技术。

Intel于1988年首先开发出Nor Flash技术,彻底改变了原来由EPROM和EEPROM一统天下的局面。Nor的特点是在芯片内执行,这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中。

Nand结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用Nand的困难在于Flash的管理需要特殊的系统接口。

(1)性能比较

擦除Nor器件是以64~128KB的块进行的,执行一个写入/擦除操作的时间为5s,与此相反,擦除Nand器件是以8~32KB的块进行的,执行相同的操作最多需要4ms。

Nor的读速度比Nand稍快一些。

Nand的写入速度比Nor快很多。

Nand的擦除单元更小,相应的擦除电路更少。

(2)容量和成本

Nand Flash的单元尺寸几乎是Nor器件的1/2,由于生产过程更为简单,Nand结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。

(3)接口差别

Nor Flash带有SRAM接口,有足够的地址引脚寻址,可以很容易地存取其内部的每一个字节。

Nand器件使用复杂的I/O接口串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。Nand读和写操作采用512字节的块。