系统级芯片通常要使用外部RAM作为程序运行空间,DDR是其中一种。但是DDR的速度发展到如今速度已经很快了,如DDR5已经达到6000,因此也会产生一些问题,比如容易受到干扰,甚至不同的pcb,cpu和DDR之间的线长都会影响DDR性能,在硬件上,可以使用走线等长,信号包地等处理,但是对于不同的PCB工程师,大家的布局,布线并不相同,因此现在的DDR控制器带有时序参数自动检测功能,CPU通过预制的程序进行DDR时序参数测试,得到最优数据,将该结果配置进DDR控制器作为配置参数运行。但也有一部分SOC没有集成该功能,这时就要借助一些外部工具和人工操作去测试出最优DDR参数,再人工将结果写回DDR控制器配置时序参数。

常见存储器

RAM:随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、 SRAM、 SDRAM、 DDR 等都是 RAM。 RAM 一般用来保存程序数据、中间结果,我们可以随意的对 RAM 中任何地址的数据进行读写操作。

ROM: 只读存储器,目前来说ROM指代的更多是flash。相比于RAM,向 ROM 或者 Flash 写入数据要复杂很多,因此意味着速度就会变慢(相比 RAM),但是ROM 和 Flash 可以将容量做的很大,而且掉电以后数据不会丢失,适合用来存储资料,比如音乐、图片、视频等信息。RAM 速度快,可以直接和 CPU 进行通信,但是掉电以后数据会丢失,容量不容易做大(和同价格的 Flash 相比)。 ROM(目前来说,更适合叫做 Flash)速度虽然慢,但是容量大、适合存储数据。对于正点原子的 I.MX6U-ALPHA 开发板,256M/512MB 的 DDR3 就是 RAM,而 512MBD Flash 或 8GB EMMC 就是 ROM。

SRAM:静态随机存取存储器(Static Random-Access Memory,SRAM)是随机存取存储器的一种。所谓的“静态”,是指这种存储器只要保持通电,里面储存的数据就可以恒常保持。相对之下,动态随机存取存储器(DRAM)里面所储存的数据就需要周期性地更新。然而,当电力供应停止时,SRAM储存的数据还是会消失,被称为volatile memory,这与在断电后还能储存资料的ROM或flash是不同的。对于RAM 而言需要随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式,这里就以常用的 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 为低电平的话表示访问低字节。
        SRAM 缺点:成本高!
        SRAM 特点:无需刷新(SDRAM 需要刷新),读写速度快!所以 SRAM通常作为 SOC 的内部 RAM 使用或 Cache 使用,比如 STM32内部的 RAM 或 I.MX6U 内部的
OCRAM 都是 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、DDR5 SDRAM。 以华邦W9825G6KH 为例, W9825G6KH 是一款 16 位宽(数据位为 16 位)、 32MB 的 SDRAM、速度一般为 133MHz、 166MHz 或 200MHz。 W9825G6KH 框图如图 23.1.3.1 所示:

①、控制线:SDRAM 也需要很多控制线,我们依次来看一下:CLK: 时钟线, SDRAM 是同步动态随机存储器,“同步”的意思就是时钟,因此需要一根额外的时钟线,这是和 SRAM 最大的不同, SRAM 没有时钟线。CKE: 时钟使能信号线。CS: 片选信号。RAS:行选通信号,低电平有效, SDRAM 和 SRAM 的寻址方式不同, SDRAM 按照行、列来确定某个具体的存储区域。因此就有行地址和列地址之分,行地址和列地址共同复用同一组地址线,要访问某一个地址区域,必须要发送行地址和列地址,指定要访问哪一行?哪一列?RAS 是行选通信号,表示要发送行地址,行地址和列地址访问方式如图 23.1.3.2 所示:

