SDRAM时序理解与操作

SDRAM时序理解与操作

   SDRAM(Synchronous DRAM,同步动态随机存储器),即数据的读写需要时钟来同步。其存储单元不是按线性排列的,是分页的。一般的嵌入式产品里面的内存都是用的SDRAM。电脑的内存也是用的这种RAM,叫DDR SDRAM,其集成度非常高,因为是动态的,所以必须有刷新电路,每隔一段时间必须得刷新数据。本文主要讲述读写SDRAM的时序以及如何配置s3c2440操作SDRAM。

1.芯片初始化

     在SDRAM芯片内部还有一个逻辑控制单元,并且有一个模式寄存器为其提供控制参数。因此,每次开机时SDRAM 都要先对这个控制逻辑核心进行初始化。关键的阶段就在于模式寄存器(MR,Mode Register)的设置,简称MRS(MR Set),寄存器的信息由地址线来提供。
SDRAM时序理解与操作_第1张图片
SDRAM时序理解与操作_第2张图片

2、行有效

    初始化完成后,要想对一个 L-Bank 中的阵列进行寻址,首先就要确定行( Row),使之处于活动状态(Active),然后再确定列。虽然之前要进行片选和L-Bank的定址,但它们与行有效可以同时进行。
SDRAM时序理解与操作_第3张图片
    从图中可以看出,在CS#、L-Bank定址的同时, RAS(Row Address Strobe,行地址选通脉冲)也处于有效状态。此时An地址线则发送具体的行地址。如图中是 A0-A11,共有12个地址线,由于是二进制表示法,所以共有4096 个行( 212=4096),A0-A11 的不同数值就确定了具体的行地址。由于行有效的同时也是相应L-Bank有效,所以行有效也可称为 L-Bank 有效。

3、列读写

    行地址确定之后,就要对列地址进行寻址了。但是,地址线仍然是行地址所用的A0-A11(本例)。没错,在SDRAM中,行地址与列地址线是共用的。不过,读/写的命令怎么发出的呢?其实没有一个信号是发送读或写的明确命令的,而是通过芯片的可写状态的控制来达到读/写的目的。显然WE#信号就是一
个关键。 WE#无效时,当然就是读取命令。
列寻址信号与读写命令是同时发出的。虽然地址线与行寻址共用,但CAS(Column Address Strobe,列地址选通脉冲)信号则可以区分开行与列寻址的不同,配合A0-A9,A11(本例)来确定具体的列地址。

4.读写时序

4.1数据读时序

    CL:在CAS发出之后,仍要经过一定的时间才能有数据输出,从 CAS 与读取命令发出到第一笔数据输出的这段时间,被定义为CL(CAS Latency,CAS 潜伏期)。于 CL 只在读取时出现,所以CL又被称为读取潜伏期(RL,Read Latency)
    tAC:从数据I/O总线上有数据输出之前的一个时钟上升沿开始,数据即已传向S-AMP,也就是说此时数据已经被触发,经过一定的驱动时间最终传向数据I/O总线进行输出,这段时间我们称之为 tAC(Access Time from CLK,时钟触发后的访问时间)
SDRAM时序理解与操作_第4张图片

4.2数据输入时序

     数据写入的操作也是在tRCD之后进行,但此时没有了 CL(记住,CL只出现在读取操作中),行寻址与列寻址的时序图和上文一样,只是在列寻址时,WE#为有效状态。
tWR:数据并不是即时地写入存储电容,因为选通三极管(就如读取时一样)与电容的充电必须要有一段时间,所以数据的真正写入需要一定的周期。为了保证数据的可靠写入,都会留出足够的写入/校正时间(tWR,Write Recovery Time),这个操作也被称作写回(Write Back)
SDRAM时序理解与操作_第5张图片

4.3其它时序

    tRCD:发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至 CAS 延迟),大家也可以理解为行选通周期
SDRAM时序理解与操作_第6张图片

4.4突发长度

     突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输所涉及到存储单元(列)的数量就是突发长度(Burst Lengths,简称BL),初始化过程中的MRS阶段就要对BL 进行设置。目前可用的选项是 1、2、4、8、全页(Full Page)
SDRAM时序理解与操作_第7张图片

5.预充电与刷新操作

    预充电:L-Bank关闭现有工作行,准备打开新行的操作就是预充电(Precharge)。预充电可以通过命令控制,也可以通过辅助设定让芯片在每次读写操作之后自动进行预充电。地址线A10控制着是否进行在读写之后当前L-Bank 自动进行预充电,这就是上文所说的“辅助设定”。而在单独的预充电命令中,A10则控制着是对指定的L-Bank 还是所有的 L-Bank(当有多个L-Bank 处于有效/活动状态时)进行预充电,前者需要提供L-Bank的地址,后者只需将 A10 信号置于高电平。
    tRP:在发出预充电命令之后,要经过一段时间才能允许发送RAS行有效命令打开新的工作行,这个间隔被称为tRP(Precharge command Period,预充电有效周期)
SDRAM时序理解与操作_第8张图片
    刷新:刷新操作与预充电中重写的操作一样,都是用S-AMP先读再写。预充电是对一个或所有L-Bank 中的工作行操作,并且是不定期的,而刷新则是有固定的周期,依
次对所有行进行操作,以保留那些久久没经历重写的存储体中的数据。刷新操作分为两种:自动刷新(Auto Refresh,简称AR)与自刷新(Self Refresh,简称SR)

    数据掩码:通过DQM,内存可以控制I/O 端口取消哪些输出或输入的数据。这里需要强调的是,在读取时,被屏蔽的数据仍然会从存储体传出,只是在“掩码逻辑单元”处被屏蔽。SDRAM官方规定,在读取时 DQM 发出两个时钟周期后生效,而在写入时, DQM 与写入命令一样是立即成效。
SDRAM时序理解与操作_第9张图片
SDRAM时序理解与操作_第10张图片

6.使用S3C2440操作SDRAM

    存储控制器共有13个。BANK0~BANK5只需要设置BWSCON和BANKCONx(x为0~5)两个寄存器。BANK6和BANK7外接SDRAM时,还需要设置REFRESH,BANKSIZE,MRSRB6,MRSRB7等4个寄存器。
1.BWSCON(位宽和等待控制寄存器)
    每4位控制1个BANK
    (1) STx:启动/禁止SDRAM的数据掩码引脚。对于SDRAM,此位为0,对于SRAM,此位为1。
    (2) WSx:是否使用存储器的WAIT信号,通常为0。
    (3)DWx:使用两位设置相应的位宽。
开发板设置值为:0x22011110
注:开发板为JZ2440    
2.BANKCONn(BANK控制寄存器,nGCS0 至 nGCS5)
SDRAM时序理解与操作_第11张图片
开发板设置值为:0x0700
3.BANKCONn(BANK控制寄存器 nGCS6 至 nGCS7)
SDRAM时序理解与操作_第12张图片
开发板设置值为:0x00018005
4.REFRESH(刷新控制寄存器)
SDRAM时序理解与操作_第13张图片
开发板设置值为:0x008C07A3
5.BANKSIZE(Bank 大小寄存器)
SDRAM时序理解与操作_第14张图片
开发板设置值为:0xB1
6.MRSR6,MRSR7(SDRAM 模式寄存器组寄存器)
SDRAM时序理解与操作_第15张图片
开发板设置值为:0x30



参考资料:S3c2440A_UserManual
            嵌入式Linux完全开发
            终极内存技术指南

你可能感兴趣的:(SDRAM时序理解与操作)