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,…...

使用Shell传参解决DataPhin中PySpark不支持中文的问题
使用Shell传参解决DataPhin中PySpark不支持中文的问题 背景 笔者开发PySpark任务时【别问为神马不用Java和Scala打Jar包的方式,PySpark不需要打包所以开发效率极高,早点搞完早点下班】,遇到一个令所有SQL Boy都很头疼的问题,那就…...

【CDH】cloudera manger 如何开启Debug 日志调试模式
前言 在安装 Cloudera Manger 时,遇到报错,需要开启Debug 日志级别来排查下问题原因。这里记录下 CM 如何开启 Debug 级别。 方法一:为整个服务启动DEBUG 如果 CM 无法启动,则可以为整个服务器启用 DEBUG 或 TRACE。 警告&…...

SQL Server 用户授权与回收
创建xxbbbb账号,账号可以在Company_report20221019.dbo.qfacccmprf表中进行select、 insert,update,delete --创建登录账号 create login xxbbbb with password12345#---创建用户 use Company_report20221019 create user xxbbbb for login xxbbbb---将qfacccmprf表…...

电脑出现乱码的原因以及解决方法
在日常使用电脑的过程中,经常会遇到电脑出现乱码,那么为什么会出现乱码呢?出现乱码又该怎么解决呢?下面我们一起来了解一下。 出现乱码的原因 系统乱码:主要是Windows中显示乱码,比如菜单、桌面、启动界面…...

网络工程师笔记
第一天: 编码就是转化为数字信号;调制就是转化为模拟信号; 调制: 1、基带调制(不改变频率,只改变波形) 2、带通调制(迁移到较高的频段进行传输) (1&…...

linux用户添加用户组与目录切换用户组的操作记录
linux用户添加到多个组 usermod -G groupname username (这种会把用户从其他组中去掉,只属于该组) 如:usermod -G git git (git只属于git组) usermod -a -G groupname username (把用户添加到这个组,之前所属组不影响) 如:usermod…...

在CentOS 7上使用二进制文件安装单节点Kubernetes的详细步骤:
确保您的系统已经安装了Docker和etcd。如果没有,请按照以下命令安装它们: yum install docker etcd 启动Docker服务并将其设置为开机自启: systemctl start docker systemctl enable docker 下载所需的Kubernetes二进制文件。您可以从以下网…...

iCollections for mac 8.0.6.80608 保持Mac桌面的整洁
应用介绍 iCollections允许您在桌面上创建区域,以便您可以排序和排列图标。这可以帮助您将相关项目保持在一起,以便文件(图片,文档,屏幕截图,应用程序等)井井有条且易于查找。 小麦测试可以按照…...

学习HM微博项目第8天
步骤:发微博01-导航栏内容 -> 发微博02-自定义TextView -> 发微博03-完善TextView和发送微博按钮 -> 发微博04-显示工具条 -> 发微博05-封装工具条和相册 -> 发微博06-发送微博 发微博01-导航栏内容 APP的演示操作: 从APP的演示操作中可…...

十五、存储过程与函数
一、存储过程概述 1、简介 含义:存储过程的英文是 Stored Procedure 。它的思想很简单,就是一组经过 预先编译 的 SQL 语句的封装 执行过程:存储过程预先存储在 MySQL 服务器上,需要执行的时候,客户端只需要向服务器…...