anhuihbo

SDRAM存储器(转)

0
阅读(3137)

 

SDRAM存储器

 

概述

随机存取存储器RAM(random access memory)是易失性的存储器,在掉电以后数据立即消失。与ROM器件不同的是,它的随机读写速度非常快,写入数据之前也不需要进行擦除,这些特性使得它成为嵌入式系统中必不可少的存储设备之一。在嵌入式系统中,通常都将数据区和堆栈区放在RAM中,以供快速地读和写。

常用的RAM分为SRAM(静态RAM)和DRAM(动态RAM)两种类型,这里将介绍两种RAM的区别,并着重介绍同步动态RAM(SDRAM)器件。S3C44B0X芯片本身提供了与DRAM和SDRAM进行直接接口的解决方案,因此,不需要通过编程来实现它们所需的接口时序,而只需对与存储器控制器相关的寄存器进行适当配置。这个配置工作一般在启动代码中完成,系统在每次上电后但还未开始执行C语言程序之前,配置好SDRAM的特性参数,然后再进入C程序运行。

SRAM器件的结构特点

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

DRAM器件的结构特点

DRAM与SRAM不同,存储一个位的信息只需要1只晶体管,但是需要周期性地充电,才能使保存的信息不消失。DRAM的一个存储位单元结构如图7.8 所示。

图7.8只是DRAM一个基本单位的结构示意图,电容器的状态决定了这个DRAM单位的逻辑状态是1还是0。一个充电的电容器被认为是逻辑上的1,而“空”的电容器则是0。但是电容器被利用的这个特性也是它的缺点,因为电容器不能持久地保持储存的电荷,所以内存需要不断定时刷新,才能保持暂存的数据。电容器可以由有一定限制的电流来充电,同时电容的充放电需要一定时间,虽然对于内存基本单位中的电容来说这个时间很短,只有大约0.2~0.18us,但是这个期间内存是不能执行存取操作的。

DRAM的一些资料显示,内存至少要每64ms刷新一次,这也就意味着内存有1%的时间要用来刷新。当对内存单元进行读取操作时要保持内存的内容不变,所以DRAM单元每次读取操作之后都要进行刷新,也就是执行一次“回写”操作。因为读取操作会破坏内存中的电荷,因此,内存不但要每64 ms刷新一次,而且每次读操作之后还要刷新一次,这样就增加了存取操作的周期。

DRAM的存取速度没有SRAM快,但是DRAM更容易做成大容量的RAM。一般的嵌入式系统中,主存储器采用DRAM,而快速存储器(cache memory)则采用SRAM。DRAM的优点是制造成本比SRAM低得多。一般DRAM中存储单元的内部结构如图7.9所示。

 

          

图7.8  DRAM的存储位单元结构            图7.9  DRAM中存储单元的内部结构

从图7.9中可以看到在DRAM结构中相对于SRAM多了两个部分:一个是由 (行地址脉冲选通器)引脚控制的行地址锁存器(row address latch),另一个是由(列地址脉冲选通器)引脚控制的列地址锁存器(column address latch)。

例如,DRAM读取过程按以下步骤进行。

1)处理器通过地址总线将行地址传输到DRAM的地址引脚。

2)RAS引脚被激活,这样,行地址被传送到行地址锁存器中。

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

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

5)处理器通过地址总线将列地址传输到DRAM的地址引脚。

6)CAS引脚被激活,这样列地址被传送到列地址锁存器中。

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

8)RAS和CAS都失效,这样就可以进行下一个周期的数据操作了。

DRAM的写入过程和读取过程基本一样,这里不再讲述。

在DRAM读取方式中,当一个读取周期结束后,RAS和CAS都必须失效,然后再进行一个回写过程才能进入到下一次的读取周期中。

SDRAM器件的构成原理和应用特点

SDRAM的存储位单元的基本原理同前面提到的DRAM基本一样,但是这些存储位单元的组织和控制与DRAM却有很大的差别。

SDRAM是多Bank结构,例如在一个具有两个Bank的SDRAM的模组中,其中一个Bank在进行预充电期间,另一个Bank却马上可以被读取,这样当进行一次读取后,又马上去读取已经预充电Bank的数据时,就无需等待而是可以直接读取了。这也就大大提高了存储器的访问速度。

为了实现这个功能,SDRAM需要增加对多个Bank的管理,实现控制其中的Bank进行预充电。在一个具有两个以上Bank的SDRAM中,一般会多一根叫做BAn的引脚,用来实现在多个Bank之间的选择。

SDRAM器件HY57V641620HG简介

