当前位置: 首页 > news >正文

imx6ull-裸机学习实验14(下)——驱动DDR3和测试

前言

I.MX6U 有一个 256MB/512MB 的 DDR3 内存芯片,支持 LPDDR2、LPDDR3/DDR3,本讲实验就来学习如何驱动 I.MX6U-ALPHA 开发板上的这片 DDR3。

DDR3实验我们会从下面几个部分来讲解:

  • 介绍一些内存的基本概念:ROM/RAM、SRAM/SDRAM 、DDR3
  • 介绍DDR几个关键的时间参数。
  • 如何驱动I.MX6U MMDC 控制器。
  • 使用ddr_stress_tester工具进行 DDR 的初始化与测试。
  • 使用DDR_Tester.exe 软件对 DDR3L 进行校准。
  • 使用DR Test Tool 进行 DDR3 超频测试。

在学习实验14(上)—— DDR介绍和关键时间参数,我们已经介绍完前面两个部分了,本讲实验我们就来介绍开发板的MMDC控制器,然后使用3个工具对DDR进行测试。

MMDC 控制器

MMDC介绍

对于STM32 来说, FMC 或 FSMC 外设用于连接 SRAM 或 SDRAM;对于 I.MX6U 来说也有 DDR 内存控制器,那就是MMDC

MMDC 是一个多模的 DDR 控制器,可以连接 16 位宽的 DDR3/DDR3L、 16 位宽的 LPDDR2, 是一个可配置、高性能的 DDR 控制器。

MMDC 外设包含一个内核(MMDC_CORE) 和 PHY(MMDC_PHY)。

内核和 PHY 的功能如下:

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

MMDC 的主要特性如下:

  1. 支持 DDR3/DDR3Lx16、支持 LPDDR2x16,不支持 LPDDR1MDDR 和 DDR2。
  2. 支持单片 256Mbit~8Gbit 容量的 DDR,列地址范围: 8-12 位,行地址范围 11-16bit。 2个片选信号。
  3. 对于 DDR3,最大支持 8bit 的突发访问。
  4. 对于 LPDDR2 最大支持 4bit 的突发访问。
  5. MMDC 最大频率为 400MHz,因此对应的数据速率为 800MT/S。
  6. 支持各种校准程序,可以自动或手动运行。支持 ZQ 校准外部 DDR 设备, ZQ 校准 DDR I/O 引脚、校准 DDR 驱动能力。

MMDC 信号引脚

众所周知:DDR 的引脚都是独立的,一般没有复用功能,只做为 DDR引脚使用。

I.MX6U 也有专用的 DDR 引脚,如图:

对于这些IO来说,我们不用配置引脚复用,只需要设置 DDR 引脚的电气属性。

MMDC 时钟源

I.MX6U 的 DDR 或者 MDDC 的时钟频率为 400MHz。

MMDC 的时钟源路径图,主要分为 4 部分:

①、 pre_periph2 时钟选择器,也就是 periph2_clkd 的前级选择器,由 CBCMR 寄存器的PRE_PERIPH2_CLK_SEL 位(bit22:21)来控制。

当 PRE_PERIPH2_CLK_SEL 为 0x1 的时候,选中 PLL2_PFD2 为pre_periph2 时钟源。

我们已经将 PLL2_PFD2 设置为396MHz(约等于 400MHz), I.MX6U 内部 boot rom 就是设置 PLL2_PFD2 作为 MMDC 的最终时钟源,所以I.MX6U 的 DDR 频率为 400MHz。

②、 periph2_clk 时钟选择器,由 CBCDR 寄存器的 PERIPH2_CLK_SEL 位(bit26)来控制:

将 PERIPH2_CLK_SEL 设置为 0,也就是选择pll2_main_clk 作为 periph2_clk 的时钟源,因此 periph2_clk=PLL2_PFD0=396MHz。

③、最后就是分频器,由 CBCDR 寄存器的 FABRIC_MMDC_PODF 位(bit5:3)设置分频值,可设置 0~7,分别对应 1~8 分频。

