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 芯片,极大的方便了我们的芯片选型。

四, 看的头疼,容我缓缓
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值