嵌入式裸机开发-DDR3

I.MX6U 只有 128KB 的 OCRAM,如果要运行 Linux 的话完全不够
用的,所以必须要外接一片 RAM 芯片,I.MX6U 支持 LPDDR2、LPDDR3/DDR3,本文使用DDR3运行程序

DDR3 内存简介和发展历史

RAM 和 ROM

RAM:数据存储器, 随机存储器
优点:可以随时对任何地址的数据进行读写操作,速度很快。
缺点:掉电以后数据会丢失。
比如内存条、 SRAM、 SDRAM、 DDR 等都是 RAM。 RAM 一般用来保存程序数据、中间结果。
ROM:程序存储器, 只读存储器
优点:存储容量大,且掉电以后数据不会丢失,适合用来存储资料。
缺点:读写速度没有RAM快。
比如音乐、图片、视频等信息。
之前的ROM只能进行读操作,但是Flash、EMMC、UFS和 NAND Flash等 存储器也可以进行写操作,只是写起来比较麻烦,要先发送指令进行擦除,然后在发送要写的地址或扇区,最后才是要写入的数据。

对于正点原子的 I.MX6U为核心的开发板而言, 256MB/512MB 的 DDR3 就是 RAM,而 512MB NAND Flash 或 8GB EMMC 就是 ROM。

SRAM 简介

SRAM 的全称叫做 Static Random-Access Memory,也就是静态随机存储器
优点:这里的“静态”说的就是只要 SRAM 上电,那么 SRAM 里面的数据就会一直保存着,直到 SRAM 掉电。
缺点:成本高!价格高!
对于RAM 而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式。

以一颗 16 位宽(数据位为 16 位)、1MB 大小的 SRAM为例, IS62WV51216 芯片:
在这里插入图片描述
主要分为三部分:
①、 地址线:A0~A18,2^19=524288=512KB,因为是16位数据,所以可以存512KB*2=1MB的数据。
②、数据线: IO0~ IO7 是低字节数据, IO8~ IO15 是高字节数据,16bit 的数据,也就是 2 个字节。
③、控制线:CS2 和 CS1 是片选信号,低电平有效;OE 是输出使能信号,低电平有效;WE 是写使能信号,低电平有效;UB 为低电平的话表示访问高字节, LB 为低电平的话表示访问低字节。

以上了解以下即可。

SDRAM 简介

SDRAM (全称是 Synchronous Dynamic Random Access Memory),同步动态随机存储器。
“同步”的意思是 SDRAM 工作需要时钟线,
“动态”的意思是 SDRAM 中的数据需要不断的刷新来保证数据不会丢失,
“随机”的意思就是可以读写任意地址的数据。

优点: 集成度高、功耗低、成本低、适合做大容量存储。
缺点:需要定时刷新来保证数据不会丢失。
因此 SDRAM 适合用来做内存条, SRAM 适合做高速缓存或 MCU内部的 RAM。SDRAM 目前已经发展到了第四代,分别为: SDRAM、 DDR SDRAM、 DDR2 SDRAM、 DDR3 SDRAM、 DDR4 SDRAM。