CAS: 列选通信号,和 RAS 类似,低电平有效,选中以后就可以发送列地址了。WE: 写使能信号,低电平有效。
        ②、 A10 地址线:A10 是地址线,那么这里为什么要单独将 A10 地址线给提出来呢?因为 A10 地址线还有另外一个作用, A10 还控制着 Auto-precharge,也就是预充电。这里又提到了预充电的概念, SDRAM芯片内部会分为多个 BANK,关于 BANK 我们稍后会讲解。 SDRAM 在读写完成以后,如果要对同一个 BANK 中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行,准备打开新行的操作就叫做预充电。一般 SDRAM 都支持自动预充电的功能。
        ③、地址线:对于 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=8M,但是 W9825G6KH 是一个 32MB 的 SDRAM 啊,为什么算出来只有 8MB,仅仅为实际容量的 1/4。不要急,这个就是我们接下来要讲的 BANK,8MB 只是一个 BANK 的容量, W9825G6KH 一共有 4 个 BANK。
        ④、 BANK 选择线:BS0 和 BS1 是 BANK 选择信号线,在一片 SDRAM 中因为技术、成本等原因,不可能做一个全容量的 BANK。而且,因为 SDRAM 的工作原理,单一的 BANK 会带来严重的寻址冲突,减低内存访问效率。为此,人们在一片 SDRAM 中分割出多块 BANK,一般都是 2 的 n 次方,比如 2, 4, 8 等。图 23.1.1.2 中的⑤就是 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 所没有的。

⑤、 BANK 区域:关于 BANK 的概念前面已经讲过了,这部分就是 W9825G6KH 的 4 个 BANK 区域。这个概念也是 SRAM 所没有的。
        ⑥、数据线:W9825G6KH 是 16 位宽的 SDRAM,因此有 16 根数据线, DQ0~DQ15,不同的位宽其数据线数量不同,这个和 SRAM 是一样的。
        ⑦、高低字节选择W9825G6KH 是一个 16 位的 SDRAM,因此就分为低字节数据和高字节数据, LDQM 和UDQM 就是低字节和高字节选择信号,这个也和 SRAM 一样。

*SRAM使用MOS组成,SDRAM使用电容充电技术

DDR介绍

DDR 内存是 SDRAM 的升级版本,DDR 本质上还是SDRAM,只是随着技术的不断发展, DDR 也在不断的更新换代,当发现 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/S。
        I.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。
        正点原子的 I.MX6U-ALPHA 开发板上接了一个 256MB/512MB 的 DDR3L, 16 位宽,型号为NT5CC128M16JR/MT5CC256M16EP, nanya 公司出品的,分为对应 256MB 和 512MB 容量。EMMC 核心板上用的 512MB 容量的 DDR3L。我们就以 EMMC 核心板上使用的 NT5CC256M16EP-EK 为例讲解一下 DDR3。可以到 nanya官网去查找一下此型号,信息如图所示:

从图中可以看出, NT5CC256M16EP-EK 是一款容量为 4Gb,也就是 512MB 大小、16 位宽、 1.35V、传输速率为 1866MT/S 的 DDR3L 芯片。 DDR3L 结构框图如图:

从图可以看出, 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 的大小就是2^10*2^15*2=32MB*2=64MB,根据图可知一共有 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 是写数据输入屏蔽引脚。

DDR3时序参数:

1、传输速率:比如 1066MT/S、 1600MT/S、 1866MT/S 等,这个是首要考虑的,因为这个决定了 DDR3 内存的最高传输速率。
        2、 tRCD 参数:tRCD 全称是 RAS-to-CAS Delay,也就是行寻址到列寻址之间的延迟。 DDR 的寻址流程是先指定 BANK 地址,然后再指定行地址,最后指定列地址确定最终要寻址的单元。 BANK 地址和行地址是同时发出的,这个命令叫做“行激活” (Row Active)。行激活以后就发送列地址和具体的操作命令(读还是写),这两个是同时发出的,因此一般也用“读/写命令”表示列寻址。在行有效(行激活)到读写命令发出的这段时间间隔叫做 tRCD,如图所示:

一 般 DDR3 数 据 手 册 中 都 会 给 出 tRCD 的 时 间 值 , 比 如 正 点 原 子 所 使 用 的NT5CC256M16EP-EK 这个 DDR3, tRCD 参数如图所示:

