I.MX6U 裸机开发20. DDR3 内存知识

I.MX6U 裸机开发20. DDR3 内存知识

一、DDR3内存简介

1. DDR发展历程

SRAM

SRAM(Static Random - Access Memory)即静态随机存取存储器,是一种半导体存储器。

SRAM 存储单元通常由 6 个晶体管组成(CMOS 工艺)。这种结构可以在不进行刷新操作的情况下保持数据的存储状态,容量小、价格高、速度快。

在传统的51单片机、STM32中,会有芯片内部RAM,即SRAM。在高级一点单片机,可以使用外扩RAM。

以 IS62WV51216 SRAM为例,这是一个1M Byte存储器,从数据手册可以看到其功能框图:

其中:

  • A0-A18:19根地址线
  • I/O0-7, I/O8-15:数据低字节、高字节
  • CS:片选
  • OE:读使能
  • WE:写使能
  • UB:低电平:访问高字节
  • LB:低平平:访问低字节

SDRAM

SDRAM(Synchronous Dynamic Random Access Memory)是一种同步动态随机存取存储器,SDRAM需要时钟线,常见的频率有100MHz、133MHz、166MHz、200MHz,相对于SRAM价格低、速率低。

以W9825G6KH为例,其功能框图:

引脚介绍:

  • CLK:时钟线

  • CKE:时钟使能信号,SRAM没有CKE。

  • CS:片选

  • RAS:行选通信号

  • CAS:列选通信号

  • WE:写使能信号

  • A10:地址线&自动预充电

  • A0~A12:地址线

  • BS0:BANK0选择信号线

  • BS1:BANK1选择信号线

  • D0~D15:数据线

    其容量:
    行 2 13 ∗ 列 2 9 ∗ 4 个 B a n k ∗ 2 字节位宽 = 32 M B y t e 行 2^{13} * 列 2{^9} * 4个Bank * 2字节位宽 = 32MByte 行213∗列29∗4个Bank∗2字节位宽=32MByte

DDR1

DDR1由三星公司于1996年提出,1998年12月,联合电子设备工程委员会(JEDEC)正式确定了DDR内存与DDR内存部件的规范。它是在SDRAM内存基础上发展而来,其诞生是为了对抗Intel提倡的Rambus标准.

DDR1沿用了SDRAM的生产体系,但采用了更加先进的双倍数据速度技术,即DDR1内存在每个时钟周期预取2位数据,这样DDR1在每个时钟周期的上升沿和下降沿都进行数据传输,使得数据传输速率是传统SDRAM的两倍。

DDR1初始频率为200MHz,后来发展到DDR-266、DDR-333和主流的DDR-400,数据传输速度相比SDRAM有了显著提升 。从外形上看,DDR1内存条有184个引脚,金手指中有一个缺口,而SDRAM内存条是168个引脚,并且有两个缺口。

DDR1的容量范围,最初只有单通道,容量从128MB增加到1GB。

DDR2

DDR2是由JEDEC进行开发的一种新内存技术标准,于2003年正式发布。DDR2内存均采用FBGA封装形式,拥有240个引脚,电气性能与散热性更好,有利于内存的稳定工作与未来频率的发展。与DDR1相比,DDR2的预读取能力是DDR1的两倍,在每个时钟脉冲周期内都能以四倍外部总线的速度读/写数据,并且能够以内部控制总线四倍的速度运行。

DDR2采用1.8V电压,相比DDR1的2.5V降低了功耗。

DDR2容量从256MB起步,最大支持到4GB。

DDR3

DDR3是一种使用SSTL15接口的计算机内存规格,于2007年发布。与DDR2相比,它拥有更高的运行效能与更低的电压,同时更省电、传输效率更快。

DDR3突发长度增加了4bit突发突变模式,能够提供更灵活的突发传输控制;寻址时序的CL周期有所提高,并提供了0CL-1和CL-2三种AL选项,同时还新增加了写入延迟这一时序参数;专门准备了一个引脚实现重置功能,能够让DDR3内存停止所有操作,并切换至最少量活动状态,从而节约电力;还新增了ZQ引脚,能够对导通电阻和ODT电阻进行重新校准.

