LINUX-I.MX6U从零开始之1.10--DDR3

目录

一,啥是DDR3

I.MX6U-ALPHA 开发板上带有一个 256MB/512MB 的 DDR3 内存芯片。 I.MX6U支持 LPDDR2、 LPDDR3/DDR3, I.MX6U-ALPHA开发板上选择的是 DDR3。

1.1 RAM 随机存储器。

可以随时进行读写操作,速度很快,掉电以后数据会丢失。
内存条、SRAM、SDRAM、DDR 等都是 RAM。
保存程序数据、中间结果,如:存储变量。

1.2 ROM 只读存储器。

可以进行写操作的!只是写起来比较麻烦,要先发送要先进行擦除,然后在发送要写的地址或扇区,最后才是要写入的数据。如Flash。

256MB/512MB 的 DDR3 就是 RAM,而 512MB NANF Flash 或 8GB EMMC 就是 ROM。

1.3 SRAM 静态随机存储器。

STM32F103/F407 内部 RAM 比较小,在一些比较耗费内存的应用中会出现内存捉紧的情况,比如 emWin 做 UI 界面。基本都会外扩一个512KB 或 1MB 的 SRAM 。

1.4 SDRAM 同步动态随机存储器。

“同步”的意思是 SDRAM 工作需要时钟线, “动态” 的意思是 SDRAM 中的数据需要不断的刷新来保证数据不会丢失, “随机”的意思就是可以读写任意地址的数据。

与 SRAM 相比,SDRAM 集成度高、功耗低、成本低、适合做大容量存储,但是需要定时刷新来保证数据不会丢失。因此 SDRAM 适合用来做内存条,SRAM 适合做高速缓存或 MCU内部的 RAM。

SDRAM 目前已经发展到了第四代,分别为:SDRAM、DDR SDRAM、DDR2SDRAM、DDR3 SDRAM、DDR4 SDRAM。

STM32 开发板最常用的华邦W9825G6KH 。W9825G6KH 是一款 16 位宽(数据位为 16 位)、32MB 的 SDRAM、速度一般为 133MHz、166MHz 或 200MHz。
框图:
在这里插入图片描述

  1. 控制线
    CLK :时钟线,SDRAM 是同步动态随机存储器, “同步”的意思就是时钟,因此需要一根额外的时钟线,这是和 SRAM 最大的不同,SRAM 没有时钟线。
    CKE :时钟使能信号线,SRAM 没有 CKE 信号。
    CS :片选信号,这个和 SRAM 一样,都有片选信号。
    RAS:行选通信号,低电平有效,SDRAM 和 SRAM 的寻址方式不同,SDRAM 按照行、列来确定某个具体的存储区域。
    RAS 是行选通信号,表示要发送行地址.
    CAS :列选通信号,和 RAS 类似,低电平有效,选中以后就可以发送列地址了。
    WE :写使能信号,低电平有效。
  2. A10 地址线
    A10 地址线还有另外一个作用, A10 还控制着 Auto-precharge, 也就是预充电。
    SDRAM芯片内部会分为多个 BANK。SDRAM 在读写完成以后,如果要对同一个 BANK 中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行, 准备打开新行的操作就叫做预充电。一般 SDSRAM 都支持自动预充电的功能。
  3. 地址线
    对于 W9825G6KH 来说一共有 A0-A12,共 13 根地址线, SDRAM 寻址是按照行地址和列地址来访问的,因此这 A0~A12 包含了行地址和列地址。
    不同的 SDRAM 芯片,根据其位宽、容量等的不同,行列地址数是不同的,这个在 SDRAM 的数据手册里面会也清楚的。比如 W9825G6KH 的 A0-A8 是列地址,一共 9 位列地址,A0~A12 是行地址,一共 13位,因此可寻址范围为:29*213=4194304B=4MB,W9825G6KH 为 16 位宽(2 个字节),因此还需要对 4MB 进行乘 2 处理, 得到 4*2=8MB, 但是 W9825G6KH 是一个 32MB 的 SDRAM 啊,为什么算出来只有 8MB, 仅仅为实际容量的 1/4。 8MB 只是一个 BANK 的容量,W9825G6KH 一共有 4 个 BANK。
  4. BANK 选择线
    BS0 和 BS1 是 BANK 选择信号线,单一的 BANK 会带来严重的寻址冲突, 减低内存访问效率。
    图中的⑤就是 W9825G6KH 就是 4 个 BANK 示意图,每个 SDRAM数据手册里面都会写清楚自己是几BANK。 既然有4个BANK, 那么在访问的时候就需要告诉SDRAM, 我们现在需要访问哪个BANK,BS0 和 BS1 就是为此而生的, 4 个 BANK 刚好 2 根线, 如果是 8 个 BANK 的话就需要三根线,也就是 BS0~BS2。BS0、BS1 这两个线也是 SRAM 所没有的。
  5. BANK 区域
    这部分就是 W9825G6KH 的 4 个 BANK 区域。这个概念也是 SRAM 所没有的。
  6. 数据线
    W9825G6KH 是 16 位宽的 SDRAM,因此有 16 根数据线,DQ0~DQ15,不同的位宽其数据线数量不同,这个和 SRAM 是一样的。
  7. 高低字节选择
    W9825G6KH 是一个 16 位的 SDRAM,因此就分为低字节数据和高字节数据,LDQM 和
    UDQM 就是低字节和高字节选择信号,这个也和 SRAM 一样。