从图中可以看出, tRCD 为 13.91ns,这个我们在初始化 DDR3 的时候需要配置。有时候大家也会看到“13-13-13”之类的参数,这个是用来描述 CL-tRCD-TRP 的,如图所示:

从图中可以看出, NT5CC256M16ER-EK 这个 DDR3 的 CL-TRCD-TRP 时间参数为“13-13-13”。因此 tRCD=13,这里的 13 不是 ns 数,而是 CLK 时间数,表示 13 个 CLK 周期。

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

CL 参数一般在 DDR3 的数据手册中可以找到,比如 NT5CC256M16EP-EK 的 CL 值就是 13个时钟周期,一般 tRCD 和 CL 大小一样。

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

上图就是镁光 DDR3L 的读时序图,我们依次来看一下图中这四部分都是什么内容:
        ①、 tRCD
        ②、 AL
        ③、 CL
        ④、 RL 为读潜伏期, RL=AL+CL

5、 tRC 参数:tRC 是两个 ACTIVE 命令,或者 ACTIVE 命令到 REFRESH 命令之间的周期, DDR3L 数据手册会给出这个值,比如 NT5CC256M16EP-EK 的 tRC 值为 47.91ns。

6、 tRAS 参数:tRAS 是 ACTIVE 命令到 PRECHARGE 命令之间的最小时间, DDR3L 的数据手册同样也会给出此参数, NT5CC256M16EP-EK 的 tRAS 值为 34ns。

DDR控制器(MMDC)

MMDC 就是 I.MX6U的内存控制器, MMDC 是一个多模的 DDR 控制器,可以连接 16 位宽的 DDR3/DDR3L、 16 位宽的 LPDDR2, MMDC 是一个可配置、高性能的 DDR 控制器。 MMDC 外设包含一个内核(MMDC_CORE)和 PHY(MMDC_PHY),内核和 PHY 的功能如下:
        MMDC 内核:内核负责通过 AXI 接口与系统进行通信、 DDR 命令生成、 DDR 命令优化、读/写数据路径。
        MMDC PHY:PHY 负责时序调整和校准,使用特殊的校准机制以保障数据能够在 400MHz被准确捕获。
MMDC 的主要特性如下:
        ①、支持 DDR3/DDR3Lx16、支持 LPDDR2x16,不支持 LPDDR1 MDDR 和 DDR2。
        ②、支持单片 256Mbit~8Gbit 容量的 DDR,列地址范围: 8-12 位,行地址范围 11-16bit。 2个片选信号。
        ③、对于 DDR3,最大支持 8bit 的突发访问。
        ④、对于 LPDDR2 最大支持 4bit 的突发访问。
        ⑤、 MMDC 最大频率为 400MHz,因此对应的数据速率为 800MT/S。
        ⑥、支持各种校准程序,可以自动或手动运行。支持 ZQ 校准外部 DDR 设备, ZQ 校准 DDRI/O 引脚、校准 DDR 驱动能力。

DDR校准

NXP提供了一个DDR测试工具:

先进行参数设置:

参数配置是使用一个excel表格生成配置数据,打开excel:

①、 Readme 选项卡,此选项卡是帮助信息,告诉用户此文件如何使用。
        ②、 Register Configuration 选项卡,顾名思义,此选项卡用于完成寄存器配置,也就是配置DDR3,重点使用
        ③、 RealView.inc 选项卡,当我们配置好 Register Configuration 选项卡以后, RealView.inc选项卡里面就保存着寄存器地址和对应的寄存器值。我们需要另外新建一个后缀为.inc 的文件来保存 RealView.inc 中的初始化脚本内容, ddr_stress_testr 软件就是要使用此.inc 结尾的初始化脚本文件来初始化 DDR3。

选中“Register Configuration”选项卡,如图所示:

