目录
DDR3内存简介
何为RAM和ROM
SRAM简介
SDRAM简介
DDR简介
在正式学习DDR3内存之前,我们要先了解一下DDR内存的发展历史,通过对比SRAM、SDRAM、DDR、DDDR2和DDR3的区别,有助于我们更加深入的理解什么是DDR。在看DDR之前我们先来了解一个概念,那就是什么叫做RAM?
相信大家在购买手机、电脑等电子设备的时候,通常都会听到RAM、ROM、硬盘等概念,很多人都是一头雾水的。普通用户区分不清楚RAM、ROM到可以理解,但是作为一个嵌入式Linux开发者,要是不清楚什么是RAM、什么是ROM就绝对不行! RAM和ROM专业的解释如下:
RAM:随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、SRAM、SDRAM、DDR等都是RAM。RAM一般用来保存程序数据、中间结果,比如我们在程序中定义了一个变量a,然后对这个a进行读写操作,示例代码如下:
int a;
a=10;
a是一个变量,我们需要很方便的对这个变量进行读写操作,方法就是直接“a”进行读写操作,不需要在乎具体的读写过程。我们可以随意的对RAM中任何地址的数据进行读写操作,非常方便。
ROM:只读存储器,笔者认为目前“只读存储器”这个定义不准确。比如我们买手机,通常会告诉你这个手机是4+64或6+128配置,说的就是RAM为4GB或6GB, ROM为64G或128GB。但是这个ROM是Flash,比如EMMC或UFS存储器,因为历史原因,很多人还是将Flash叫做ROM。但是EMMC和UFS,甚至是NAND Flash,这些都是可以进行写操作的!只是写起来比较麻烦,要先进行擦除,然后再发送要写的地址或扇区,最后才是要写入的数据,学习过STM32,使用过WM25QXX系列的SPIFlash的应该深有体会。可以看出,相比于RAM,向ROM或者Flash写入数据要复杂很多,因此意味着速度就会变慢(相比RAM),但是ROM和Flash可以将
容量做的很大,而且掉电以后数据不会丢失,适合用来存储资料,比如音乐、图片、视频等信息。
综上所述, RAM速度快,可以直接和CPU进行通信,但是掉电以后数据会丢失,容量不容易做大(和同价格的Flash相比)。ROM(目前来说,更适合叫做Flash)速度虽然慢,但是容量大、适合存储数据。
因为大多数的人最先接触RAM芯片都是从SRAM开始的,因为大量的STM32单片机开发板都使用到了SRAM,比如F103、F407等,基本都会外扩一个512KB或1MB的SRAM的,因为STM32F103/F407内部RAM比较小,在一些比较耗费内存的应用中会出现内存捉紧的情况,比如emWin做UI界面。SRAM的全称叫做Static Random-Access Memory,也就是静态随机存储器,这里的“静态”说的就是只要SRAM上电,那么SRAM里面的数据就会一直保存着,直到SRAM掉电。对于RAM而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式,这里就以STM32F103/F407开发板常用的IS62WV51216这颗 SRAM芯片为例简单的讲解一下SRAM,这是一颗16位宽(数据位为16位)、IMB大小的SRAM,芯片框图如图所示:
1.地址线
这部分是地址线,一共A0-A18,也就是19根地址线,因此可访问的地址大小就是2^19=524288-512KB。不是说IS62WV51216是个1MB的SRAM吗?为什么地址空间只有512KB?前面我们说了IS62WV51216是16位宽的,也就是一次访问2个字节,因此需要对512KB进行乘2处理,得到 512KB*2=1MB。位宽的话一般有8位/16位/32 位,根据实际需求选择即可,一般都是根据处理器的SRAM 控制器位宽来选择SRAM位宽。
2.数据线
这部分是SRAM的数据线,根据SRAM位宽的不同,数据线的数量要不同, 8位宽就有8根数据线, 16位宽就有16根数据线, 32位宽就有32根数据线。1S62WV51216是一个16位宽的SRAM,因此就有16根数据线,一次访问可以访问16bit的数据,也就是2个字节。因此就有高字节和低字节数据之分,其中IO0-IO7是低字节数据,IO8-IO15是高字节数据。
3.控制线
SRAM要工作还需要一堆的控制线, CS2和CS1是片选信号,低电平有效,在一个系统中可能会有多片SRAM(目的是为了扩展SRAM大小或位宽),这个时候就需要CS信号来选择当前使用哪片SRAM。另外,有的SRAM内部其实是由两片SRAM拼接起来的,因此就会提供两个片选信号。
OE是输出使能信号,低电平有效,也就是主控从SRAM读取数据。
WE是写使能信号,低电平有效,也就是主控向SRAM写数据。
UB和LB信号,前面我们已经说了,IS62WV51216是个16位宽的SRAM,分为高字节和线的作用,这两根控制线都是低电平有效。UB为低电平的话表示访问高字节,LB为低电平的话表示访问低字节。这个就是UB和LB这两个控制线的作用,这两根控制线都是低电平有效。
SRAM最大的缺点就是成本高!价格高,SRAM突出的特点就是无需刷新(SDRAM需要刷新),读写速度快!所以SRAM通常作为SOC的内部RAM使用或Cache使用,比如 STM32内存的RAM或I.MX6内部的OCRAM都是SRAM。
前面讲解了SRAM,可以看出SRAM最大的缺点就是价格高、容量小!但是应用对于内存的需求越来越高,必须提供大内存解决方案。为此半导体厂商想了很多办法,提出了很多解决方法,最终SDRAM应运而生,得到推广。SDRAM全称是Synchronous DynamicRandom Access Memory,翻译过来就是同步动态随机存储器, “同步”的意思是SDRAM工作需要时钟线,“动态”的意思是SDRAM中的数据需要不断的刷新来保证数据不会丢失,“随机”的意思就是可以读写任意地址的数据。
与SRAM相比,SDRAM集成度高、功耗低、成本低、适合做大容量存储,但是需要定时刷新来保证数据不会丢失。因此SDRAM适合用来做内存条,SRAM适合做高速缓存或MCU内部的RAM。SDRAM目前已经发展到了第四代,分别为: SDRAM、DDR SDRAM、DDR2SDRAM、DDR3 SDRAM、DDR4 SDRAM。
STM32F429/F767/H743等芯片支持SDRAM,学过STM32F429/F767/H743的应该知道SDRAM,这里我们就以STM32开发板最常用的华邦W9825G6KH为例, W9825G6KH是一款16位宽(数据位为16位)、32MB的SDRAM、速度一般为133MHz、166MHz或200MHz. W9825G6KH框图如图所示:
1.控制线SDRAM也需要很多控制线
CLK:时钟线, SDRAM是同步动态随机存储器, “同步”的意思就是时钟,因此需要一根额外的时钟线,这是和SRAM最大的不同, SRAM没有时钟线。
CKE: 时钟使能信号线, SRAM没有CKE信号。
CS:片选信号,这个和 SRAM一样,都有片选信号。
RAS:行选通信号,低电平有效, SDRAM和SRAM的寻址方式不同, SDRAM按照行、列来确定某个具体的存储区域。因此就有行地址和列地址之分,行地址和列地址共同复用同一组地址线,要访问某一个地址区域,必须要发送行地址和列地址,指定要访问哪一行?哪一列?RAS是行选通信号,表示要发送行地址,行地址和列地址访问方式如图所示:
CAS:列选通信号,和RAS类似,低电平有效,选中以后就可以发送列地址了。
WE:写使能信号,低电平有效。
2.A10 地址线A10是地址线,那么这里为什么要单独将A10地址线给提出来呢?因为A10地址线还有另外一个作用,A10 还控制着Auto-precharge,也就是预充电。这里又提到了预充电的概念,SDRAM芯片内部会分为多个BANK,SDRAM在读写完成以后,如果要对同一个BANK中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行,准备打开新行的操作就叫做预充电。一般SDSRAM都支持自动预充电的功能。
3.地址线对于W9825G6KH来说一共有A0-A12,共13根地址线,但是前面说了SDRAM寻址是按照行地址和列地址来访问的,因此这A0-A12包含了行地址和列地址。不同的SDRAM芯片,根据其位宽、容量等的不同,行列地址数是不同的,这个在SDRAM的数据手册里面会也清楚的。比如W9825G6KH的A0-A8 是列地址,一共 9 位列地址,A0-A12 是行地址,一共 13位,因此可寻址范围为:2^9*2^13-4194304B=4MB,W9825G6KH 为16 位宽(2 个字节),因此还需要对4MB进行乘2处理,得到4*2=8MB,但是W9825G6KH是一个32MB的SDRAM 啊,为什么算出来只有8MB,仅仅为实际容量的1/4。不要急,这个就是要讲的BANK,8MB只是一个BANK的容量,W9825G6KH一共有4 个BANK。
4.BANK选择线BS0和 BS1是 BANK 选择信号线,在一片SDRAM中因为技术、成本等原因,不可能做一个全容量的BANK。而且,因为SDRAM的工作原理,单一的BANK会带来严重的寻址冲突,减低内存访问效率。为此,人们在一片SDRAM中分割出多块,BANK,一般都是2的n次方,比如2,4,8等。图中的5就是W9825G6KH的4个BANK示意图,每个SDRAM数据手册里面都会写清楚自己是几BANK。前面我们已经计算出来了一个BANK的大小为8MB,那么四个BANK的总容量就是8MB*4=32MB.既然有4个BANK,那么在访问的时候就需要告诉SDRAM,我们现在需要访问哪个BANK,BS0和 BS1就是为此而生的,4个BANK刚好2根线,如果是8个BANK的话就需要三根线,也就是BS0-BS2, BS0,BS1这两个线也是SRAM所没有的。
5.BANK区域
关于BANK的概念前面已经讲过了,这部分就是W9825G6KH的4个BANK区域。这个概念也是SRAM 所没有的。
6.数据线
W9825G6KH是16位宽的SDRAM,因此有16 根数据线,DQ0-DQ15,不同的位宽其数据线数量不同,这个和SRAM是一样的。
7.高低字节选择
W9825G6KH是一个16位的SDRAM,因此就分为低字节数据和高字节数据, LDQM和UDQM 就是低字节和高字节选择信号,这个也和SRAM一样。
DDR内存是SDRAM的升级版本, SDRAM分为SDR SDRAM、DDR SDRAM、DDR2 SDRAM、 DDR3 SDRAM、DDR4 SDRAM。可以看出DDR本质上还是SDRAM,只是随着技术的不断发展, DDR也在不断的更新换代。先来看一下DDR,也就是DDR1,人们对于速度的追求是永无止境的,当发现=SDRAM 的速度不够快的时候人们就在思考如何提高SDRAM的速度, DDR SDRAM由此诞生。
DDR全称是Double Data Rate SDRAM,也就是双倍速率SDRAM,看名字就知道DDR的速率(数据传输速率)比SDRAM高1倍!这1倍的速度不是简简单单的将CLK提高1倍,SDRAM在一个CLK周期传输一次数据,DDR在一个CLK周期传输两次数据,也就是在上升沿和下降沿各传输一次数据,这个概念叫做预取(prefetch),相当于DDR的预取为2bit,因此DDR的速度直接加倍!比如SDRAM速度一般是133-200MHz,对应的传输速度就是133-200MT/s,在描述 DDR速度的时候一般都使用MT/s,也就是每秒多少兆次数据传输。133MT/S就是每秒133M次数据传输, MT/s描述的是单位时间内传输速率。同样133~200MHz的频率, DDR的传输速度就变为了266-400MT/S,所以大家常说的DDR266、DDR400就是这么来的。
DDR2在DDR基础上进一步增加预取(prefetch),增加到了4bit,相当于比DDR多读取一倍的数据,因此DDR2的数据传输速率就是533-800MT/s,这个也就是大家常说的DDR2 533、DDR2 800。当然了,DDR2 还有其他速度,这里只是说最常见的几种。DDR3在DDR2的基础上将预取(prefetch)提高到8bit,因此又获得了比 DDR2高一倍的传输速率,因此在总线时钟同样为266-400MHz的情况下,DDR3的传输速率就是1066-1600MT/SI.MX6U的MMDC外设用于连接DDR,支持LPDDR2、DDR3,DDR3L,最高支持16位数据位宽。总线速度为400MHz(实际是396MHz),数据传输速率最大为800MT/S。LPDDR3、DDR3和DDR3L的区别,这三个都是DDR3,但是区别主要在于工作电压,LPDDR3叫做低功耗DDR3,工作电压为1.2V。DDR3叫做标压DDR3,工作电压为1.5V,一般台式内存条都是DDR3。DDR3L是低压DDR3,工作电压为1.35V,一般手机、嵌入式、笔记本等都使用DDR3L。DDR3L结构框图如图所示:
1.控制线
ODT:片上终端使能,ODT 使能和禁止片内终端电阻。
ZQ:输出驱动校准的外部参考引脚,此引脚应该外接一个240欧的电阻到VSSQ上,一般就是直接接地了。
RESET:复位引脚,低电平有效。
CKE:时钟使能引脚。
A12: A12是地址引脚,但是有也有另外一个功能,因此也叫做BC引脚, A12会在READ和WRITE命令期间被采样,以决定burst chop是否会被执行。
CK和CK#:时钟信号,DDR3的时钟线是差分时钟线,所有的控制和地址信号都会在CK对的上升沿和CK#的下降沿交叉处被采集。
CS#:片选信号,低电平有效。
RAS#、CAS#和WE#:行选通信号、列选通信号和写使能信号。
2.地址线
A[14:0]为地址线,A0-A14,一共15根地址线,根据NTSCC256M16ER-EK的数据手册可知,列地址为A0-A9,共10根,行地址为A0~A14,共15根,因此一个BANK的大小就是2^10*2^15*2=32MB*2=64MB,根据图可知一共有8个BANK,因此DDR3L的容量就是 64*8=512MB。
3.BANK选择线
一片DDR3有8个BANK,因此需要3个线才能实现8个BANK的选择,BA0~BA2就是用于完成BANK选择的。
4.BANK区域
DDR3一般都是 个BANK区域。
5.数据线
因为是16位宽的,因此有16根数据线,分别为DQ0-DQ15
6.数据选通引脚
DQS和DQS#是数据选通引脚,为差分信号,读的时候是输出,写的时候是输入。LDQS(有的叫做DQSL)和LDQS#(有的叫做DQSL#)对应低字节,也就是DQ0-7,UDQS(有的叫做DQSU)和 UDQS#(有的叫做 DQSU#),对应高字节,也就是DQ8~15。
7.数据输入屏蔽引脚DM是写数据输入屏蔽引脚。关于DDR3L的框图就讲解到这里,想要详细的了解DDR3的组成,请阅读相应对的数据手册。