DDR3核心电压降低到1.5V,预取从4-bit变成了8-bit,提供了更高的带宽,频率从800MHz起步,一般能买到的最高频率为2400MHz,常见的容量是512MB到8GB,也有单条16GB的DDR3内存,但较为稀少。

正点原子的开发板上使用的是 NT5CC256M16ER-EK,其接口结构与其它厂家相同规格芯片 相同,下图是MT41K256M16结构框图:

其引脚说明:

  • A0~A14:地址线,行线15根, A0 ~ A9 10列。
  • BA[2:0]:BANK选择线,共8个BANK。

容量 : 2 15 ∗ 2 10 ∗ 8 ∗ 2 = 512 M B y t e 2^{15} * 2^{10} * 8 * 2 = 512MByte 215∗210∗8∗2=512MByte

DDR4

2011年1月4日三星电子发布了第一款DDR4标准的内存条,首批样品采用30nm级工艺制造而成,2014年开始广泛应用。

DDR4采用16bit的预取机制,在同样内核频率下理论速度是DDR3的两倍;采用更可靠的传输规范,进一步提升数据的可靠性;工作电压降为1.2V。

DDR4 频率范围从DDR4-1600到DDR4-3200,理论上每根DIMM模块能达到512GiB的容量,而DDR3每个DIMM模块的理论最大容量仅128GiB。

DDR5

2020年开始投入市场,带来了全新的架构,改进的功能使实际带宽相比DDR4有了显著提高,即使在3200MT/s和4800MT/s速度开始,与DDR4-3200相比,实际带宽将高出87%。引入了on-die ECC,提高了数据的可靠性和准确性。

DDR5工作电压进一步降低至1.1V,并支持更高的频率和更大的单条内存容量,初始频率为4800MHz,单条内存可以达到128GB,使用2DPC的主板时,总内存容量可达512GB。

2. 开发板资源

在开发板上有 DDR3 的RAM芯片,正点原子提供的核心板有256M和512M两款内存规格的开发板,对于ARM A系列芯片来说,要运行的程序是要加截到内存中运行。

本系列文章基于正点原子 I.MX6U-MINI开发板,使用的内存是 : NT5CC256M16ER-EK。

3. DDR3的时间参数

1. 传输速率

  1. 基本概念

    • DDR3在一个时钟周期的上升沿和下降沿都可以传输数据,这就是所谓的"双倍数据速率"。它的传输速率通常用每秒传输的数据量来衡量,单位有MT/s(兆次传输每秒)或Mbps(兆位每秒)。1MT/s = 8Mbps,因为1字节(Byte)等于8位(bit)。
  2. 速率标准

    • DDR3内存的初始标准传输速率从800MT/s开始,对应的带宽为6.4GB/s(800MT/s×64bit/8)。这里的64bit是DDR3内存的数据总线宽度。
    • 之后还有更高的标准,如1066MT/s、1333MT/s、1600MT/s等。以1600MT/s为例,其带宽为12.8GB/s(1600MT/s×64bit/8)。这些不同的传输速率可以满足不同性能需求的计算机系统。
    • 更高端的DDR3甚至可以达到2133MT/s,带宽可达17GB/s左右,能够为高性能计算(如游戏电脑、工作站等)提供更快速的数据传输,让CPU能更快地读取和写入内存中的数据,从而提升系统的整体性能。

本系列文章使用的开发板的内存支持速率如下图所示:

不同的速率的时序有所不同。

2. tRCD