①、 Device Information
        DDR3 芯片设备信息设置,此部分需要根据所使用的 DDR3 芯片来设置,具体的设置项如下:
        Manufacturer:DDR3 芯片厂商,默认为镁光(Micron),这个没有意义,比如我们用的 nanya的 DDR3,但是此配置文件也是可以使用的。
        Memory part number:DDR3 芯片型号,可以不用设置,没有实际意义。
        Memory type: DDR3 类型,有 DDR3-800、 DDR3-1066、 DDR3-1333 和 DDR3-1600。
        DRAM density(Gb): DDR3 容量,根据实际情况选择。
        DRAM Bus width: DDR3 位宽
        Number of Banks: DDR3 内部 BANK 数量,对于 DDR3 来说内部都是 8 个 BANK,因此固定为 8。
        Number of ROW Addresses:行地址宽度,可选 11~16 位,这个要具体所使用的 DDR3 芯片来定。
        Number COLUMN Addresses: 列地址宽度,可选 9~12 位。
        Page Size(K): DDR3 页大小,可选 1 和 2。
        Self-Refresh Temperature(SRT): 固定为 Extended,不需要修改。
        tRCD=tRP=CL(ns): DDR3 的 tRCD-tRP-CL 时间参数,要查阅所使用的 DDR3 芯片手册
        tRC Min(ns): DDR3 的 tRC 时间参数
        tRAS Min(ns): DDR3 的 tRAS 时间参数
②、 System Information
        此部分设置 I.MX6UL/6ULL 相关属性,具体的设置项如下:
        i.Mx Part: 固定为 i.MX6UL。
        Bus Width:总线宽度,16位宽
        Density per Chip select(Gb): 每个片选对应的 DDR3 容量,可选 1~16,根据实际所使用的DDR3 芯片来填写, 512MB 的话就选择 4, 256MB 的话就选择 2。
        Number of Chip Select used: 使用几个片选信号?可选择 1 或 2。
        Total DRAM Density(Gb): 整个 DDR3 的容量,单位为 Gb,如果是 512MB 的话就是 4,如果是 256MB 的话就是 2。
        DRAM Clock Freq(MHz): DDR3 工作频率,设置为 400MHz。
        DRAM Clock Cycle Time(ns): DDR3 工作频率对应的周期,单位为 ns,如果工作在 400MHz,那么周期就是 2.5ns。
        Address Mirror(for CS1): 地址镜像,仅 CS1 有效,此处选择关闭,也就是“Disable”,此选项我们不需要修改。
③、 SI Configuratin
        此部分是信号完整性方面的配置,主要是一些信号线的阻抗设置,这个要咨询硬件工程师,这里我们直接使用 NXP 的默认设置即可。
        关 于 DDR3 的 配 置 我 们 就 讲 解 到 这 里 , 如 果 是 EMMC 核 心 板 (DDR3 型 号 为NT5CC256M16EP-EK),那么配置如图所示:

配置完成以后点击 RealView.inc 选项卡,如图所示:

图中的 RealView.inc 就是生成的配置脚本,全部是“寄存器地址=寄存器值”这种形式。 RealView.inc 不能直接用,我们需要新建一个以.inc 结尾的文件,名字自定义,比如我名为“ALIENTEK_512MB”的.inc 文件,如图 23.5.2.11 所示:

使用编辑器打开该文件,将RealView.inc中的内容复制到新建的文件中。

校准:

首先要用 DDR_Tester.exe 软件对开发板的 DDR3L 进行校准,因为不同board的 PCB 其走线不同,必须要进行校准,经过校准以后DDR就会工作到最佳状态。
1、将开发板通过 USB OTG 线连接到电脑上,DDR_Tester 软件通过 USB OTG 线将测试程序下载到开发板中,因此首先需要使用 USBOTG 线将开发板和电脑连接起来。
        *注:弹出SD卡,设置启动方式到串行总线启动(USB)
2、 DDR_Tester 软件
        双击“DDR_Tester.exe”,打开测试软件,如图所示:

一切设置好以后点击图中右上方的“Download”按钮,将测试代码下载到开发板中,下载完成以后 DDR Test Tool 下方的信息窗口就会输出一些内容,如图所示:

