当前位置: 代码迷 >> 综合 >> RAM,ROM,SRAM,SDRAM,DDR内存
  详细解决方案

RAM,ROM,SRAM,SDRAM,DDR内存

热度:14   发布时间:2023-11-26 12:41:47.0

一、RAM和ROM

RAM: 随机存储器可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、 SRAM、 SDRAM、 DDR 等都是 RAM。 RAM 一般用来保存程序数据、中间结果,比如在程序中定义了一个变量 a,然后对这个 a 进行读写操作

int a;
a = 10;

a 是一个变量,可以直接对“a”进行读写操作,不需要在乎具体的读写过程。可以随意的对 RAM 中任何地址的数据进行读写操作,非常方便
 

ROM: 只读存储器,也叫flash, 但是可以进行写操作的,只是写起来比较麻烦,要先进行擦除,然后再发送要写的地址或扇区,最后才是要写入的数据,相比于RAM,像ROM 或者 Flash 写入数据要复杂很多,因此意味着速度就会变慢(相比 RAM),但是ROM 和 Flash 可以将容量做的很大,而且掉电以后数据不会丢失,适合用来存储资料,比如音乐、图片、视频等信息
 

综上所述, RAM 速度快,可以直接和 CPU 进行通信,但是掉电以后数据会丢失,容量不容易做大,ROM(目前来说,更适合叫做 Flash)速度虽然慢,但是容量大、适合存储数据
 

二、SRAM和SDRAM

SRAM(Static Random-Access Memory): 静态随机存储器,这里的“静态”指的是只要 SRAM 上电,SRAM 里面的数据就会一直保存着,直到 SRAM 掉电。对于RAM 而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式。
 

IS62WV51216  16 位宽(数据位为 16 位)、1MB 大小 SRAM 芯片

 ①地址线,一共 A0~A18,19 根地址线,因此可访问的地址大小就是2^19=524288=512KB,又数据位是16 位宽的,也就是一次访问 2 个字节,因此需要对512KB 进行乘 2 处理,得到512KB*2=1MB。位宽的话一般有 8 位/16 位/32 位,根据实际需求选择即可,一般都是根据处理器的 SRAM 控制器位宽来选择 SRAM 位宽

②数据线,根据 SRAM 位宽的不同,数据线的数量要不同, 8 位宽就有 8根数据线, 16 位宽就有 16 根数据线。 IS62WV51216 是一个 16 位宽的 SRAM,因此就有 16 根数据线,一次访问可以访问 16bit 的数据。因此就有高字节和低字节数据,其中 IO0~IO7 是低字节数据, IO8~IO15 是高字节数据

③控制线,SRAM 要工作还需要一堆的控制线

SRAM 突出的特点就是无需刷新(SDRAM 需要刷新),读写速度快。所以 SRAM通常作为 SOC 的内部 RAM 使用或 Cache 使用。但是成本比较高
 

SDRAM(Synchronous DynamicRandom Access Memory): 同步动态随机存储器,“同步”的意思是 SDRAM 工作需要时钟线,“动态”的意思是 SDRAM 中的数据需要不断的刷新来保证数据不会丢失,“随机”的意思就是可以读写任意地址的数据
 

与 SRAM 相比, SDRAM 集成度高、功耗低、成本低、适合做大容量存储,但是需要定时刷新来保证数据不会丢失因此 SDRAM 适合用来做内存条, SRAM 适合做高速缓存或 MCU内部的RAM
 

SDRAM 目前已经发展到了第四代,分别为: SDRAM、 DDR SDRAM、 DDR2 SDRAM、 DDR3 SDRAM、 DDR4 SDRAM

W9825G6KH 是一款 16 位宽(数据位为 16 位)、 32MB 的 SDRAM、速度一般为 133MHz、 166MHz 或 200MHz,框图如下

 

①控制线:

CLK: 时钟线, SDRAM 是同步动态随机存储器,“同步”的意思就是时钟,因此需要一根
额外的时钟线,这是和 SRAM 最大的不同, SRAM 没有时钟线
 

RAS:行选通信号,低电平有效, SDRAM 和 SRAM 的寻址方式不同, SDRAM 按照行、
列来确定某个具体的存储区域。因此就有行地址和列地址之分,行地址和列地址共同复用同一组地址线,要访问某一个地址区域,必须要发送行地址和列地址,指定要访问哪一行,哪一列。RAS 是行选通信号,表示要发送行地址