一款 16 位宽(数据位为 16 位)、 32MB 、速度一般为 133MHz、 166MHz 或 200MHz的SDRAM为例,W9825G6KH 芯片:
在这里插入图片描述
①、控制线:
CLK: 时钟线;
CKE: 时钟使能信号线;
CS: 片选信号;
RAS:行选通信号,低电平有效,表示要发送行地址。
CAS: 列选通信号,和 RAS 类似,低电平有效,表示要发送列地址。
WE: 写使能信号,低电平有效。
②、 A10 地址线:
A10 不仅是地址线,还还控制着 Auto-precharge,也就是预充电。
预充电:SDRAM芯片内部会分为多个 BANK,关于 BANK 我们稍后会讲解。 SDRAM 在读写完成以后,如果要对同一个 BANK 中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行,准备打开新行的操作就叫做预充电。
③、地址线:
A0~ A12,共 13 根地址线。 SDRAM 寻址是按照行地址和列地址来访问的,W9825G6KH 的 A0~A8 是列地址,一共 9 位列地址, A0~A12 是行地址,一共 13位,
因此可寻址范围为: 29 * 213=4194304B=4MB,
W9825G6KH 为 16 位宽(2 个字节), 4MB2=8MB,
W9825G6KH 为4个BANK,8MB
4=32MB。
④、 BANK 选择线
BS0 和 BS1 是 BANK 选择信号线。
⑤、 BANK 区域
一片 SDRAM 中分割出多块 BANK,一般都是 2 的 n 次方,比如 2, 4, 8 等。
⑥、数据线
DQ0~DQ15,16 根数据线。
⑦、高低字节选择
LDQM 和UDQM 就是低字节和高字节选择信号,这个也和 SRAM 一样。

DDR 简介

DDR 内存是 SDRAM 的升级版本, SDRAM 分为 SDR SDRAM、DDR SDRAM、 DDR2 SDRAM、 DDR3 SDRAM、 DDR4 SDRAM,可以看出是在不断的更新换代。


预取(prefetch) :在一个 CLK 周期传输两次数据,也就是在上升沿和下降沿各传输一次数据。
数据传输速度:SDRAM 速度一般是 133~200MHz,在描述 DDR 速度的时候一般都使用 MT/s,也就是每秒多少兆次数据传输。

LPDDR3、 DDR3 和 DDR3L 的区别,这三个都是 DDR3,但是区别主要在于工作电压:
1、LPDDR3叫做低功耗 DDR3,工作电压为 1.2V。
2、DDR3 叫做标压 DDR3,工作电压为 1.5V,一般台式内存条都是 DDR3。
3、DDR3L 是低压 DDR3,工作电压为 1.35V,一般手机、嵌入式、笔记本等都使用 DDR3L。


DDR SDRAM:全称是 Double Data Rate SDRAM,也就是双倍速率 SDRAM,DDR 的预取为 2bit,速度直接加倍,传输速度就变为了 266~400MT/S,所以大家常说的 DDR266、 DDR400 就是这么来的。
DDR2 SDRAM:在 DDR 基础上IO 时钟是 DDR 的 2 倍,进一步增加预取(prefetch),增加到了 4bit,速度又加倍,传输速率就是 533~800MT/s,这个也就是大家常说的 DDR2 533、 DDR2 800。
DDR3 SDRAM:在 DDR2 的基础上将预取(prefetch)提高到 8bit,传输速率就是 1066~1600MT/S。

以NT5CC256M16EP-EK 是一款容量为 4Gb,也就是 512MB 大小、16 位宽、 1.35V、传输速率为 1866MT/S 的 DDR3L 芯片为例。
(6、硬件资料-》 1、芯片资料-》 NT5CC256M16EP-EK.pdf)
在这里插入图片描述
①、控制线:
ODT:片上终端使能, ODT 使能和禁止片内终端电阻。
ZQ:输出驱动校准的外部参考引脚,此引脚应该外接一个 240 欧的电阻到 VSSQ 上,一般就是直接接地了。
RESET: 复位引脚,低电平有效。
CKE: 时钟使能引脚。
A12: A12 是地址引脚,但是有也有另外一个功能,因此也叫做 BC 引脚, A12 会在 READ和 WRITE 命令期间被采样,以决定 burst chop 是否会被执行。
CK 和 CK#: 时钟信号, DDR3 的时钟线是差分时钟线,所有的控制和地址信号都会在 CK对的上升沿和 CK#的下降沿交叉处被采集。
CS#:片选信号,低电平有效。
RAS#、 CAS#和 WE#:行选通信号、列选通信号和写使能信号。

②、地址线:
A0~A14,一共 15 根地址线,列地址为 A0 ~ A9,共 10 根,行地址为 A0 ~ A14,共 15 根。
1个BANK:2102152=32MB2=64MB;
一共有 8 个 BANK:64MB
8=512MB。