图中输出了一些关于板子的信息,比如 SOC 型号、工作频率、 DDR 配置信息等等。DDR Test Tool 工具有三个测试项: DDR Calibration、DDR Stess Test 和 32bit Memory Read/Write,我们首先要做校准测试,因为不同的 PCB、不同的 DDR3L 芯片对信号的影响不同,必须要进行校准,然后用新的校准值重新初始化 DDR。点击“Calibraton”按钮,如图所示:

点击图中的“Calibration”按钮以后就会自动开始校准,最终会得到 Write levelingcalibtarion、 Read DQS Gating Calibration、 Read calibration 和 Write calibration,一共四种校准结果,校准结果如下:

Write leveling calibration
MMDC_MPWLDECTRL0 ch0 (0x021b080c) = 0x00000000
MMDC_MPWLDECTRL1 ch0 (0x021b0810) = 0x000B000BRead DQS Gating calibration
MPDGCTRL0 PHY0 (0x021b083c) = 0x0138013C
MPDGCTRL1 PHY0 (0x021b0840) = 0x00000000Read calibration
MPRDDLCTL PHY0 (0x021b0848) = 0x40402E34Write calibration
MPWRDLCTL PHY0 (0x021b0850) = 0x40403A34

所谓的校准结果其实就是得到了一些寄存器对应的值,比如 MMDC_MPWLDECTRL0 寄存器地址为 0X021B080C,此寄存器是 PHY 写平衡延时寄存器 0,经过校准以后此寄存器的值应 该 为 0X00000000 , 以 此 类 推 。 我 们 需 要 修 改 ALIENTEK_512MB.inc 文 件 , 找 到MMDC_MPWLDECTRL0、 MMDC_MPWLDECTRL1、 MPDGCTRL0 PHY0、 MPDGCTRL1 PHY0、MPRDDLCTL PHY0 和 MPWRDLCTL PHY0 这 6 个寄存器,然后将其值改为校准后的值 。注意,在 ALIENTEK_512MB.inc 中 可 能 找 不 到
MMDC_MPWLDECTRL1(0x021b0810)和 MPDGCTRL1 PHY0(0x021b0840)这两个寄存器,找不到就不用修改了。
        ALIENTEK_512MB.inc 修改完成以后重新加载并下载到开发板中,至此 DDR 校准完成,校准的目的就是得到DDR PHY寄存器的值!

超频:

DDR Test Tool 支持 DDR3 超频测试,只要指定起始频率和终止频率,那么工具就会自动开始一点点的增加频率,直到达到终止频率或者测试失败。设置如图所示:

*本篇大部分都属于基础理论知识,所以较多的参考了《正点原子》相关资料,有关更详细的信息,请自行查阅资料。

