SRAM SDRAM DDR 简介
SRAM为什么要讲 SRAM 呢?因为大多数的朋友最先接触 RAM 芯片都是从 SRAM 开始的,因为大量的 STM32 单片机开发板都使用到了 SRAM,比如 F103、 F407 等,基本都会外扩一个512KB 或 1MB 的 SRAM 的,因为 STM32F103/F407 内部 RAM 比较小,在一些比较耗费内存的应用中会出现内存捉紧的情况,比如 emWin 做 UI 界面。我们简单回顾.
SRAM
为什么要讲 SRAM 呢?因为大多数的朋友最先接触 RAM 芯片都是从 SRAM 开始的,因为大量的 STM32 单片机开发板都使用到了 SRAM,比如 F103、 F407 等,基 本都会外扩一个512KB 或 1MB 的 SRAM 的,因为 STM32F103/F407 内部 RAM 比较小,在一些比较耗费内存的应用中会出现内存捉紧的情况,比如 emWin 做 UI 界面。我们简单回顾一下 SRAM,
SRAM 的全称叫做 Static Random-Access Memory,也就是静态随机存储器,这里的“静态”说的就是只要 SRAM 上电,那么 SRAM 里面的数据就会一直保存着,直到 SRAM 掉电。对于RAM 而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线的方式,这里就以 STM32F103/F407 开发板常用的 IS62WV51216 这颗 SRAM 芯片为例简单的讲解一下 SRAM,这是一颗 16 位宽(数据位为 16 位)、1MB 大小的 SRAM
①、 地址线
这部分是地址线,一共 A0~A18, 也就是 19 根地址线,因此可访问的地址大小就是2^19=524288=512KB。不是说 IS62WV51216 是个 1MB 的 SRAM 吗?为什么地址空间只有512KB?前面我们说了 IS62WV51216 是 16 位宽的,也就是一次访问 2 个字节,因此需要对512KB 进行乘 2 处理,得到 512KB*2=1MB。位宽的话一般有 8 位/16 位/32 位,根据实际需求选择即可,一般都是根据处理器的 SRAM 控制器位宽来选择 SRAM 位宽。
②、数据线
这部分是 SRAM 的数据线,根据 SRAM 位宽的不同,数据线的数量要不同, 8 位宽就有 8根数据线, 16 位宽就有 16 根数据线, 32 位宽就有 32 根数据线。 IS62WV51216 是一个 16 位宽的 SRAM,因此就有 16 根数据线,一次访问可以访问 16bit 的数据,也就是 2 个字节。因此就有高字节和低字节数据之分,其中 IO0~IO7 是低字节数据, IO8~IO15 是高字节数据。
③、控制线
SRAM 要工作还需要一堆的控制线, CS2 和 CS1 是片选信号,低电平有效,在一个系统中可能会有多片 SRAM(目的是为了扩展 SRAM 大小或位宽),这个时候就需要 CS 信号来选择当前使用哪片 SRAM。另外,有的 SRAM 内部其实是由两片 SRAM 拼接起来的,因此就会提供两个片选信号。
OE 是输出使能信号,低电平有效,也就是主控从 SRAM 读取数据。
WE 是写使能信号,低电平有效,也就是主控向 SRAM 写数据。
UB 和 LB 信号,前面我们已经说了, IS62WV51216 是个 16 位宽的 SRAM,分为高字节和低字节,那么如何来控制读取高字节数据还是低字节数据呢?这个就是 UB 和 LB 这两个控制线的作用,这两根控制线都是低电平有效。 UB 为低电平的话表示访问高字节, LB 为低电平的话表示访问低字节。
SDRAM 简介
前面给大家简单讲解了 SRAM,可以看出 SRAM 最大的缺点就是价格高、容量小!但是应用对于内存的需求越来越高,必须提供大内存解决方案。为此半导体厂商想了很多办法,提出了很多解决方法,最终 SDRAM 营运而生,得到推广。 SDRAM 全称是 Synchronous Dynamic Random Access Memory,翻译过来就是同步动态随机存储器,“同步”的意思是 SDRAM 工作需要时钟线,“动态”的意思是 SDRAM 中的数据需要不断的刷新来保证数据不会丢失,“随机”的意思就是可以读写任意地址的数据。
与 SRAM 相比, SDRAM 集成度高、功耗低、成本低、适合做大容量存储,但是需要定时刷新来保证数据不会丢失。因此 SDRAM 适合用来做内存条, SRAM 适合做高速缓存或 MCU内部的 RAM。 SDRAM 目前已经发展到了第四代,分别为: SDRAM、 DDR SDRAM、 DDR2 SDRAM、 DDR3 SDRAM、 DDR4 SDRAM。 STM32F429/F767/H743 等芯片支持 SDRAM,学过STM32F429/F767/H743 的朋友应该知道 SDRAM,这里我们就以 STM32 开发板最常用的华邦W9825G6KH 为例, W9825G6KH 是一款 16 位宽(数据位为 16 位)、 32MB 的 SDRAM、速度一般为 133MHz、 166MHz 或 200MHz。
①、控制线
SDRAM 也需要很多控制线,我们依次来看一下:
CLK: 时钟线, SDRAM 是同步动态随机存储器,“同步”的意思就是时钟,因此需要一根额外的时钟线,这是和 SRAM 最大的不同, SRAM 没有时钟线。
CKE: 时钟使能信号线, SRAM 没有 CKE 信号。
CS: 片选信号,这个和 SRAM 一样,都有片选信号。
RAS:行选通信号,低电平有效, SDRAM 和 SRAM 的寻址方式不同, SDRAM 按照行、列来确定某个具体的存储区域。因此就有行地址和列地址之分,行地址和列地址共同复用同一组地址线,要访问某一个地址区域,必须要发送行地址和列地址,指定要访问哪一行?哪一列?
RAS 是行选通信号,表示要发送行地址
CAS: 列选通信号,和 RAS 类似,低电平有效,选中以后就可以发送列地址了。
WE: 写使能信号,低电平有效。
②、 A10 地址线
A10 是地址线,那么这里为什么要单独将 A10 地址线给提出来呢?因为 A10 地址线还有另外一个作用, A10 还控制着 Auto-precharge,也就是预充电。这里又提到了预充电的概念, SDRAM芯片内部会分为多个 BANK,关于 BANK 我们稍后会讲解。 SDRAM 在读写完成以后,如果要对同一个 BANK 中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行,准备打开新行的操作就叫做预充电。一般 SDSRAM 都支持自动预充电的功能。
③、地址线
对于 W9825G6KH 来说一共有 A0~A12,共 13 根地址线,但是我们前面说了 SDRAM 寻址是按照行地址和列地址来访问的,因此这 A0~A12 包含了行地址和列地址。不同的 SDRAM 芯片,根据其位宽、容量等的不同,行列地址数是不同的,这个在 SDRAM 的数据手册里面会也清楚的。比如 W9825G6KH 的 A0~A8 是列地址,一共 9 位列地址, A0~A12 是行地址,一共 13位,因此可寻址范围为: 29*213=4194304B=4MB, W9825G6KH 为 16 位宽(2 个字节),因此还需要对 4MB 进行乘 2 处理,得到 42=8MB,但是 W9825G6KH 是一个 32MB 的 SDRAM 啊,为什么算出来只有 8MB,仅仅为实际容量的 1/4。不要急,这个就是我们接下来要讲的 BANK,8MB 只是一个 BANK 的容量, W9825G6KH 一共有 4 个 BANK。
④、 BANK 选择线
BS0 和 BS1 是 BANK 选择信号线,在一片 SDRAM 中因为技术、成本等原因,不可能做一个全容量的 BANK。而且,因为 SDRAM 的工作原理,单一的 BANK 会带来严重的寻址冲突,减低内存访问效率。为此,人们在一片 SDRAM 中分割出多块 BANK,一般都是 2 的次方,比如 2, 4, 8 等。图 23.1.1.2 中的⑤就是 W9825G6KH 就是 4 个 BANK 示意图,每个 SDRAM数据手册里面都会写清楚自己是几 BANK。前面我们已经计算出来了一个 BANK 的大小为 8MB,那么四个 BANK 的总容量就是 8MB4=32MB。既然有4个BANK,那么在访问的时候就需要告诉SDRAM,我们现在需要访问哪个BANK,BS0 和 BS1 就是为此而生的, 4 个 BANK 刚好 2 根线,如果是 8 个 BANK 的话就需要三根线,也就是 BS0~BS2。 BS0、 BS1 这两个线也是 SRAM 所没有的。
⑤、 BANK 区域
关于 BANK 的概念前面已经讲过了,这部分就是 W9825G6KH 的 4 个 BANK 区域。这个概念也是 SRAM 所没有的。
⑥、数据线
W9825G6KH 是 16 位宽的 SDRAM,因此有 16 根数据线, DQ0~DQ15,不同的位宽其数据线数量不同,这个和 SRAM 是一样的。
⑦、高低字节选择
W9825G6KH 是一个 16 位的 SDRAM,因此就分为低字节数据和高字节数据, LDQM 和UDQM 就是低字节和高字节选择信号,这个也和 SRAM 一样。
DDR 简介
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 倍的速度不是简简单单的将 CLK 提高 1 倍,SDRAM 在一个 CLK 周期传输一次数据, DDR 在一个 CLK 周期传输两次数据,也就是在上升沿和下降沿各传输一次数据,这个概念叫做预取(prefetch),相当于 DDR 的预取为 2bit,因此DDR 的速度直接加倍!比如 SDRAM 速度一般是 133200MHz,对应的传输速度就是133200MT/s,在描述 DDR 速度的时候一般都使用 MT/s,也就是每秒多少兆次数据传输。133MT/S 就是每秒 133M 次数据传输, MT/s 描述的是单位时间内传输速率。同样 133~200MHz
的频率, DDR 的传输速度就变为了 266~400MT/S,所以大家常说的 DDR266、 DDR400 就是这么来的。
DDR2 的 IO 时钟是 DDR 的 2 倍,因此 DDR 内核时钟依旧是 133~200MHz 的时候,总线速度就是 266~400MHz。而且 DDR2 在 DDR 基础上进一步增加预取(prefetch),增加到了 4bit,相当于比 DDR 多读取一倍的数据,因此 DDR2 的数据传输速率就是 533~800MT/s,这个也就是大家常说的 DDR2 533、 DDR2 800。当然了, DDR2 还有其他速度,这里只是说最常见的几种。
DDR3 在 DDR2 的基础上将预取(prefetch)提高到 8bit,因此又获得了比 DDR2 高一倍的传输速率,因此在总线时钟同样为 266~400MHz 的情况下, DDR3 的传输速率就是 1066~1600MT/S。MMDC 外设用于连接 DDR,支持 LPDDR2、 DDR3、 DDR3L,最高支持 16 位数据位宽。总线速度为 400MHz(实际是 396MHz),数据传输速率最大为 800MT/S。这里我们讲一下
PDDR3、 DDR3 和 DDR3L 的区别,这三个都是 DDR3, 但是区别主要在于工作电压, LPDDR3叫做低功耗 DDR3,工作电压为 1.2V。 DDR3 叫做标压 DDR3,工作电压为 1.5V,一般台式内存条都是 DDR3。 DDR3L 是低压 DDR3,工作电压为 1.35V,一般手机、嵌入式、笔记本等都使用 DDR3L。
我们就以NT5CC256M16EP-EK 为例讲解一下 DDR3。可以到 nanya官网去查找一下此型号,信息如图所示:
NT5CC256M16EP-EK 是一款容量为 4Gb,也就是 512MB 大小、16 位宽、 1.35V、传输速率为 1866MT/S 的 DDR3L 芯片。 NT5CC256M16EP-EK 的数据手册没有在 nanya 官网找到,但是找到了 NT5CC256M16ER-EK 数据手册,在官网上没有看出这两个有什么区别,因此我们就直接用 NT5CC256M16ER-EK 的数据手册。
从图可以看出, DDR3L 和 SDRAM 对的结构框图很类似,但是还是有点区别。
①、控制线
ODT:片上终端使能, ODT 使能和禁止片内终端电阻。
ZQ:输出驱动校准的外部参考引脚,此引脚应该外接一个 240 欧的电阻到 VSSQ 上,一般
就是直接接地了。
RESET: 复位引脚,低电平有效。
CKE: 时钟使能引脚。
A12: A12 是地址引脚,但是有也有另外一个功能,因此也叫做 BC 引脚, A12 会在 READ和 WRITE 命令期间被采样,以决定 burst chop 是否会被执行。
CK 和 CK#: 时钟信号, DDR3 的时钟线是差分时钟线,所有的控制和地址信号都会在 CK对的上升沿和 CK#的下降沿交叉处被采集。
CS#:片选信号,低电平有效。
RAS#、 CAS#和 WE#:行选通信号、列选通信号和写使能信号。
②、地址线
A[14:0]为地址线, A0~A14,一共 15 根地址线,根据 NT5CC256M16ER-EK 的数据手册可知,列地址为 A0~A9,共 10 根,行地址为 A0~A14,共 15 根,因此一个 BANK 的大小就是210*2152=32MB2=64MB,根据图 23.1.4.2 可知一共有 8 个 BANK,因此 DDR3L 的容量就是 64*8=512MB。
③、 BANK 选择线
一片 DDR3 有 8 个 BANK,因此需要 3 个线才能实现 8 个 BANK 的选择, BA0~BA2 就是用于完成 BANK 选择的。
④、 BANK 区域
DDR3 一般都是 8 个 BANK 区域。
⑤、数据线
因为是 16 位宽的,因此有 16 根数据线,分别为 DQ0~DQ15。
⑥、数据选通引脚
DQS 和 DQS#是数据选通引脚,为差分信号,读的时候是输出,写的时候是输入。 LDQS(有的叫做 DQSL)和 LDQS#(有的叫做 DQSL#)对应低字节,也就是 DQ0~7, UDQS(有的叫做 DQSU)和 UDQS#(有的叫做 DQSU#),对应高字节,也就是 DQ8~15。
⑦、数据输入屏蔽引脚
DM 是写数据收入屏蔽引脚。关于 DDR3L 的框图就讲解到这里,想要详细的了解 DDR3 的组成,请阅读相应对的数据手册
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)