美文网首页
IMX6ULL学习笔记(21)——MMDC接口使用(DDR3测试

IMX6ULL学习笔记(21)——MMDC接口使用(DDR3测试

作者: Leung_ManWah | 来源:发表于2023-03-30 15:07 被阅读0次

    一、MMDC简介

    MMDC 接口与 STM32 的 FSMC 接口类似,只不过 MMDC 接口专用于外接 DDR,并且 MMDC 外部引脚不复用。MMDC 是一个多模的 DDR 控制器,可以连接 16 位宽的 DDR3/DDR3L、16 位宽的 LPDDR2。

    MMDC 是一个可配置、高性能的 DDR 控制器。MMDC 外设包含一个内核(MMDC_CORE)和 PHY(MMDC_PHY),内核和 PHY 的功能如下:

    • MMDC_CORE
      负责通过 AXI 接口与系统进行通信,实现 DDR 命令生成、DDR 命令优化和读写数据路径。控制整个 MMDC 的功能实现。
    • MMDC_PHY
      负责时序调整和校准,使用特殊的校准机制以确保数据被正常收发, 最高支持 400MHz。

    1.1 MMDC信号引脚

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

    1.2 MMDC时钟源

    默认情况下 PLL2 的 PFD2 时钟输出作为 MMDC 的根时钟,时钟频率为 400MHz(实际396MHz)。时钟产生路径如下图所示:

    PLL2 的 PFD2 经过两个时钟选择寄存器(标号①和②)和一个时钟分频寄存器(标号③)之后连接到 MMDC_CLK_ROOT。具体寄存器在时钟树中已经标出。特别注意的是,在程序中不能任意修改时钟选择寄存器以及时钟分频寄存器,因为程序正常运行会使用 DDR,而不正确的修改 DDR 根时钟会造成系统崩溃。

    二、DDR简介

    DDR 内存是 SDRAM 的升级版本,SDRAM 分为 SDR SDRAM、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 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。

    三、引脚确定

    我使用的是 野火_EBF6ULL S1 Pro 开发板,DDR型号是 MT41K256M16TW-107,容量 256M*16 共 512M 字节,数据宽度 16 位。

    四、DDR3测试

    4.1 下载DDR测试软件和配置文件

    NXP 提供了一个非常好用的 DDR 测试软件,叫做 ddr_stress_tester。
    官网下载:https://community.nxp.com/docs/DOC-102005
    百度网盘:

    打开下载地址,如下图所示。

    我们需要下载测试软件和测试需要使用的配置文件。如下图所示。

    点击标号①,在附件中找到 配置文件,点击附件下载即可。如下图所示。

    点击标号②,在附件中找到 下载工具,下载即可,如下图所示。

    下载完成并解压如下图所示:

    4.2 配置文件说明

    打开 I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 文件,如下图所示。

    配置文件包括三部分内容:

    • 配置文件的说明
      帮助信息,告诉用户此文件如何使用。

    • 配置选项
      通过此表可以设置板子的 DDR 信息,最后生成一个 .inc 结尾的 DDR 初始化脚本文件。

    • 根据配置选项自动生成的.inc格式的配置文件
      这个 .inc 文件就包含了 DDR 的初始化信息,一般都是寄存器地址和对应的寄存器值。DDR测试软件会用到这个文件。

    4.2.1 配置选项

    第二个文件是我们要修改的配置选项,如下图所示。

    上图中黄色和蓝色选项框需要根据硬件平台选择即可,这里默认是 NXP 官方评估板的配置参数。 如果使用的是 野火_EBF6ULL S1 Pro 开发板这些配置参数不用修改,保持默认即可。

    具体的配置界面,主要分为三部分:

    ① 驱动信息(Device Information)
    这部分内容配置DDR芯片相关信息。各配置项介绍如下:

    • Manufacturer: DDR芯片厂商,默认为镁光(Micron),这个没有意义,如果不改,配置文件也是可以使用的。
    • Memory part number: DDR芯片型号,可以不用设置,没有实际意义。
    • Memory type: DDR类型,有DDR3-800、DDR3-1066、DDR3-1333和DDR3-1600。这里只能通过下拉框选择,根据你使用的DDR芯片选择即可,我们选择DDR3-1600。
    • DRAM density (Gb): 芯片容量,单位是Gb,我们的DDR容量是512M字节 * 8 = 4Gb。容量根据实际容量选择即可。
    • DRAM Bus Width: 数据宽度,16位。
    • Number of Banks: DDR banks数量,通常情况下DDR3L都是8个bank。如有特殊情况根据实际数量选择即可。
    • Number of ROW Addresses: 行地址线数量,可选11~16条。这个要具体所使用的DDR3芯片来定,这里使用15条。
    • Number of COLUMN Addresses: 列地址线数量,可选9~12条。这个要具体所使用的DDR3芯片来定,这里使用10条。
    • Page Size (K): DDR芯片页大小,我们使用的DDR页大小是2K,其他芯片根据芯片手册说明选择即可。
    • Self-Refresh Temperature (SRT): 自刷新,这个选项框是对于 i.MX6UL 来说是不可修改的。
    • tRCD=tRP=CL (ns)、tRC Min (ns)、tRAS Min (ns): DDR相关延时相关参数,这些参数从DDR芯片数据手册中获得。

    ② 系统信息(System Information)
    系统信息大多是固定的,通常情况下不需要修改,具体介绍如下:

    • i.Mx Part: 芯片类型,固定为i.MX6UL。
    • Bus Width: 数据总线宽度,16位。
    • Density per chip select (Gb): 每片DDR芯片的容量,单位Gb,我们的DDR容量是512M字节*8 = 4Gb,根实际使用的DDR芯片选择即可。
    • Number of Chip Selects used: 使用了多少片DDR芯片,我们使用了1片,根据实际使用数量选择。
    • Total DRAM Density (Gb): 总共的DDR容量,我们使用了1片512M字节的DDR3L,所以这里选择4。
    • DRAM Clock Freq (MHz): DDR工作频率,默认400MHz。
    • DRAM Clock Cycle Time (ns): 一个时钟周期的时间长度,根据DDR工作频率计算即可,1/400M =2.5ns。
    • Address Mirror (for CS1): 地址镜像,仅CS1有效。选择Disable。

    ③ 硬件SI参数(SI Configuratin)
    这里设置的是硬件阻抗,保持默认即可。

    4.2.2 保存配置信息

    修改完成后,配置信息自动更新到 RealView.inc 文件,如下图所示:

    RealView.inc 不能直接用,我们需要新建一个以 .inc 结尾的文件,名字自定义,但最好不要用中文。

    使用 VS code 打开 RealVies.inc 文件(也可使用其他工具打开)。复制原配置文件中的全部内容到新建的 ALIENTEK_512MB.inc 文件,保存即可。后面 DDR 测试软件会使用到该配置文件。

    4.3 安装ddr_stress_tester

    双击 ddr_stress_tester_v3.00_setup.exe,软件会自动生成我们需要的测试工具,如下图所示。

    一直点击下一步即可,最终会在当前文件夹下生成我们需要的测试软件如下图所示。

    进入生成的工具,如下图所示。

    4.4 DDR校准

    双击DDR_Tester.exe,打开测试软件如下图所示。

    根据使用的硬件平台进行配置。

    配置完成后,将开发板设置为 USB 启动方式,点击 Download 按钮将测试代码下载到开
    发板中,下载完成以后 DDR Test Tool 下方的信息窗口就会输出一些内容。

    DDR TestTool 工具有三个测试项:DDR Calibration、DDR Stess Test 和 32bit Memory Read/Write,我们首先要做校准测试,因为不同的 PCB、不同的 DDR3L 芯片对信号的影响不同,必须要进行校准,然后用新的校准值重新初始化 DDR。点击 Calibraton 按钮,校准完成后会输出校准后的寄存器值,如下图所示。

    如果校准成功软件会输出成功提示信息,如上图标号①所示。标号②处是校准后得到的6个寄存器的值, 我们需要用这些寄存器的值替换校准文件中的值。

    例如我们使用的配置文件为 ALIENTEK_512MB.inc,使用 VS code 打开后直接搜索寄存器地址,例如修改 MMDC_MPWLDECTRL0 寄存器,则直接搜索 0x021b080c,找到后直接使用校准后的值 0x00050003 替换现有值即可。特别提醒,默认情况下,配置文件中找不到 MMDC_MPWLDECTRL1(0x021b0810)MPDGCTRL1 PHY0(0x021b0840), 这两个寄存器直接忽略即可。修改完成后保存即可。

    ALIENTEK_512MB.inc 修改完成以后重新加载并下载到开发板中,至此 DDR 校准完成。

    4.5 DDR性能测试

    校准完成以后就可以进行 DDR3 超频测试,超频测试的目的就是为了检验 DDR3 硬件设计合不合理,一般 DDR3 能够超频到比标准频率高 10%~15%的话就认为硬件没有问题。

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

    设置好起始频率为 400MHz,终止频率为 600MHz,设置好以后点击 Stress Test 按钮开启超频测试,超频测试时间比较久,请耐心等待。

    从上图可以看出,当超频到556MHz是出现了错误,说明我测试的这块开发板最高频率为552MHz, 不同开发板稍有差别,但都能满足400M的标准工作频率。


    • 由 Leung 写于 2023 年 3 月 31 日

    • 参考:13. DDR测试

    相关文章

      网友评论

          本文标题:IMX6ULL学习笔记(21)——MMDC接口使用(DDR3测试

          本文链接:https://www.haomeiwen.com/subject/pplmnrtx.html