I.MX6ULL_Linux_基础篇(11) DDR介绍与校准相关推荐

  1. 拼题A基础篇 11 输出闰年

    拼题A 基础篇11 输出闰年 #include<stdio.h> main() {int year, number = 0;scanf("%d", &year) ...

  2. I.MX6ULL_Linux_基础篇(7) 裸机开发流程

    上一篇介绍了芯片的基本资源,本篇就开始学习怎么编程去使用芯片了(裸机,非系统).不过鉴于该芯片基本都使用linux开发,裸机仅介绍流程. 开发环境准备 服务器(ubuntu环境) 工具使用和开发方式可 ...

  3. Dubbo 专题(基础篇):Dubbo 介绍、环境搭建与实践

    前几天复习了 Dubbo 相关的技术点,趁热打铁记录一下,本篇博客属于 Dubbo 的入门基础篇,内容主要包括 Dubbo 概念,Dubbo 特点,Dubbo 基本工作原理,Dubbo 环境搭建,Du ...

  4. WF4.0 基础篇 (二) Activity介绍及WriteLine Activity的使用

    从本篇开始,将正式讲解WF4.0,本文主要涉及如下内容:Activity介绍, WF4.0 中工作流的结构,通过WriteLine演示InArgument<T>参数的使用 目录 1     ...

  5. 云计算基础教程(第2版)笔记——基础篇与技术篇介绍

    文章目录 前言 第一篇        基础篇 一 绪论 1.1 云计算的概念以及特征 1.1.1云计算的基本概念 1.1.2云计算的基本特征 1.2 云计算发展简史 1.3 三种业务模式介绍 1. 基 ...

  6. LabVIEW图像模式匹配(基础篇—11)

    目录 1.图像模式匹配概念 2.影响图像模式匹配的因素 3.灰度匹配 4.几何匹配 5.黄金模板比较 图像模式匹配是指通过分析模板图像和目标图像中灰度.边缘.外形结构以及对应关系等特征的相似性和一致性 ...

  7. java基础篇(11) 枚举类型

    枚举类型Enum的简介 1.什么是枚举类型 枚举类型: 就是由一组具有名的值的有限集合组成新的类型.(即新的类). 好像还是不懂,别急,咱们先来看一下 为什么要引入枚举类型 在没有引入枚举类型前,当我 ...

  8. Linux基础篇① (Linux介绍;VM和CentOS详细安装教程;工具环境搭建,配置;Linux目录结构)

    目录 第一章 Linux入门 1.1 Linux应用领域 1.1.1 个人桌面领域的应用 1.1.2 服务器领域 1.1.3 嵌入式领域 1.2 Linux介绍 1.2.1 linux概述 1.3 L ...

  9. 基于STM32+OV7670的图像采集系统(基础篇:ov7670介绍)

    由于这部分内容过多,分开介绍,本文章主要是介绍ov7670模块. 一.简单认识 先来看一下外观: OV7670,图像传感器,体积小,工作电压低,提供单片VGA摄像头和影像处理器的所有功能.通过SCCB ...

最新文章

  1. css 网格布局_我从CSS网格布局中学到的东西
  2. python 多线程 全站小说_多线程下载小说
  3. Spring : Spring @Transactional-嵌套事物处理
  4. 字符大小端aix linux,Go交叉编译的那些事
  5. stm32f407 spi3 mosi没有输出_入门篇 | STM32F407寄存器开发点灯
  6. python爬虫数据分析案例-Python 爬虫和数据分析实战
  7. XML揭秘 入门 应用 精通pdf
  8. 修改submin的管理员初始密码
  9. ESP32 之 ESP-IDF 实战(一)—— 物联网风力摆控制系统(①姿态解算部分)
  10. ffmpeg命令分析-b:v
  11. 利用python3 爬取 网易云 上 周杰伦所有专辑,歌曲,评论,并完成可视化分析已经歌曲情绪化分析...
  12. 美团网副总裁王慧文:所谓“农村包围城市”是一个误解
  13. 我的世界java刷雪机_我的世界自动造/刷雪机制作图文教程
  14. java 级联删除_JPA级联删除
  15. 企业研究:赢在起跑线,首个10年便建起壁垒的新国都
  16. 服务器跑压力测试死机,我用鲁大师温度压力测试怎么死机了啊
  17. 福克斯车钥匙遥控失灵解决办法
  18. can通道采样频率_CAN总线CAN波特率计算方式
  19. mybatis中association 和collection 的区别
  20. 《让子弹飞》系列——杀人不眨眼的老四

热门文章

  1. July 13th 五月天
  2. 给初级beatles热爱者提供的歌曲MP3下载
  3. 毕设 - 大数据用户画像分析系统 - 数据分析可视化
  4. Python Numpy random.chisquare() 卡方分布
  5. android 自定义长条进度条_Android 条形进度条
  6. 新手上路vscode+php|php文档格式化与代码重构
  7. Metasploit 渗透测试之制作隐藏后门
  8. 联网报警器红外探头的工作原理
  9. 字体图标在ie兼容问题(element低版本icon)(图标在ie浏览器不显示)
  10. “无法建立到信任根颁发机构的证书链问题解决,根证书的导入方法