LINUX驱动开发学习笔记--DDR3内存

在学习DDR之前,我们首先要知道什么是RAM和ROM

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

ROM:只读存储器,写起来比较麻烦,要先进行擦除,然后 再 发送要写的地址或扇区,最后才是要写入的数据

我们买手机的时候,通常会告诉你这个手机是 4+64或 6+128配置,说的就是 RAM为 4GB或 6GB ROM为 64G或128GB。

对比:RAM速度快,可以直接和 CPU进行通信,但是掉电以后数据会丢失,容量不容易做大 (和同价 格的 Flash相比 )。 ROM(目前来说,更适合叫做 Flash)速度虽然慢,但是容量大、适合存储数据。

RAM包含SRAM、SDRAM等,DDR内存则是对SDRAM的升级版本。SDRAM分为 SDR SDRAM、DDR SDRAM、 DDR2 SDRAM、 DDR3 SDRAM、 DDR4 SDRAM。可以看出 DDR本质上还是SDRAM。 DDR全称是 Double Data Rate SDRAM,也就是双倍速率 SDRAM。DDR2和DDR3则在DDR的速率上分别增加了两倍和四倍。

选择DDR3内存的时候通常会重点观察几个常用的时间参数:

1、传输速率 :比如1066MT/S、 1600MT/S、 1866MT/S等,这个是首要考虑的,因为这个决定了 DDR3内存的最高传输速率。

2、 tRCD参数: tRCD全称是 RAS-to-CAS Delay,也就是行寻址到列寻址之间的延迟。 DDR的寻址流程是先指定 BANK地址,然后 再 指定行地址,最后指定列地址确定最终要寻址的单元。 BANK地址和行地址是同时发出的,这个命令叫做“行激活” ”(Row Active)。行激活以后就发送列地址和具体的操作命令 (读还是写 ),这两个是同时发出的,因此一般也用“读 /写命令”表示列寻址。在行有效 (行激活 )到读写命令发出的这段时间间隔叫做 tRCD

3、CL 参数 当列地址发出以后就会触发数据传输,但是数据从存储单元到内存芯片IO 接口上还需要一段时间,这段时间就是非常著名的CL(CAS Latency),也就是列地址选通潜伏期

4、AL 参数 在DDR 的发展中,提出了一个前置CAS 的概念,目的是为了解决DDR 中的指令冲突,它允许CAS 信号紧随着RAS 发送,相当于将DDR 中的CAS 前置了。但是读/写操作并没有因此提前,依旧要保证足够的延迟/潜伏期,为此引入了AL(Additive Latency),单位也是时钟周期数。AL+CL 组成RL(ReadLatency),从DDR2 开始还引入了写潜伏期WL(Write Latency),WL 表示写命令发出以后到第一笔数据写入的潜伏期。

如图为一个DDR3的读时序图, ①、tRCD。 ②、AL。 ③、CL。 ④、RL 为读潜伏期,RL=AL+CL。

DDR内存控制器介绍: STM32的 FMC或 FSMC外设用于连接 SRAM或 SDRAM。对于 I.MX6U来说也有 DDR内存控制器,用来cpu和DDR内存的连接, MMDC就是 I.MX6U的内存控制器。

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

DDR初始化及测试: 1、ddr__srtress_tester配置文件 excel配置文件,excel配置号以后realview.inc会同步更新。 2、.inc文件 ddr_stress_tester工具需要用到.inc文件

3、测试 ddr_stress_tester通过USB口将.inc中的配置信息下载到开发板。直接超频测试的话失败

4、做校准 Write leveling calibration MMDC_MPWLDECTRL0 ch0 (0x021b080c) = 0x00000000 MMDC_MPWLDECTRL1 ch0 (0x021b0810) = 0x00070007

Read DQS Gating calibration MPDGCTRL0 PHY0 (0x021b083c) = 0x013C013C MPDGCTRL1 PHY0 (0x021b0840) = 0x00000000

Read calibration MPRDDLCTL PHY0 (0x021b0848) = 0x40403438

Write calibration MPWRDLCTL PHY0 (0x021b0850) = 0x40403632

经验分享 程序员 微信小程序 职场和发展