1.5 DDR->双倍速率 SDRAM

DDR 内存是 SDRAM 的升级版本,SDRAM 分为 SDR SDRAM、DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM。
SDRAM 在一个 CLK 周期传输一次数据.
DDR 在一个 CLK 周期传输两次数据,也就是在上升沿和下降沿各传输一次数据,这个概念叫做预取(prefetch),相当于DDR 的预取为 2bit,因此DDR 的速度直接加倍!
DDR2 在 DDR 基础上进一步增加预取(prefetch),增加到了 4bit,相当于比 DDR 多读取一倍的数据.
DDR3 在 DDR2 的基础上将预取(prefetch)提高到 8bit,因此又获得了比 DDR2 高一倍的传输速率.

I.MX6U-ALPHA 开发板上接了一个 256MB/512MB 的 DDR3L,16 位宽,型号为NT5CC128M16JR/MT5CC256M16EP,nanya 公司出品的,分为对应 256MB 和 512MB 容量。EMMC 核心板上用的 512MB 容量的 DDR3L, NAND 核心板上用的 256MB 容量的 DDR3L。(我的是EMMC)

DDR3结构框图
DDR3结构框图

  1. 控制线
    ODT:片上终端使能,ODT 使能和禁止片内终端电阻。
    ZQ:输出驱动校准的外部参考引脚,此引脚应该外接一个 240 欧的电阻到 VSSQ 上,一般直接接地。
    RESET :复位引脚,低电平有效。
    CKE :时钟使能引脚。
    A12 :A12 是地址引脚,但是有也有另外一个功能,因此也叫做 BC 引脚,A12 会在 READ和 WRITE 命令期间被采样,以决定 burst chop 是否会被执行。
    CK 和 CK# :时钟信号,DDR3 的时钟线是差分时钟线,所有的控制和地址信号都会在 CK对的上升沿和 CK#的下降沿交叉处被采集。
    CS#:片选信号,低电平有效。
    RAS# 、CAS#和 和 WE#:行选通信号、列选通信号和写使能信号。
  2. 地址线
    A[14:0]为地址线,A0-A14,一共 15 根地址线,根据 NT5CC256M16ER-EK 的数据手册可知,列地址为 A0-A9,共 10 根,行地址为 A0~A14,共 15 根,因此一个 BANK 的大小就是210*2152=32MB2=64MB,根据图 23.1.4.2 可知一共有 8 个 BANK,因此 DDR3L 的容量就是 64*8=512MB。
  3. BANK 选择线
    一片 DDR3 有 8 个 BANK,因此需要 3 个线才能实现 8 个 BANK 的选择,BA0~BA2 就是用于完成 BANK 选择的。
  4. BANK 区域
    DDR3 一般都是 8 个 BANK 区域。
  5. 数据线
    因为是 16 位宽的,因此有 16 根数据线,分别为 DQ0~DQ15。
  6. 数据选通引脚
    DQS 和 DQS#是数据选通引脚, 为差分信号, 读的时候是输出, 写的时候是输入。 LDQS(有的叫做 DQSL)和 LDQS#(有的叫做 DQSL#)对应低字节, 也就是 DQ0-7, UDQS(有的叫做 DQSU)和 UDQS#(有的叫做 DQSU#),对应高字节,也就是 DQ8~15。
  7. 数据输入屏蔽引脚
    DM 是写数据收入屏蔽引脚。