tRCD(RAS to CAS Delay)主要用于描述内存工作过程中的延迟时间。

  1. 工作原理背景
    • 在计算机内存系统中,数据的读取和写入是一个复杂的过程。当内存控制器(通常位于CPU或芯片组中)发出读取或写入命令后,内存芯片需要按照一定的顺序和时间间隔来执行这些操作。tRCD主要涉及从行地址选通(RAS - Row Address Strobe)到列地址选通(CAS - Column Address Strobe)之间的延迟。
    • 以读取数据为例,首先内存控制器要激活某一行(通过RAS信号),然后才能指定列地址来读取具体的数据单元。tRCD就是这个行激活和列选择之间的延迟时间。
  2. 具体含义
    • tRCD以时钟周期(Clock Cycle)为单位进行衡量。例如,如果内存的时钟频率是100MHz,一个时钟周期就是10ns(纳秒)。假设tRCD的值为3个时钟周期,那么在这种情况下,tRCD的实际延迟时间就是30ns。
    • 这个延迟时间对于内存性能有重要影响。较小的tRCD值意味着内存能够更快地从行激活状态转换到列选择状态,从而可以更快地读取或写入数据。相反,较大的tRCD值会导致内存操作的延迟增加,降低数据访问速度。

3. CL 参数

CL是CAS Latency的缩写,即列选通潜伏期,具体来说,CL是指从内存控制器发出读命令到内存开始输出第一个数据之间的延迟时间,以时钟周期为单位。

作用

  • 衡量内存性能:CL值越小,内存响应速度越快,数据传输延迟越低,内存性能也就越高。比如在相同内存主频下,CL值为5的DDR3内存性能要优于CL值为7的内存。
  • 影响系统整体性能:内存的CL参数与CPU的配合对系统性能有重要影响。如果CL值过大,会导致CPU等待数据从内存中传输的时间过长,从而降低CPU的执行效率,影响整个系统的运行速度。

取值范围

DDR3内存的CL值一般在5-11之间,常见的有7、8、9、10、11等。如DDR3-1066的CL值通常为7,DDR3-1333的CL值一般为8,DDR3-1600的CL值常为9。

工作原理

在内存读写操作中,当内存控制器发出行地址激活命令后,需要经过一段时间的延迟,这段延迟包含行地址到列地址的延迟(TRCD)和列选通潜伏期(CL)等。CL是其中关键的一部分,它决定了从列地址选通到数据开始输出的时间间隔。以DDR3-1600 CL=9为例,在内存接收到读命令后,经过9个时钟周期,才会将第一个数据输出到数据总线上.

4. tRC参数

DDR3的tRC参数是指同一bank内两个ACTIVE命令之间的最小延迟周期,也可以是ACTIVE命令到REFRESH命令之间的周期。tRC参数用于限制对同一bank的访问频率,确保内存操作的稳定性和数据的正确传输。它规定了在同一bank内,两次激活操作之间必须间隔的最短时间。

原理

  • DDR3内存的存储单元是以bank为单位进行组织的,每个bank包含多个行和列。当对内存进行读写操作时,需要先激活相应的bank和行,然后才能进行列地址的选择和数据传输.
  • 如果在tRC时间内对同一bank再次发出ACTIVE命令,可能会导致数据冲突、信号干扰等问题,从而影响内存的正常工作。因此,tRC参数的设置是为了给内存足够的时间来完成当前操作,并为下一次操作做好准备。

单位与取值

  • tRC的单位通常是纳秒(ns)或时钟周期数。在DDR3的数据手册中,一般会给出tRC的具体数值,例如NT5CC256M16EP-EK的tRC值为47.91ns.
  • 不同频率和型号的DDR3内存,其tRC参数的取值可能会有所不同。通常情况下,tRC的取值范围在几十到上百纳秒之间,具体数值取决于内存的规格和性能等级 。

5. tRAS

DDR3的tRAS(Row Active Time to Precharge Delay)是指从ACTIVE命令到PRECHARGE命令之间的最小时间间隔,即行激活时间到预充电延迟 。它表示在DDR3内存中,从行地址被激活(ACTIVE命令发出)开始,到可以对该行发出预充电命令(PRECHARGE命令)之间所必须经过的最短时间。

  • 当内存控制器发出ACTIVE命令后,相应的行被激活,数据的读取或写入操作会在该行上进行。在操作完成后,需要经过tRAS时间才能对该行进行预充电操作,以便为下一次的访问做好准备。如果在tRAS时间未结束时就对该行进行预充电,可能会导致数据丢失或损坏,因为此时该行的数据可能还处于不稳定状态。

