IMX6ULL学习笔记(21)——MMDC接口使用(DDR3测试)
一、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测试)
一、MMDC简介 MMDC 接口与 STM32 的 FSMC 接口类似,只不过 MMDC 接口专用于外接 DDR,并且 MMDC 外部引脚不复用。MMDC 是一个多模的 DDR 控制器,可以连接 16 位宽的 DDR3/DDR3L、16 位宽的 LPDDR2。 MMDC 是一个可配置、高性能的 DDR 控制器。…...
机器学习——无监督学习
机器学习的分类一般分为下面几种类别:监督学习( supervised Learning )无监督学习( Unsupervised Learning )强化学习( Reinforcement Learning,增强学习)半监督学习( Semi-supervised Learning )深度学习(Deep Learning)Python Scikit-learn. http: // …...

python+opencv生成较真实的车牌号码图片
本文参考github代码:https://github.com/loveandhope/license-plate-generator 效果: 一、代码目录结构: background目录下存放各种背景图片 font目录下存放车牌中文、字符的ttf字体 images目录下存放蓝色底牌、新能源绿色底牌、污渍&#…...
3.26周报
周报 代码行数: 周一 581 周二 601 周三 615 周四 591 周五 570 周六 561 周日 577 遇到的问题: 项目启动很慢,要将近5分钟才能开启项目,对开发造成很大困扰。 断点打在奇怪的地方,造成启动缓慢。断点…...
从0开始学python -69
Python math 模块 Python math 模块提供了许多对浮点数的数学运算函数。 math 模块下的函数,返回值均为浮点数,除非另有明确说明。 如果你需要计算复数,请使用 cmath 模块中的同名函数。 要使用 math 函数必须先导入: import…...
HashMap中HashCode的实现原理
代码 static final int hash(Object key) {int h;return (key null) ? 0 : (h key.hashCode()) ^ (h >>> 16);}1. h >>> 16 是什么,有什么用? h是hashcode。h >>> 16是用来取出h的高16,(>>>是无符号右移) 如下展…...

Redis —Set、ZSet介绍和应用场景
Set 概念 Redis的set是一个不重复、无序并唯一的键值集合。(方便管理无序集合)它支持交集、并集、差集等等 set和list区别 List 可以存储重复元素,Set 只能存储非重复元素;List 是按照元素的先后顺序存储元素的,而…...

【产品人卫朋】内容运营:文章点击量少的可怜,该怎么做?
今天来谈谈内容运营这个话题。 随着自媒体进入视播时代,也就是短视频的时代。 无论你打开任何一个短视频应用,每一个主题下面都会有成千上万个视频。 最为致命的是,大家停留的时间也越来越短了。 如果你不能在2秒的时间内吸引眼球,…...

【K8S系列】深入解析无状态服务
目录 序言 1. 无服务介绍 1.1 优点 1.2 使用场景 1.3 资源类型 1.4 总结 2 使用介绍 2.1 Deployment 使用场景: 2.2 ReplicaSet 使用场景 2.3 pod Pod 资源定义示例 2.4 service 创建一个Deployment: 创建一个Service: 总结…...
Node基础--命令窗口
1.Windows命令行窗口(叫做:小黑屏、cmd窗口、终端、shell) (1).如何打开命令行窗口 开始菜单 -- 运行 --- cmd --- enter win R -- cmd --- enter (2).cmd窗口常用指令 dir 列出当前目录下的所有文件 cd 目录名 进入到指定的目录 md 目录名 …...
一些有趣的项目
一个支持交互的展示卷积过程的可视化工具 https://github.com/pwwang/cnn-convoluter 一款简单易用基于 Python scikit 的推荐系统https://github.com/NicolasHug/Surprise 一个封装了 7 种启发式算法的 Python 代码库。分别是:差分进化算法、遗传算法、粒子群算法…...

教你精通JavaSE语法之第六章、数组的使用
一、数组的定义与使用 😁1.1数组的概念📌数组:可以看成是相同类型元素的一个集合。在内存中是一段连续的空间,可以同来存储同种数据类型的多个值。但是数组容器在存储数据的时候,需要结合隐式转换考虑。比如࿱…...