二,购买DDR3,你要知道什么
2.1 传输速率

比如 1066MT/S、1600MT/S、1866MT/S 等,这个是首要考虑的,因为这个决定了 DDR3 内存的最高传输速率。

2.2 tRCD 参数

tRCD 全称是 RAS-to-CAS Delay,也就是行寻址到列寻址之间的延迟。DDR 的寻址流程是先指定 BANK 地址,然后在指定行地址,最后指定列地址确定最终要寻址的单元。BANK 地址和行地址是同时发出的,这个命令叫做“行激活”(Row Active)。行激活以后就发送列地址和具体的操作命令(读还是写),这两个是同时发出的,因此一般也用“读/写命令”表示列寻址。在行有效(行激活)到读写命令发出的这段时间间隔叫做 tRCD,如图所示:
在这里插入图片描述
一 般 DDR3 数 据 手 册 中 都 会 给 出 tRCD 的 时 间 值 , 比 如NT5CC256M16EP-EK 这个 DDR3,tRCD 参数如图 所示:
在这里插入图片描述
tRCD 为 13.91ns,这个我们在初始化 DDR3 的时候需要配置。有时候大家也会看到 “13-13-13” 之类的参数, 这个是用来描述 CL-tRCD-TRP 的, 如图所示:
在这里插入图片描述
NT5CC256M16ER-EK 这个 DDR3 的 CL-TRCD-TRP 时间参数为 “13-13-13” 。因此 tRCD=13,这里的 13 不是 ns 数,而是 CLK 时间数,表示 13 个 CLK 周期。

2.3 CL参数

当列地址发出以后就会触发数据传输,但是从数据从存储单元到内存芯片 IO 接口上还需要一段时间,这段时间就是非常著名的 CL(CAS Latency),也就是列地址选通潜伏期,如图所示:

CL 参数一般在 DDR3 的数据手册中可以找到, 比如 NT5CC256M16EP-EK 的 CL 值就是 13个时钟周期,一般 tRCD 和 CL 大小一样。

2.4 AL参数

在 DDR 的发展中,提出了一个前置 CAS 的概念,目的是为了解决 DDR 中的指令冲突,它允许 CAS 信号紧随着 RAS 发送,相当于将 DDR 中的 CAS 前置了。但是读/写操作并没有因此提前,依旧要保证足够的延迟/潜伏期,为此引入了 AL(Additive Latency),单位也是时钟周期数。AL+CL 组成了 RL(Read Latency),从 DDR2 开始还引入了写潜伏期 WL(Write Latency),
WL 表示写命令发出以后到第一笔数据写入的潜伏期。 引入 AL 以后的读时序如图所示:
在这里插入图片描述
①、tRCD,前面已经说过了。
②、AL。
③、CL。
④、RL 为读潜伏期,RL=AL+CL。

2.5 tRC参数

tRC 是两个 ACTIVE 命令,或者 ACTIVE 命令到 REFRESH 命令之间的周期,DDR3L 数据手册会给出这个值,比如 NT5CC256M16EP-EK 的 tRC 值为 47.91ns。

2.6 tRAS参数

tRAS 是 ACTIVE 命令到 PRECHARGE 命令之间的最小时间,DDR3L 的数据手册同样也会给出此参数,NT5CC256M16EP-EK 的 tRAS 值为 34ns。

三, I.MX6U MMDC 控制器

STM32 的 FMC 或 FSMC 外设用于连接 SRAM 或 SDRAM,MMDC 就是 I.MX6U的内存控制器。

3.1 MMDC控制器

