Linux-ARM裸机(十二)-DDR3-外接RAM内存芯片

I.MX6U-ALPHA 开发板上带有一个 256MB/512MB 的 DDR3 内存芯片,一般 Cortex-A 芯片自带RAM 很小,比如 I.MX6U 只有 128KB 的 OCRAM。若要运行 Linux 的话完全不够用,所以必须外扩一片 RAM 芯片, I.MX6U 支持 LPDDR2、LPDDR3/DDR3, I.MX6U-ALPHA开发板上使用的是 DDR3,本篇记录学习如何驱动 I.MX6U-ALPHA 开发板上的这片 DDR3。

DDR3 内存简介

1、RAM、ROM简介

RAM:随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、SRAM、SDRAM、DDR 等都是 RAM。 RAM 一般用来保存程序数据、中间结果,比如我
们在程序中定义了一个变量 a,然后对这个 a 进行读写操作,示例代码如下:

int a;
a = 10;

a 是一个变量,我们需要很方便的对这个变量进行读写操作,方法就是直接“a”进行读写操作,不需要在乎具体的读写过程。我们可以随意对 RAM 中任何地址的数据进行读写操作,非常方便。

ROM: 只读存储器,我们买手机,通常会告诉你这个手机是 4+64 或 6+128 配置,说的就是 RAM 为 4GB 或 6GB, ROM 为 64G 或128GB。但是这个 ROM 是 Flash,比如 EMMC 或 UFS 存储器,很多人将Flash 叫做ROM。但是 EMMC 和 UFS,甚至是 NAND Flash,这些都是可以进行写操作的!只是写起来比较麻烦,要先进行擦除,然后再发送要写的地址或扇区,最后才是要写入的数据,比如:WM25QXX 系列的 SPI Flash 。相比于RAM,向 ROM 或 Flash 写入数据要复杂很多,意味着速度就会变慢(相比 RAM),但是ROM 和 Flash 可以将容量做的很大,而且掉电以后数据不会丢失,适合用来存储资料,比如音乐、图片、视频等信息。

综上所述, RAM 速度快,可以直接和 CPU 进行通信,但掉电以后数据会丢失,容量不容易做大(和同价格的 Flash 相比)。 ROM(目前来说,更适合叫做 Flash)速度虽然慢,但是容量大、适合存储数据。对于正点原子的 I.MX6U-ALPHA 开发板而言, 256MB/512MB 的 DDR3 就是 RAM,而 512MB NANF Flash 或 8GB EMMC 就是 ROM。

2、SRAM 简介

STM32 单片机开发板都使用到了 SRAM,比如 F103、 F407 等,基本都会外扩一个512KB 或1MB 的 SRAM 的,因为 STM32F103/F407 内部 RAM 比较小,在一些比较耗费内存的应用中会出现内存不够的情况,比如 emWin 做 UI 界面。

SRAM 的全称叫做 Static Random-Access Memory,静态随机存储器,这里的“静态”说的就是只要 SRAM 上电,那么 SRAM 里面的数据就会一直保存着,直到 SRAM 掉电。对于RAM 而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式,这里就以 STM32F103/F407 开发板常用的 IS62WV51216 这颗 SRAM 芯片为例学习一下SRAM,这是一颗 16 位宽(数据位为 16 位)、1MB 大小的 SRAM。

①、 地址线

这部分是地址线,A0~A18,19 根地址线,因此可访问的地址大小就是2^19=524288=512KB。 IS62WV51216 是个 1MB 的 SRAM,IS62WV51216 是 16 位宽的,也就是一次访问 2 个字节,因此需要对512KB 进行乘 2 处理,得到 512KB*2=1MB。位宽的话一般有 8 位/16 位/32 位,根据实际需求选择即可,一般都是根据处理器的 SRAM 控制器位宽来选择 SRAM 位宽。

②、数据线

这部分是 SRAM 的数据线,根据 SRAM 位宽的不同,数据线的数量要不同, 8 位宽就有 8根数据线, 16 位宽就有 16 根数据线, 32 位宽就有 32 根数据线。 IS62WV51216 是一个 16 位宽的SRAM,因此就有 16 根数据线,一次访问可以访问 16bit 的数据,也就是 2 个字节。因此就有高字节和低字节数据之分,其中 IO0~IO7 是低字节数据, IO8~IO15 是高字节数据。
③、控制线