CAS: 列选通信号,低电平有效,选中后就可以发送列地址
 

寻址方式:

 

 

②A10地址线:控制着Auto-precharge(预充电),SDRAM芯片内部会分为多个 BANK,SDRAM 在读写完成以后,如果要对同一个 BANK 中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行,准备打开新行的操作就叫做预充电。一般 SDSRAM 都支持自动预充电的功能
 

③地址线:一共有 A0~A12,共 13 根地址线。SDRAM 寻址是按照行地址和列地址来访问的,因此这 A0~A12 包含了行地址和列地址。不同的 SDRAM 芯片,根据其位宽、容量等的不同,行列地址数是不同的。

比如 W9825G6KH 的 A0~A8 是列地址,一共 9 位列地址, A0~A12 是行地址,一共 13位,因此可寻址范围为: 2^9*2^13=4194304B=4MB, W9825G6KH 为 16 位宽(2 个字节),因此还需要对 4MB 进行乘 2 处理,得到 4*2=8MB,注意这里仅仅算的是一个BANK 的容量,还需要乘以BANK的数量 8*4 = 32MB

④BANK 选择线:BS0 和 BS1 是 BANK 选择信号线,刚好4个BANK。如果是 8 个 BANK 的话就需要三根线

三、DDR3

DDR(Double Data Rate SDRAM): 双倍速率 SDRAM, DDR 内存是 SDRAM 的升级版本,SDRAM 在一个 CLK 周期传输一次数据, DDR 在一个 CLK 周期传输两次数据,在上升沿和下降沿各传输一次数据,这个概念叫做预取(prefetch),相当于 DDR 的预取为 2bit

SDRAM 速度一般是 133~200MHz,对应的传输速度就是133~200MT/s(MT/s:每秒多少兆次数据传输,单位时间内传输速率),DDR 的传输速度就变为了 266~400MT/S

DDR2 在 DDR 基础上进一步增加预取(prefetch),增加到了 4bit,相当于比 DDR 多读取一倍的数据,因此 DDR2 的数据传输速率就是 533~800MT/s 。DDR3 在 DDR2 的基础上将预取(prefetch)提高到 8bit,因此又获得了比 DDR2 高一倍的传输速率,因此在总线时钟同样为 266~400MHz 的情况下, DDR3 的传输速率就是 1066~1600MT/S

MX6U 的 MMDC 外设用于连接 DDR,支持 LPDDR2、 DDR3、 DDR3L,最高支持 16 位数据
位宽。总线速度为 400MHz(实际是 396MHz),数据传输速率最大为 800MT/S。这三个都是DDR3,主要区别是在于工作电压, LPDDR3叫做低功耗 DDR3,工作电压为 1.2V。 DDR3 叫做标压 DDR3,工作电压为 1.5V,一般台式内存条都是 DDR3。 DDR3L 是低压 DDR3,工作电压为 1.35V,一般手机、嵌入式、笔记本等都使用 DDR3L

DDR3的框图和SDRAM大致是差不多就不说了

STM32 的 FMC 或 FSMC 外设用于连接 SRAM 或 SDRAM,对于 I.MX6U 来说也有 DDR 内存控制器:MMDC控制器,MMDC 是一个多模的 DDR 控制器,可以连接 16 位宽的 DDR3/DDR3L、16 位宽的 LPDDR2, MMDC 是一个可配置、高性能的 DDR 控制器。 MMDC 外设包含一个内核
(MMDC_CORE)和 PHY(MMDC_PHY)

MMDC 内核:内核负责通过 AXI 接口与系统进行通信、 DDR 命令生成、 DDR 命令优化、
读/写数据路径。
MMDC PHY: PHY 负责时序调整和校准,使用特殊的校准机制以保障数据能够在 400MHz
被准确捕获        

STM32 中FMC/FSMC 的 IO 引脚是带有复用功能的,如果不接 SRAM 或SDRAM  FMC/FSMC 是可以用作其他外设 IO 的。但是,对于 DDR 接口就不一样,DDR 对于硬件要求非常严格,DDR 的引脚都是独立的,一般没有复用功能,只做为 DDR引脚使用



在使用时只需要设置 DDR 引脚的电气属性即可,注意, DDR 引脚的电气属性寄存器和普通的外设引脚电气属性寄存器不同

MMDC时钟来源:可以选择4路,一般选择PLL2_PFD2,400MHz