基于51单片机AT89C51的小型音乐喷泉控制系统设计
wx供重浩:创享日记 对话框发送:单片机小喷泉 获取完整无水印论文报告(内含电路原理图和程序) 根据目前音乐喷泉的发展现状,介绍了一个以AT89C51单片机为核心的小型音乐喷泉控制系统。给出了一个简洁的单片机控制电路&a…...

【Nacos】Nacos原理详解(注册中心,配置中心)
文章目录一、背景二、CAP理论三、什么是NacosNacos 服务注册需要具备的能力:Nacos的实现原理:四、Nacos原理Nacos 服务注册与订阅的完整流程服务领域模型五、注册中心原理六、配置中心原理七、Nacos 的关键特性包括:八、 面试分析一、背景 服务注册中心…...

蓝桥杯刷题冲刺 | 倒计时11天
作者:指针不指南吗 专栏:蓝桥杯倒计时冲刺 🐾马上就要蓝桥杯了,最后的这几天尤为重要,不可懈怠哦🐾 文章目录1.质因子2.蓝桥王国1.质因子 题目 链接: 1545. 质因子 - AcWing题库 给定一个整数 N…...

【新】(2023Q2模拟题JAVA)华为OD机试 - 时间格式化
最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:时间格式化 题目 运维工程师…...

MySQL函数
函数 MySQL函数与其存储过程类似,是一系列完成某种功能的SQL语句。函数一旦定义后,与过程一样是存储在MySQL的服务器上。调用函数就是一次性执行这些语句。所以函数可以降低语句重复。 MySQL本身提供了内置函数,这些函数的存在给我们日常的开…...

【Linux系统】开发工具(下) {调试器gdb,自动化构建工具make/Makefile,多文件编译,代码管理平台git}
【Linux系统】开发工具(上) {软件包管理器yum,更新yum源,文本编辑器vim,vim的三种基本模式,vim指令集,代码编译器gcc/g} 四、Linux调试器:gdb 4.1 debug模式 程序的编译模式有两种,debug模式和…...
线性代数——行列式
文章目录版权声明排列行列式行列式的由来行列式的概念行列式的性质重要公式克拉默法则补充知识版权声明 本文大部分内容皆来自李永乐老师考研教材和视频课。 排列 由1,2,…,n1,2,\ldots,n1,2,…,n组成的有序数组称为一个nnn阶排列,通常使用j1j2…jnj_1j_2\ldots …...

Spring注解-Spring-boot-SpingAOP
Spring各个模块 Test 对应spring-test.jar. Spring提供的测试工具, 可以整合JUnit测试, 简化测试环节. Core Container Spring的核心组件, 包含了Spring框架最基本的支撑. Beans, 对应spring-beans.jar. Spring进行对象管理时依赖的jar包. Core, 对应spring-core.jar,…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...

JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

嵌入式学习笔记DAY33(网络编程——TCP)
一、网络架构 C/S (client/server 客户端/服务器):由客户端和服务器端两个部分组成。客户端通常是用户使用的应用程序,负责提供用户界面和交互逻辑 ,接收用户输入,向服务器发送请求,并展示服务…...
现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?
现有的 Redis 分布式锁库(如 Redisson)相比于开发者自己基于 Redis 命令(如 SETNX, EXPIRE, DEL)手动实现分布式锁,提供了巨大的便利性和健壮性。主要体现在以下几个方面: 原子性保证 (Atomicity)ÿ…...

计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
鸿蒙(HarmonyOS5)实现跳一跳小游戏
下面我将介绍如何使用鸿蒙的ArkUI框架,实现一个简单的跳一跳小游戏。 1. 项目结构 src/main/ets/ ├── MainAbility │ ├── pages │ │ ├── Index.ets // 主页面 │ │ └── GamePage.ets // 游戏页面 │ └── model │ …...

【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...

前端开发者常用网站
Can I use网站:一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use:Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站:MDN JavaScript权威网站:JavaScript | MDN...