SRAM 要工作还需要一堆控制线, CS2 和 CS1 是片选信号,低电平有效,在一个系统中可能会有多片 SRAM(目的是为了扩展 SRAM 大小或位宽),这时就需要 CS 信号来选择当前使用哪片 SRAM。另外,有的 SRAM 内部其实是由两片 SRAM 拼接起来的,因此就会提供两个片选信号。

OE 是输出使能信号,低电平有效,主控从 SRAM 读取数据。
WE 是写使能信号,低电平有效,主控向 SRAM 写数据。
UB 和 LB 信号,IS62WV51216 是个 16 位宽的 SRAM,分为高字节和低字节, UB 和 LB 这两个控制线都是低电平有效。 UB 为低电平的话表示访问高字节, LB 为低电平的话表示访问低字节。

SRAM 最大的缺点就是成本、价格高,IS62WV51216 这个仅有 1MB大小的 SRAM 售价大概为 5,6 块钱。而 32MB 的 SDRAM ,比如 W9825G6KH ,大概 4,5 块钱,可看出 SDRAM 比 SRAM 容量大,但是价格更低。SRAM 突出的特点就是无需刷新,读写速度快(下面介绍的SDRAM需要刷新来保证数据不丢失)!所以 SRAM通常作为 SOC 的内部 RAM 使用或 Cache 使用,比如 STM32 内存的 RAM 或 I.MX6U 内部的OCRAM 都是 SRAM。

3、SDRAM 简介

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

与 SRAM 相比, SDRAM 集成度高、功耗低、成本低、适合做大容量存储,但需要定时刷新来保证数据不丢失。因此 SDRAM 适合用来做内存条,而SRAM 适合做高速缓存或 MCU内部的RAM。 SDRAM 目前已发展到了第四代,分别为:SDRAM、DDR SDRAM、DDR2 SDRAM、 DDR3 SDRAM、 DDR4 SDRAM。 STM32F429/F767/H743 等芯片支持 SDRAM,这里介绍华邦W9825G6KH,W9825G6KH 是一款 16 位宽(数据位为 16 位)、 32MB 的 SDRAM、速度一般为 133MHz、 166MHz 或 200MHz。如下W9825G6KH 框图:

①、控制线

SDRAM 也需要很多控制线,如下:
CLK:时钟线,SDRAM 是同步动态随机存储器,“同步”的意思就是时钟,因此需要一根额外的时钟线,这是和 SRAM 最大的不同, SRAM 没有时钟线。
CKE: 时钟使能信号线, SRAM 没有 CKE 信号。
CS: 片选信号,这个和 SRAM 一样,都有片选信号。
RAS:行选通信号,低电平有效, SDRAM 和 SRAM 的寻址方式不同, SDRAM 按照行、列来确定某个具体的存储区域。因此就有行地址和列地址之分,行地址和列地址共同复用同一组地址线,要访问某一个地址区域,必须要发送行地址和列地址,指定要访问哪一行?哪一列?
RAS 是行选通信号,表示要发送行地址,行地址和列地址访问方式如下图:

CAS: 列选通信号,和 RAS 类似,低电平有效,选中以后就可以发送列地址了。
WE: 写使能信号,低电平有效。

②、 A10 地址线

A10 是地址线,这里单独将 A10 地址线给提出来,是因为 A10 地址线还有另外一个作用, A10 还控制着 Auto-precharge,也就是预充电。预充电: SDRAM芯片内部会分为多个 BANK,BANK 后文有介绍。 SDRAM 在读写完成以后,若要对同一个 BANK 中的另一行进行寻址操作就必须将原来有效的行关闭,然后发送新的行/列地址,关闭现在工作的行,准备打开新行的操作就叫做预充电。一般 SDSRAM 都支持自动预充电的功能。

③、地址线

对于 W9825G6KH 来说一共有 A0~A12,13 根地址线,但前面说了 SDRAM 寻址是按照行地址和列地址来访问的,因此这 A0~A12 包含了行地址和列地址。不同的 SDRAM 芯片,根据其位宽、容量等的不同,行列地址数是不同的,这个在 SDRAM 自己的数据手册里面会写清楚。比如 W9825G6KH 的 A0~A8 是列地址,共 9 位列地址, A0~A12 是行地址,共 13位,因此可寻址范围为: 2^9*2^13=4194304B=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值