③、 BANK 选择线:
BA0~BA2,3根选择线控制8个BANK。

④、 BANK 区域:
DDR3 一般都是 8 个 BANK 区域。

⑤、数据线:
DQ0~DQ15,16 根数据线。

⑥、数据选通引脚:
DQS 和 DQS#是数据选通引脚,为差分信号,读的时候是输出,写的时候是输入。
LDQS(有的叫做 DQSL)和 LDQS#(有的叫做 DQSL#)对应低字节,也就是 DQ0~7,
UDQS(有的叫做 DQSU)和 UDQS#(有的叫做 DQSU#),对应高字节,也就是 DQ8~15。

⑦、数据输入屏蔽引脚:
DM 是写数据收入屏蔽引脚。

DDR3 关键时间参数

在购买 DDR3 内存的时候通常会重点观察几个常用的时间参数:
1、传输速率
比如 1066MT/S、 1600MT/S、 1866MT/S 等,这个是首要考虑的,因为这个决定了 DDR3 内存的最高传输速率。
2、 tRCD 参数
tRCD 全称是 RAS-to-CAS Delay,也就是行寻址到列寻址之间的延迟。
DDR 的寻址流程是:
1、行激活:先指定 BANK 地址,然后在指定行地址,
2、读/写命令:最后指定列地址确定最终要寻址的单元。

从行有效(行激活)到读写命令发出的这段时间间隔叫做 tRCD
在这里插入图片描述
本文tRCD 为 13.91ns。
有时候大家也会看到“13-13-13”之类的参数,这个是用来描述 CL-tRCD-TRP 的,这里的 13 不是 ns 数,而是 CLK 时间数,表示 13 个 CLK 周期。

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

从读取命令到数据输出的这段时间叫CL。
在这里插入图片描述

4、 AL 参数
在 DDR 的发展中,提出了一个前置 CAS 的概念,目的是为了解决 DDR 中的指令冲突,它允许 CAS 信号紧随着 RAS 发送,相当于将 DDR 中的 CAS 前置了。但是读/写操作并没有因此提前,依旧要保证足够的延迟/潜伏期,为此引入了 AL(Additive Latency),单位也是时钟周期数,AL+CL 组成了 RL(Read Latency)。

在这里插入图片描述
文字叙述的比较麻烦,作为理科生还是上图理解吧,就是前边儿的tRCD和CL两个主要过程不变,加入了提前激活潜伏期AL,反正就是读数据更快了,RL=AL+CL整体叫做读潜伏期。

5、 tRC 参数
tRC 是两个 ACTIVE 命令,或者 ACTIVE 命令到 REFRESH 命令之间的周期。
6、 tRAS 参数
tRAS 是 ACTIVE 命令到 PRECHARGE 命令之间的最小时间。

I.MX6U MMDC 控制器简介

MMDC 控制器

MMDC 就是 I.MX6U的内存控制器, MMDC 是一个多模的 DDR 控制器,可以连接 16 位宽的 DDR3/DDR3L、 16 位宽的 LPDDR2, MMDC 是一个可配置、高性能的 DDR 控制器。

MMDC 外设包含一个内核(MMDC_CORE)和 PHY(MMDC_PHY):
MMDC 内核:内核负责通过 AXI 接口与系统进行通信、 DDR 命令生成、 DDR 命令优化、读/写数据路径。
MMDC PHY: PHY 负责时序调整和校准,使用特殊的校准机制以保障数据能够在 400MHz被准确捕获。

MMDC 控制器信号引脚