MMDC 是一个多模的 DDR 控制器,可以连接 16 位宽的 DDR3/DDR3L、16 位宽的 LPDDR2,MMDC 是一个可配置、高性能的 DDR 控制器。MMDC 外设包含一个内核(MMDC_CORE)和 PHY(MMDC_PHY)。

  1. MMDC 内核:
    内核负责通过 AXI 接口与系统进行通信、DDR 命令生成、DDR 命令优化、读/写数据路径。
  2. MMDC PHY:
    PHY 负责时序调整和校准, 使用特殊的校准机制以保障数据能够在 400MHz被准确捕获。
  3. MMDC 的主要特性
    ①、支持 DDR3/DDR3Lx16、支持 LPDDR2x16,不支持 LPDDR1MDDR 和 DDR2。
    ②、支持单片 256Mbit~8Gbit 容量的 DDR,列地址范围:8-12 位,行地址范围 11-16bit。2个片选信号。
    ③、对于 DDR3,最大支持 8bit 的突发访问。
    ④、对于 LPDDR2 最大支持 4bit 的突发访问。
    ⑤、MMDC 最大频率为 400MHz,因此对应的数据速率为 800MT/S。
    ⑥、支持各种校准程序, 可以自动或手动运行。 支持 ZQ 校准外部 DDR 设备, ZQ 校准 DDRI/O 引脚、校准 DDR 驱动能力。
3.2 MMDC 控制器信号引脚

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

注意,DDR 引脚的电气属性寄存器和普通的外设引脚电气属性寄存器不同!

3.3 MMDC 控制器时钟源

I.MX6U 的 DDR 或者 MDDC 的时钟频率为 400MHz,查阅 I.MX6ULL 参考手册的《Chapter 18 Clock Controller Module(CCM)》章节。MMDC 时钟源如图所示:
在这里插入图片描述
主要分为 4 部分

  1. pre_periph2 时钟选择器
    也就是 periph2_clkd 的前级选择器,由 CBCMR 寄存器的PRE_PERIPH2_CLK_SEL 位(bit22:21)来控制,一共有四种可选方案.
    在这里插入图片描述
    当 PRE_PERIPH2_CLK_SEL 为 0x01 的时候选中 PLL2_PFD2 为pre_periph2 时钟源。
    之前将 PLL2_PFD2 设置为396MHz(约等于 400MHz),I.MX6U 内部 boot rom 就是设置 PLL2_PFD2 作为 MMDC 的最终时
    钟源,这就是 I.MX6U 的 DDR 频率为 400MHz 的原因。
  2. periph2_clk 时钟选择器
    由 CBCDR 寄存器的 PERIPH2_CLK_SEL 位(bit26)来控制,
    当为 0 的时候选择 pll2_main_clk作为periph2_clk 的时钟源,
    当为 1 的时候选择 periph2_clk2_clk作为periph2_clk的时钟源。
    这里肯定要将 PERIPH2_CLK_SEL 设置为 0,也就是选择pll2_main_clk 作为 periph2_clk 的时钟源,因此 periph2_clk=PLL2_PFD0=396MHz。
  3. 最后就是分频器
    由 CBCDR 寄存器的 FABRIC_MMDC_PODF 位(bit5:3)设置分频值,可设置 0~7,分别对应 1~8 分频,要配置 MMDC 的时钟源为 396MHz,那么此处就要设置为 1分频,因此 FABRIC_MMDC_PODF=0。

I.MX6U 参考手册一直说 DDR 的频率为 400MHz,但是实际只有 396MHz。

3.4 DDR3L 的封装介绍

DDR3L的容量不同的话地址线是不同的,比如行地址和列地址线数就不同。
但是 DDR3L 厂商为了方便选择将不同容量的 DDR3 封装做成一样,没有用到的地址线 DDR3L 芯片会屏蔽掉。
而且,根据规定,所有厂商的 DDR 芯片 IO 一摸一样,不管是引脚定义还是引脚间距,但是芯片外形大小可能不同。
只要做好硬件,可以在不需要修改硬件 PCB 的前提下,随意的更换不同容量、不同品牌的 DDR3L 芯片,极大的方便了我们的芯片选型。

四, 看的头疼,容我缓缓
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值