SDRAM的一些基础知识

judy的头像
judy 发布于:周三, 03/21/2018 - 12:08 ,关键词:

基础一:

SDRAM (Synchronous Dynamic RandomAccess Memory),同步动态随机存储器。同步是指其时钟频率与CPU的前端总线的系统时间频率相同,并且他的内部命令的发送与数据的传输都是以这个时钟为基准的,动态是指存储阵列需要不断的刷新才能保证数据的不丢失。随机是指数据不是线性存储的,是可以自由指定地址进行数据读写。

位宽:是指内存一次数据传输的数据量就是位宽,以位为单位。

SDRAM的内部结构:

SDRAM相当于一个excel,一个工作溥中有几个工作表,每个工作表里有行列。

SDRAM中的一个bank就相当于excel中的一个工作表, SDRAM中的行(Column)与列(Row)相当于工作于中的行与列,我们对内存的读写就是根据bank号 Column 、Row来准确的找到所需要的单元格(存储阵列)。

由于技术、成本等原因,不可能只做一个全容量的Bank,而且最重要的是,由于SDRAM的工作原理限制,单一的Bank将会造成非常严重的寻址冲突,大大降低了内存的效率,所以把SDRAM内部分割成多个Bank,较早以前是2个,目前市面上大多都是4个Bank的,

SDRAM容量的计算。

SDRAM容量 = 单元格的总数(地址总数) X 位宽

单元格的总数 = Bank数 X Column数 X ROW数

如果要以字节为单位的话,刚需要将SDRAM容量(bit) / 8(bit)

型号为:HY57641620XXX的为64Mbit (8M字节)位宽为16bit的SDRAM,内部结构为4个Bank,Column数为8(CA0-CA7),Row数为12(RA0- RA11),SDRAM的行地址线和列地址线是分时复用的,即地址要分两次送出,先送出行地址,再送出列地址。这样,可以大幅度减少地址线的数目。

计算方法为:每个bank的容量为: 2 Row次方 X 2 的Column次方X 16(bit) = 256 X4096 X 16 /1024 = 16384 bit =16 Mbit = 2 M字节,再乘以bank数就是64 Mbit (8M字节了),更简单的方法是行列加起了相当于20根地址线,所以每个bank能访问的地址空间是 2 的20次方 = 1048576 bit= 1M字节,但由于第次传输的数据位宽是16位,所以每个bank的空量是 16 Mbit ,总共有4个bank,所以就有64Bbit的容量,换成字节单位就是8M字节。

基础二:

1、逻辑Bank与芯片位宽

SDRAM的内部是一个存储阵列。因为如果是管道式存储(就如排队买票),就很难做到随机访问了。

阵列就如同表格一样,将数据“填”进去,你可以把它想象成一张表格。和表格的检索原理一样,先指定一个行(Row),再指定一个列(Column),我们就可以准确地找到所需要的单元格,这就是内存芯片寻址的基本原理。对于内存,这个单元格可称为存储单元,那么这个表格(存储阵列)叫什么呢?它就是逻辑Bank(Logical Bank,下文简称L-Bank)。

SDRAM的一些基础知识
L-Bank存储阵列示意图

由于技术、成本等原因,不可能只做一个全容量的L-Bank,而且最重要的是,由于SDRAM的工作原理限制,单一的L-Bank将会造成非常严重的寻址冲突,大幅降低内存效率。所以人们在SDRAM内部分割成多个L-Bank,较早以前是两个,目前基本都是4个,这也是SDRAM规范中的最高L-Bank数量。到了RDRAM则最多达到了32个,在最新DDR-Ⅱ的标准中,L-Bank的数量也提高到了8个。

这样,在进行寻址时就要先确定是哪个L-Bank,然后再在这个选定的L-Bank中选择相应的行与列进行寻址。可见对内存的访问,一次只能是一个L-Bank工作,而每次与北桥交换的数据就是L-Bank存储阵列中一个“存储单元”的容量。在某些厂商的表述中,将L-Bank中的存储单元称为Word(此处代表位的集合而不是字节的集合)。

SDRAM的一个存储单元并不是存储一个bit,一般是8bit的整数倍(8bits,16bits,32bits),这个存储单元的容量就是芯片的位宽(也是L-Bank的位宽),SDRAM内存芯片一次传输率的数据量就是芯片位宽。