HY57V641620HG 是一个容量为64Mb的同步动态随机存储器,能很好地适应主存储器的高密度和高带宽的数据传输性能。其存储空间组织方式是:1M×16bit×4Bank。HY57V641620HG的管脚如图7.10所示,引脚描述见表7.3。

 

 
 

 

 

 

 

HY57V641620HG提供的完全动态操作涉及时钟的上升沿,所有的输入和输出都是在时钟的上升沿触发的。数据通路被做成内部装管道线以获得非常高的带宽。全部输入和输出电压电平都与LVTTL相兼容。

可编程序选择包括管道的长度,通过单一的控制指令读出连续读或写的周期数,并且生成计算序列。一个读写周期进程可被一个突发的终止指令终止,或者可被一个在任何周期中的新读写进程所中断或替换。主要特性如下:

  • 单一3.3±0.3V电源。
  • 更新和自我更新。
  • 全部引脚都与LVTTL接口相兼容。
  • 4096更新循环/64ms。

 

表7.3  HY57V641620HG引脚描述

引    脚

引脚名称

描    述

CLK

时钟

系统时钟输入。其他输入被登记到SDRAM的CLK上升沿上

CKE

时钟控制

时钟使能。当CKE为低时,SDRAM可能是进入掉电模式、时钟挂起模式或自刷新模式

CS

片选择

除CLK、CKE和DQM之外,使全部输入有效或无效

BA0,BA1

Bank地址

Bank选择地址。在RAS 活跃期间选择Bank激活,在CAS活跃期间选择Bank可读写

A0~A11

地址

行地址:RA0~RA11,列地址:CA0~CA7

自动预充电标记:A10

,,

行地址滤波,列地址滤波,读写

、和功能由真值表决定

LDQM, UDQM

数据输入/输出处理

控制I/O缓存的高地址和低地址,输入/输出屏蔽。在阅读模式中控制输出缓冲和在写入模式中处理输入数据

DQ0~DQ15

数据输入/输出

多路传输数据输入/输出引脚

VDD/VSS

电源/接地

为内部的电路和输入缓冲供电的电源

VDDQ /VSSQ

数据输出

为输出缓冲供电

NC

无连接

无连接

 
  • 针距0.88毫米的JEDEC标准,400密耳54引脚针薄型小尺寸封装。
  • 可编程序的脉冲长度和类型:-1、2、4、8或整页连续脉冲,-1、2、4和8为插入式脉冲。
  • 所有输入和输出都是正边沿触发的。
  • 可编程的CAS编码潜伏2~3周期。
  • 具有通过UDQM或LDQM来隐藏数据的功能。
  • 4个Bank运行。  

SDRAM应用编程

由于S3C44B0X内部的存储控制器部件提供了专门与SDRAM的器件的控制信号线,因此,对SDRAM的读和写都不需要特殊编程操作,只需要根据所选择的存储器的特性,在系统初始化时对S3C44B0X相关的寄存器进行设置就可以了。

实验参考程序

/****************************************************************

*名称:    sRWramtest

*功能:    使用汇编语言读/写已初始化的RAM区

****************************************************************/

sRWramtest:

        LDR      r2,=0x0C010000            /*字长读*/

        LDR      r3,=0x55AA55AA

        STR      r3,[r2]                    /*字长写*/

       

        LDR      r2,=0x0C010004

        LDRH     r3,[r2]                    /*半字读*/

 

        LDR      r3,=0x55AA

        STRH     r3,[r2],#2                 /*半字写*/

        STRH     r3,[r2]

 

        LDR      r2,=0x0C010008

        LDRB     r3,=0xAA                   /*字节读*/

        STRB     r3,[r2],#1                /*字节写*/

        LDRB     r3,=0x55

        STRB     r3,[r2],#1

 

        LDRB     r3,=0xAA

        STRB     r3,[r2],#1

        LDRB     r3,=0x55

        STRB     r3,[r2]

/****************************************************************

*名称:       cRWramtest

*功能:       使用高级语言读/写RAM区

****************************************************************/

//RAM  访问示例

#define RWram        (*(unsigned long *)0x0C10200)

void cRWramtest(void)

{

unsigned  long        *ptr=0x0C010200;      //R/W RAM

unsigned  short        *ptrh=0x0C010200;    //R/W RAM

unsigned  char         *ptrb=0x0C010200;    //R/W RAM

 

char i;

unsigned  char         tmpb;

unsigned  short         tmph;

unsigned  long         tmpw;

 

*ptr=0xAA55AA;

tmpw=*ptr;           //字长读

*ptrh=tmph+1;        //字长写

 

tmph=*ptrh;          //半字读

*ptrh=tmph+1;        //半字写

 

tmpb=*ptrb;          //字节读

*ptrb=tmpb+1         //字节写

}