在使用 STM32 的时候 FMC/FSMC 的 IO 引脚是带有复用功能的,如果不接 SRAM 或SDRAM 的话 FMC/FSMC 是可以用作其他外设 IO 的。
对于 DDR 接口就不一样了,因为DDR 对于硬件要求非常严格,因此 DDR 的引脚都是独立的,一般没有复用功能,只做为 DDR引脚使用。 因此就不存在所谓的 DDR 引脚复用配置,只需要设置 DDR 引脚的电气属性即可,注意, DDR 引脚的电气属性寄存器和普通的外设引脚电气属性寄存器不同!
MMDC 控制器信号引脚还是基本的那些:控制总线、地址总线、数据总线。

MMDC 控制器时钟源

这个就要查阅 I.MX6ULL 参考手册的《Chapter 18 Clock Controller
Module(CCM)》章节。
在这里插入图片描述

MMDC 的时钟源路径图,主要分为 4 部分,我们依次来看一下每部分所组的工作:
①、 pre_periph2 时钟选择器
由 CBCMR 寄存器的PRE_PERIPH2_CLK_SEL 位(bit22:21)来控制。
在这里插入图片描述

②、 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。
③、最后就是分频器,由 CBCDR 寄存器的 FABRIC_MMDC_PODF 位(bit5:3)设置分频值,可设置 0~ 7,分别对应 1~ 8 分频,要配置 MMDC 的时钟源为 396MHz,那么此处就要设置为 1
分频,因此 FABRIC_MMDC_PODF=0。

ALPHA 开发板 DDR3L 原理图

DDR3L 厂商为了方便选择将不同容量的 DDR3 封装做成一样,没有用到的地址线 DDR3L 芯片会屏蔽掉。而且,根据规定,所有厂商的 DDR 芯片 IO 一摸一样,不管是引脚定义还是引脚间距,但是芯片外形大小可能不同。

DDR3L 原理图:
在这里插入图片描述
I.MX6U 的 MMDC 控制器 IO:
在这里插入图片描述

DDR3L 初始化与测试

大体来讲就是使用某种软件将具有DDR配置的xlsx表生成.inc文件,下载到板子上,并USB OTG启动,在校准、超频测试,

裸机开发暂时到这,基本都是配置寄存器,学习学习相关硬件知识,没什么意思,去搞内核移植了,hahah!!!

  • 2
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
制作日志: /****************************2016-07-10 更新*********************************/ 经过不知道多少个工作日空余时间和周末业余时间,终于大致设计板子浮出水面,等待后续检查。 板子采用4层PCB,层叠情况:Top -> GND -> Power -> Bottom板子芯片情况: (1) FPGA: Xilinx Spartan6系列的XC6SLX16-FTG256 (2) DDR3: Micron的MT41J128M16,2Gbit存储容量 (2) 电源:采用2片Onsemi的NCP1529分别为FPGA Core 1.2V和DDR3 1.5V提供电源 /****************************2016-07-18 更新*********************************/ PCB打样回来了,5mil/5mil的线宽线距,10mil的过孔,花了我好多大洋!!!赶紧贴板子去了!! 贴完再上照。 /****************************2016-07-19 更新*********************************/ 搞了一个上午,终于搞定第一个板子,FPGA的1.2V VDDCore电压,1.5V的DDR3供电电压, VREF的0.75V电压都OK。往FPGA内部下载点灯程序OK,往SPI FLASH固化程序也OK。 下一步,DDR3 的MCB实现。 /****************************2016-07-23 更新*********************************/ 经测试,第一版的DDR3可以正常稳定运行在400MHz,全地址空间读写数据无任何问题。 现在开始准备第二版,打算生成100个pcb,并且会将阻焊颜色由绿色改为黑色。 具体设计细节和第一版的区别如下: (1) IO引脚数量由原来的80个增加到86个IO; (2) 所有引出的差分线尽量保持等长; (3) 电容部分进行了改进,每个DC/DC输出都增加了铝电解电容,增加可靠性,铝电解电容都放在背面。 下面是第二版的图片: /****************************2016-07-26 完成*********************************/ 2Gbit全地址空间测试完成,用的是Xilinx提供的MCB IP硬核,附件是原理图和说明书,欢迎下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值