重要性及作用

  • 确保数据完整性:tRAS的存在是为了给内存足够的时间来完成数据的传输和稳定存储。在数据读写操作期间,内存芯片内部的各种电路和存储单元需要一定的时间来处理和保持数据,如果过早地进行预充电操作,可能会干扰数据的稳定存储,从而导致数据错误.
  • 影响内存性能:tRAS的值会影响内存的整体性能。一般来说,tRAS时间越短,内存的访问速度就越快,因为可以更快地进入下一次的行激活和数据传输操作。然而,如果tRAS设置得过短,可能会导致数据不稳定,从而引发系统错误或性能下降。相反,如果tRAS设置得过长,虽然可以保证数据的稳定性,但会增加内存的访问延迟,降低内存的带宽利用率.

二、I.MX6U MMDC 控制器

I.MX6U的MMDC控制器是一款多模式DDR控制器,主要负责管理和控制与DDR内存的交互,以实现高效的数据存储和读取操作,满足系统对内存的需求。在《IMX6ULL 参考手册》 P2203,有对其详细介绍。

1. MMDC简介

(1)主要组成部分

  • MMDC CORE 内核:内核承担着通过AXI接口与系统进行通信的重要任务,负责生成DDR命令,并对这些命令进行优化处理,同时还管理着读/写数据路径,确保数据能够准确、高效地在系统与内存之间传输。
  • MMDC PHY:PHY则专注于时序调整和校准工作。它运用特殊的校准机制,保障数据能够在400MHz的时钟频率下被准确捕获,从而保证了数据传输的稳定性和可靠性。

(2)支持的存储类型及特性

  • 支持的存储类型:MMDC支持16位宽的DDR3/DDR3L以及LPDDR2,不支持LPDDR1、MDDR和DDR2等其他类型的内存。
  • 存储容量范围:能够支持单片256Mbit~8Gbit容量的DDR内存,其列地址范围为8-12位,行地址范围为11-16位,并且配备2个片选信号,可通过配置CS0、CS1来达到4Gbyte的地址空间.
  • 突发访问支持:对于DDR3,最大支持8bit的突发访问;而对于LPDDR2则最大支持4bit的突发访问。

(3)时钟频率与数据速率

  • MMDC的最大频率为400MHz,对应的数据速率能够达到800MT/S,为系统提供了高速的数据传输通道,满足了处理器对内存数据快速读写的要求。

(4)校准程序

  • MMDC支持各种校准程序,包括自动和手动运行方式,还支持ZQ校准外部DDR设备、校准DDR I/O引脚以及校准DDR驱动能力等,通过这些校准操作,可以确保内存系统的稳定性和性能表现。

(5)其他特性

  • 优先级与优化机制:支持实时优先级,并具备不同优先级的重新排序机制,能够对实时、延时敏感和正常优先级的任务进行合理调度。同时,还针对页面碰撞错过、连续读写访问等情况进行了优化,进一步提高了内存访问效率。
  • 深度请求队列与预测功能:支持深度读写请求队列,能够更好地管理和调度内存访问请求,并且还支持bank预测以及bank交叉等功能,提升了内存系统的并行处理能力和整体性能。
  • 特殊访问优化:在ddr3模式下的非对齐换行访问情况下,也有特殊优化措施,确保数据能够准确、快速地传输,减少因数据对齐问题而导致的性能损失。

2. 时钟源