要配置 MMDC 的时钟源为 396MHz,那么此处就要设置为 1分频,因此 FABRIC_MMDC_PODF=0。

硬件原理图

EMMC 核心板使用的 DDR3L 的型号为NT5CC256M16EP-EK,容量为 512MB。

左侧是 DDR3L 原理图,右侧的是 I.MX6U 的 MMDC 控制器 IO。

DDR3L 初始化与测试

DDR初始化工具

DDR 初始化工具,叫做 ddr_stress_tester。

特点:

  1. 此工具通过 USB OTG 接口与开发板相连接,也就是通过 USB OTG 口进行 DDR 的初始化与测试。
  2. 此工具有一个默认的配置文件,为 excel 表,通过此表可以设置板子的 DDR 信息,最后生成一个.inc 结尾的 DDR 初始化脚本文件。这个.inc 文件就包含了 DDR 的初始化信息,一般都是寄存器地址和对应的寄存器值。
  3. 此工具会加载.inc 表里面的 DDR 初始化信息,然后通过 USB OTG 接口向板子下载DDR 相关的测试代码,包括初始化代码。
  4. 对此工具进行简单的设置,即可开始 DDR 测试,一般要先做校准,因为不同的 PCB其结构肯定不同,必须要做一次校准,校准完成以后会得到两个寄存器对应的校准值,我们需要用这个新的校准值来重新初始化 DDR。
  5. 此工具可以测试板子的 DDR 超频性能,一般认为 DDR 能够以超过标准工作频率10%~20%稳定工作的话就认定此硬件 DDR 走线正常。
  6. 此工具也可以对 DDR 进行 12 小时的压力测试。

安装

安装ddr_stress_tester,如图:

安装完成以后就会在此目录下生成一个名为 ddr_stress_tester_v2.90 的文件夹,此文件夹就是 DDR 测试软件,进入到此文件夹中,里面的文件如图:

DDR_Tester.exe 就是我们稍后要使用的 DDR 测试软件。

配置

配置 DDR3L,生成初始化脚本。

将I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 文件拷贝到 ddr_stress_testr 软件安装目录中:

.MX6UL_DDR3_Script_Aid_V0.02.xlsx就是NXP为I.MX6UL编写的DDR3配置excel表,打开 I.MX6UL_DDR3_Script_Aid_V0.02.xlsx:

  • Readme 选项卡,此选项卡是帮助信息,告诉用户此文件如何使用。
  • Register Configuration 选项卡,顾名思义,此选项卡用于完成寄存器配置,也就是配置DDR3,此选项卡是我们重点要讲解的。
  • RealView.inc 选项卡,当我们配置好 Register Configuration 选项卡以后, RealView.inc选项卡里面就保存着寄存器地址和对应的寄存器值。

我们需要另外新建一个后缀为.inc 的文件来保存 RealView.inc 中的初始化脚本内容, ddr_stress_testr 软件就是要使用此.inc 结尾的初始化脚本文件来初始化 DDR3。

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

  • Device Information:DDR3 芯片设备信息设置,需要根据所使用的 DDR3 芯片来设置。
  • System Information:设置 I.MX6UL/6ULL 相关属性。
  • SI Configuratin:信号完整性方面的配置,主要是一些信号线的阻抗设置,使用 NXP 的默认设置即可。

EMMC 核 心 板 (DDR3 型 号 为NT5CC256M16EP-EK),那么配置需要修改的地方如图:

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

可以看见,RealView.inc 就是生成的配置脚本,全部是“寄存器地址=寄存器值”这种形式。

但是,RealView.inc 不能直接用,我们需要新建一个以.inc 结尾的文件,名字随便自定义,比如名为“ALIENTEK_512MB”的.inc 文件,如图:

用 notepad++打开 ALIENTEK_512MB.inc 文件,然后将、 RealView.inc 里面的所有内容全部拷贝到 ALIENTEK_512MB.inc 文件中。

