SDRAM (转)
SDRAM即同步动态RAM :所有输入信号均在时钟上升沿被采样,需要动态刷新保持数据
1、重要的连接信号:
a、 RAS:行地址锁存
b、 CAS:列地址锁存
c、 WE:写使能
d、 DQ0-DQ15:数据总线
e、 DQML、DQMH:数据I/O屏蔽,读模式下屏蔽输出缓冲,写模式下屏蔽输入缓冲,DQML控制DQ0-DQ7,DQMH控制DQ8—DQ15
f、 A10连接自动放电
2、扩展方式:
使用双片级联,将16位数据线扩展为32位,从而与32位CPU匹配,优化SDRAM性能。扩展后一个地址对应32位,从而一个地址单元以4Byte进行数据访问时,内存会忽略A0和A1,故SDRAM的A0接CPU数据线的A2。如果需要访问地址偏移为01的单个字节,通过DQML和DQMH信号进行帮助。
3、SDRAM的burst mode:一种利用内部列地址发生器来工作的高速读写模式,只要设置最开始的列地址,后面的地址就可以通过内部的列地址发生器来自动生成。
4、SDRAM的初始化:
SDRAM上电后使用前必须要经过一段初始化操作才可以使用。这个操作过程是标准的过程。这个过程如下:
a、 放电(precharge):关闭存储单元,使存储单元无效。
b、 自动刷新(auto-refresh)
c、 加载模式寄存器(Load Mode Register)
d、 正常读写
在输入precharge命令后,因为必须是对所有BANK进行Precharge,所以A10这个管脚要设置成高,因此在Precharge后面要做一个读的操作,这个操作最主要的是在SDRAM的寻址空间里设置的地址必须是A10是高的。在输入Auto-refresh命令后,一般要跟几句空操作或者读什么之类的,反正要达到延迟的目的,以使得SDRAM有时间来完成refresh。之后就是要设置SDRAM的模式寄存器,这个寄存器里一般设置了burst长度,CAS,burst类型,操作模式,还有是设置SDRAM是工作在单个读写操作还是burst操作下。而这个寄存器的设置也是通过地址线来设置的,所以在发出Load Mode Register命令后要做一个操作可是使得在SDRAM的地址线上出线的值就是你要设置的值。这里很有必要提醒的一下的是,这个操作是8位的操作。设置完模式寄存器后就进入正常操作模式。
5、基本的读写操作:
SDRAM的基本读操作需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0~A12给出)。BANK激活命令后必须等待大于tRCD(SDRAM的RAS到CAS的延迟指标)时间后,发出读命令字。CL(CAS延迟值)个工作时钟后,读出数据依次出现在数据总线上。在读操作的最后,要向SDRAM发出预充电(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHARGE)命令,以关闭已经激活的页。等待tRP时间(PRECHAREG命令后,相隔tRP时间,才可再次访问该行)后,可以开始下一次的读、写操作。SDRAM的读操作只有突发模式(Burst Mode),突发长度为1、2、4、8可选。SDRAM的基本写操作也需要控制线和地址线相配合地发出一系列命令来完成。先发出BANK激活命令(ACTIVE),并锁存相应的BANK地址(BA0、BA1给出)和行地址(A0~A12给出)。BANK激活命令后必须等待大于tRCD的时间后,发出写命令字。写命令可以立即写入,需写入数据依次送到DQ(数据线)上。在最后一个数据写入后延迟tWR时间。发出预充电命令,关闭已经激活的页。等待tRP时间后,可以展开下一次操作。写操作可以有突发写和非突发写两种。突发长度同读操作。
:
6、AT91sam9260 SDRAM
型号MT48LC16M16A2,为4MB*4*16bit=32MB,采用双片级联构成32位64MB的SDRAM。SDRAM采用地址信号线复用。行寻址使用A0-A12,寻址范围8K字节;列寻址使用A0-A8,寻址范围512字节;bank寻址使用BA0-BA1,寻址四个bank。使用额外的四根信号线连接两片SDRAM的BA[1:0]。
AT91SAM9260使用SDRAMC初始化SDRAM初始化顺序如下:
a、 设置配置寄存器SDRAMC_CR,填入寄存器中的值单位均为时钟周期:
NC: Number of Column Bits,9
NR: Number of Row Bits,13
NB: Number of banks,4
CAS: CAS Latency,2-3
DBW:数据位宽32位
tWR:Write Recover Time,14ns
tRC: Row Cycle Delay, 默认值7
tRP: Row Precharge Delay,默认值3
tRCD:Row To Column Delay,15-20ns
tRAS:Active To Precharge Delay,37-44ns
tXSR:Exit Self Refresh To Active Delay,67-75ns
b、 在存储设备寄存器(SDRAMC_MDR)中设置存储类型为SDRAM
c、 提供200us的延迟
d、 向SDRAM设备发出NOP命令:设置SDRAM 模式寄存器中设置模式为1,向SDRAM任意地址执行写操作。
e、 向SDRAM设备发出放电命令:设置SDRAM 模式寄存器中设置模式为2,向SDRAM任意地址执行写操作。
f、 提供8个自动刷新周期:设置SDRAM 模式寄存器中设置模式为4,向SDRAM任意地址执行写操作。
g、 发出模式寄存器设置周期,配置SDRAM模式寄存器参数,尤其是CAS Latency和burst length。程序必须设置模式寄存器为模式3,对SDRAM执行写访问,地址中BA[1:0]必须为0
h、 进入正常模式:设置SDRAM 模式寄存器中设置模式为0,向SDRAM任意地址执行写操作。
在SDRAMC Rfresh Timer寄存器的count字段中写入刷新率,刷新率为刷新周期间的延迟,自动刷新周期7.81us*100MHz=781
SDRAM(Synchronous DRAM),因为Synchronous,所以所有信号都是和时钟信号同步。可以把SDRAM看成是EXCEL电子表格,通过行地址和列地址就唯一的锁定了一个单元格的内容,一般的SDRAM都有2个或者两个以上的Bank,就像一个EXCEL文档有2个或者两个以上的sheet,每个sheet又由行号和列号锁定单元格内容。
在实际工作中,bank地址和行地址一起发出,这个命令叫做行激活(Row Active),此后列地址和操作指令(读或写)也一起发出,这两组信号之间有个延迟。根据行业标准,定义此时间为从行有效到读/写命令发出之间的间隔tRCD,即RAS to CAS Delay(RAS至CAS延迟,RAS就是行地址选通脉冲,CAS就是列地址选通脉冲)。这是SDRAM一个很重要时序参数,Uboot初始化时候要配置。在列地址被选中后,数据传输过程被触发,但在这之前有个数据准备时间,即CL(CAS Latency),它也是一个重要的SDRAM参数,但该时间只是针对读操作,写操作没有这一时延。
SDRAM的数据传输基本上都是连续的,所以SDRAM中有突发传输的概念,突发(Burst)是指在同一行中相邻的存储单元连续进行数据传输的方式,连续传输的周期数就是突发长度(Burst Lengths,简称BL),在初始化之前要通过寄存器定义。 在进行突发传输时,只要指定起始列地址与突发长度,SDRAM就会依次地自动对后面相应数量的存储单元进行读/写操作而不再需要控制器连续地提供列地址这样,除了第一笔数据的传输需要若干个周期(主要是之前的延迟,一般的是tRCD+CL)外,其后每个数据只需一个周期的即可获得。
在数据读取完之后,为了腾出读出放大器以供同一L-Bank内其他行的寻址并传输数据,SDRAM芯片将进行预充电(precharge)的操作来关闭当前工作行。从开始关闭现有的工作行,到可以打开新的工作行之间的间隔就是tRP(Row Precharge command Period,行预充电有效周期)。