时钟源我们使用PLL2-PFD2=396MHz,MMDC_CLK_ROOT最大支持 396MHz。

  • CBDMR[PERIPH2_CLK2_SEL](bit22,bit21),设置为01,设置PLL_PFD2作为 pre_periph2时钟源;
  • CBCDR[PERIPH2_CLK_SEL] (bit26),设置为0,设置PLL2作为 MMDC 时钟源;
  • CBCDR[PABRIC_MMDC_PODF] ,(bit5-3),设置为0,1分频。

3. 开发板原理图

三、DDR3初始化与测试

1. ddr_stres_tester简介

ddr_stress_tester_v2.90 是NXP提供的一个DDR压测工具,在本文对应的开源仓库中已经放了这个工具。

使用方法:

xlsx 文件

打开 I.MX6UL_DDR3_Script_Aid_V0.02.xlsx 文件:

复制生成的 ReView.inc 放到软件目录里。

2. 下载配置信息

打开 DDR_Tester.exe,加载初始化脚本 :

开发板需要外置供电,使用 USB_OTG 连接电脑,启动方式拨码开关选择 USB 启动,另外要把SD卡取出。

点击Download,有以下输出:

(1)直接进行超频测试

填写频率 400MHz~600MHz, 输出测试失败。这是因为没在进行校准操作。

(2)校准

校准内容如下:

c 复制代码
MMDC registers updated from calibration 

   Write leveling calibration
   MMDC_MPWLDECTRL0 ch0 (0x021b080c) = 0x00000000
   MMDC_MPWLDECTRL1 ch0 (0x021b0810) = 0x001F001F

   Read DQS Gating calibration
   MPDGCTRL0 PHY0 (0x021b083c) = 0x013C013C
   MPDGCTRL1 PHY0 (0x021b0840) = 0x00000000

   Read calibration
   MPRDDLCTL PHY0 (0x021b0848) = 0x40403236

   Write calibration
   MPWRDLCTL PHY0 (0x021b0850) = 0x4040382E


Success: DDR calibration completed!!!

根据校准值,对 ALIENTEK_512MB.inc 进行修改,没找到的不用改,下面是修改示例:

修改后保存文件,重新打开 DDR_Tester.exe。

(3)超频测试

一般在400MHz基础能超频20%,硬件开发板设计就算正常。

四、DCD数据

1. 打开 《【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.81.pdf》

在P342,如下图所示:

可以看到 CCGR0地址是在 0x020C4068,

打开 imxdownload.h , 可以找到该位置:

DDR相关的初始化,位置是在0X020E04B4:

而这个地址值,与 ALIENTEK_512MB.inc里 这个位置相对应:

直到位置:

所以imxdownload里的 dcd表的值,要与校准后的值相对应 。

相关推荐
代码游侠8 小时前
ARM开发——阶段问题综述(二)
运维·arm开发·笔记·单片机·嵌入式硬件·学习
DLGXY9 小时前
STM32——旋转编码器计次(七)
stm32·单片机·嵌入式硬件
羽获飞9 小时前
从零开始学嵌入式之STM32——3.使用寄存器点亮一盏LED灯
单片机·嵌入式硬件
浩子智控10 小时前
商业航天计算机抗辐射设计
单片机·嵌入式硬件
独处东汉13 小时前
freertos开发空气检测仪之输入子系统结构体设计
数据结构·人工智能·stm32·单片机·嵌入式硬件·算法
czy878747514 小时前
机智云 MCU OTA可以对MCU程序进行无线远程升级。
单片机·嵌入式硬件
A9better16 小时前
嵌入式开发学习日志52——二值与计数信号量
单片机·嵌入式硬件·学习
想放学的刺客18 小时前
单片机嵌入式试题(第25)嵌入式系统可靠性设计与外设驱动异常处理
stm32·单片机·嵌入式硬件·mcu·物联网
wotaifuzao18 小时前
STM32+FreeRTOS 长期可维护架构设计(事件驱动篇)-- 告别“屎山”代码
c语言·stm32·嵌入式硬件·freertos·状态机·事件驱动·嵌入式架构
淘晶驰AK18 小时前
大学如何自学嵌入式开发?
单片机·嵌入式硬件