这就是DDR3 的配置文件 ALIENTEK_512MB.inc。我们可以使用此配置文件对正点原子 ALPHA 开发板的 DDR3 进行校准并进行超频测试了。

DDR3L 校准

用 DDR_Tester.exe 软件对正点原子 ALPAH 开发板的 DDR3L 进行校准,因为不同的 PCB 其走线不同,必须要进行校准,经过校准一会 DDR3L 就会工作到最佳状态。

DDR_Tester 软件通过 USB OTG 线将测试程序下载到开发板中,因此首先需要使用 USB OTG 线将开发板和电脑连接起来:

双击“DDR_Tester.exe”,打开测试软件,如图:

点 击  “ Load init Script ” 加 载 前 面 已 经 生 成 的 初 始 化 脚 本 文 件ALIENTEK_512MB.inc, 注意,不能有中文路径,否则加载可能会失败!

ALIENTEK_512MB.inc 文件加载成功,还需要对 DDR Test Tool 软件进行设置:

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

输出了一些关于板子的信息,比如 SOC 型号、工作频率、 DDR 配置信息等等。

DDR Test Tool 工具有三个测试项: DDR Calibration、DDR Stess Test 和 32bit Memory Read/Write.

我们首先要做校准测试,因为不同的 PCB、不同的 DDR3L 芯片对信号的影响不同,必须要进行校准,然后用新的校准值重新初始化 DDR。

点击“Calibraton”按钮,如图:

点击“Calibration”按钮以后就会自动开始校准,最终会得到 Write leveling calibtarion、 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

得到了一些需要校准的寄存器对应的值,修 改 ALIENTEK_512MB.inc 文 件,其对应寄存器的值改为校准后的值。inc文件里找不到的寄存器可以不用修改。

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

DDR3L 超频测试

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

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

设置好起始频率为 400MHz,终止频率为 600MHz,设置好以后点击“Stress Test”开启超频测试:


 

超频测试完成以后结果如图:

正点原子的 ALPAH 开发板 EMMC 核心板 DDR3 最高可以超频到556MHz,当超频到 561MHz 的时候就失败了。

http://www.dtcms.com/a/273397.html

相关文章:

  • 数组和指针回顾,练习与解析
  • OSCP官方靶场-Solstice WP
  • 【第二节】ubuntu server配置静态IP
  • (思维)洛谷 P3081 USACO13MAR Hill Walk 题解
  • 网络安全基础概念以及虚拟环境的搭建
  • alpinelinux的网络配置
  • ZW3D 二次开发-创建六面体方框
  • 力扣面试150题--全排列
  • AOSP自启动拦截框架Intent Firewall
  • 反向传播notes
  • 敏捷测试中的质量闸门如何设置?
  • 位运算算法题
  • 第七讲:C++中的string类
  • 深度学习参数初始化方法详解及代码实现
  • 深度学习×第7卷:参数初始化与网络搭建——她第一次挑好初始的重量
  • ZW3D 二次开发-创建椭球体
  • 灰度发布策略制定方案时可以参考的几个维度
  • 递推+高精度加法 P1255 数楼梯
  • apt -y参数的含义
  • 计算机视觉 之 数字图像处理基础(一)
  • Kubernetes 1.23.6 kube-scheduler 默认打分和排序机制详解
  • 多商户商城系统源码选型指南:开源 vs 定制,哪种更适合?
  • 救回多年未用kubeadm搭建的kubernetes集群
  • 5. isaac sim4.2 教程-Core API-操作机械臂
  • 用黑盒测试与白盒测试,读懂专利审查的 “双重关卡”​​
  • K8S的CNI之calico插件升级至3.30.2
  • 深度学习中的 Seq2Seq 模型与注意力机制
  • 解释sync.WaitGroup的用途和工作原理。在什么情况下应该使用它?
  • 时间显示 蓝桥云课Java
  • Android ViewBinding 使用与封装教程​​