SDRAM的一些基础知识

2、内存芯片的容量

现在我们应该清楚内存芯片的基本组织结构了。那么内存的容量怎么计算呢?显然,内存芯片的容量就是所有L-Bank中的存储单元的容量总合。计算有多少个存储单元和计算表格中的单元数量的方法一样:

存储单元数量=2^行数 × 2^列数(得到一个L-Bank的存储单元数量)× L-Bank的数量 “单位:bits”

在很多内存产品介绍文档中,都会用M×W的方式来表示芯片的容量(或者说是芯片的规格/组织结构)。M是该芯片中存储单元的总数,单位是兆(英文简写M,精确值是1048576,而不是1000000),W代表每个存储单元的容量,也就是SDRAM芯片的位宽(Width),单位是bit。计算出来的芯片容量也是以bit为单位,但用户可以采用除以8的方法换算为字节(Byte)。比如8M×8,这是一个8bit位宽芯片,有8M个存储单元,总容量是64Mbit(8MB)。

以MT48LC16M16A2为例,该芯片结构为4 x 16M x 16bits,表示4个bank,4个bank共16M个单元(注意不是每个bank有16M单元),位宽16bits,大小计算
Capacity = 16M * 16bits = 256 Mbits = 32 MBytes

初始化:

上电后,等到VDD和VDDQ稳定后并且CKE设为高电平时。

1.将SDRAM的一些特性写入配置寄存中,如,同步时间,列数,行数,CAS延时等,还有需要将数据线宽度写入模式寄存器,这个数据宽度是要根据实际的硬件接口宽度决定的。

2. 等待一个最少200us 的延时,这个根据不同的SDRAM可能不同

3. 向SDRAM 发一个NOP命令:应用程序需要把模式模式寄存器写为模式1并写一个数到任意地址

4. 设置所有Bank 预冲电(precharge):应用程序需要将模式寄存器设置为模式2并下任意地址写入数据,可能需要延时.

实际上,预充电是一种对工作行中所有存储体进行数据重写,并对行地址进行复位,同时释放S-SMP(重新加入比较电压,一般是电容电压的1/2,以有助于判断读取数据的逻辑电平,,S-AMP是通过一个参考电压与存储体的电压比较来判断逻辑值的),以用来准备新的工作。

5. 自动刷新(auto refresh). 提供8个自动刷新时序。将模式寄存器切换到第四种方式,并向任意地址写一个数据,重复8次。

刷新说明,因为SDRAM需要不断的进行刷新,所在称作为动态内存-DRAM,刷新操作有两种,一种是Auto Reresh,简称AR,另一种是Self Refresh ,简称是SR,但不管是哪种刷新方法,都不需要外部提供行地址住处,因为他们都是内部的自动操作。结于AR,SDRAM有一个行地址生成器(也称亻刷新计数器)用来自动依次生成行地址。由于刷新是针对一行中所有存储单无际是行的,所以无需列寻址,或都说CAS在RAS之前,所以AR在有的地方叫作CBR(意思是CAS Before RAS)式刷新。

刷新时间,目前公认的标准是,存储单元中电容的数据有效保存上限是64ms(1000ms =1 s),也就是说每一行新的循环周期是64ms,我们在有的内存上看这样样的参数4096 Refresh Cycles/64ms之类的信息,从中可以看出,这个内存的行是12行,相当于每一行就行地址的扫描时间是64ms / 4096 =15.625us(1000us = 1ms)。

6. 设置CAS延时与突发长度。数据将模式寄存器设置为第三种模式,然后向写入任意数据。

空发时间Burst Length :空发长度是什么呢,如果突发长度(BL)为4,那就是每次传输的的是4 X W(数据宽度)的数据,这样就可能造成第二笔数据是不需要的,这就引入了数据掩码(DQM)技术,通过DQM,,内存可以控制I/O数据取消哪些输出或输入的数据。

7. 设置为正常工作模式,然后向SDRAM写入任意

8. 将刷新率写入SDRAM的刷新计数器中,刷新率=刷新周期之间的延迟。

以上初始化的基于MCU是at91sram7se,SDRAM是HY57V641620XXX

参考来源:
http://blog.csdn.net/xiahouzuoxin/article/details/17174795
http://pctanyicheng.blog.163.com/blog/static/173820242010689367285/

转自: lutherarcher的博客

围观 1076