RAM 和 DDR 都可以CPU直接进行交互(因为数据处理速度够快),我们烧写到开发板里的程序,最终都要被加载到 DDR 或者 RAM,CPU 再从 DDR 或者 RAM 读取数据、指令。
RAM:CPU内部的一段可用内存。范围为 0x00900000~0x0091FFFF,大小为 128 KB
DDR:CPU外的存储器,封装在SOC 中,DDR的大小为 256M 或者 512M。如果DDR大小为256MB,那么范围为 0x80000000~0x90000000。
目录
一、ROM 和 RAM
1、ROM
只读存储器,类似于电脑硬盘,掉电以后数据不丢失,适合用来存储资料,比如音视频、图片等信息。也可以叫做 Flash,比如 EMMC、UFS、NAND Flash 其实都是 ROM。
- 掉电以后数据不丢失
- IO 速度相较于RAM更慢
- 容量一般较大(IMX.6ULL 有 512 MB 的 NAND Flash或者 8GB 的 EMMC)
2、RAM
随机存储器,类似于电脑的运行内存,掉电以后数据会丢失,一般用来保存程序数据、中间结果。比如后续介绍的 SRAM、SDRAM、DDR 其实都是 RAM。
- 掉电以后数据丢失
- IO 速度快,可以和CPU直接交互
- 容量较小(IMX.6ULL 的DDR3 为 256 MB 或 512 MB)
二、RAM
后续的 SDRAM、DDR其实都是在上一个的基础上一步步改进得到的,所以我们需要依次了解 SRAM —— SDRAM —— DDR —— DDR2 / DDR3 到底做了哪些改进。
1、SRAM
这里以 16 位宽(数据位为16位)、1 MB 大小的SRAM为例。假设SRAM要获取数据,那么他就需要知道,去哪个地址,一次取多少数据,是读数据还是写数据。这一句话包含了下面三种线的作用。
① 地址线
地址线有19根(A0 ~ A18),那么可访问的地址大小就是2^19 = 524288 = 512KB。
② 数据线
16位宽有16根数据线,对应 16 bit,相当于每次去某个地址,都会访问 2 个字节的数据,因此就有了高低字节之分,其中 IO0~IO7 是低字节,IO8~IO15 是高字节。
这也就验证了 SRAM 的大小 = 可访问的地址数 × 每次访问地址可以获取到的字节数
= 512 KB × 2 = 1024 KB = 1MB
③ 控制线
访问某个地址的时候,是读数据还是写数据,如果是读数据,先读高字节还是先读低字节,这些都由控制线完成。
- CS1、CS2:有些系统可能会有多片SRAM,使用哪一片由 CSx 决定
- OE:输出使能。低电平有效,主控从SRAM 读取数据
- WE:写使能。低电平有效,主控向SRAM 写数据
- UB:读取高字节数据
- LB:读取低字节数据
2、SDRAM
SRAM 的缺点是成本高、容量小,实际上对于内存的需求越来越高,需要大内存的解决方案,最终 SDRAM 应运而生。SDRAM(Synchronous Dynamic Random Access Memory),同步动态随机存储器,既然是“同步”,那就说明需要时钟线;“动态” 表示不断刷新来保证数据不会丢失。SDRAM 和 SRAM 的区别在于:
- 引入了时钟线,同步刷新数据
- 多个 BANK,降低地址冲突,提升内存的的访问效率
- 每个 BANK 中通过行、列寻址
去哪个BANK的哪个地址,访问多少数据,读数据还是写数据。下面是一个16位宽、32MB的SDRAM,速度为133MHz、166MHz 或 200MHz
④ BANK 选择线
单一的 BANK 会带来严重的寻址冲 突,减低内存访问效率。因此,才有了现在的多个BANK,但是具体要到哪个BANK中获取数据,取决于BANK选择线BS0、BS1
③ 地址线(A0~A12)
SDRAM 是通过行列来寻址的,行地址和列地址由同一根线控制,SDRAM 如何知晓当前收到的地址是行地址还是列地址呢?这就需要依赖图中 ① 包含的 RAS、CAS 了,RAS 是行选通信号,低电平有效,如果 RAS 是低电平,说明此时A10是行地址;如果 CAS 是低电平,说明此时A10 是列地址。
以 W9825G6KH 的型号为例,A0~A8 是列地址,一共 9 位;A0~A12 是行地址,一共 13 位。因此寻址范围:2^9 × 2^13 = 4MB。根据图中 ⑥ 包含的可以看出,数据宽为 16 bit,也就是说,每次可以访问 2 字节。
因此,一个 BANK 的大小 = 4MB × 2 = 8 MB
② A10(地址选择线)
A10 除了作为地址线的一员外,还控制着“预充电”,“预充电” 指的是关闭现在的行,准备打开新行的操作,这样就可以准备访问一个新的地址了。
⑤ BANK 分块
单一的 BANK 会带来严重的寻址冲 突,减低内存访问效率。因此,才有了现在的多个BANK,每个SDRAM 的数据手册中都会指明有多少个BANK,图中展示的SDRAM 有4个BANK。
从地址线了解到一个 BANK 是8MB,那么SDRAM的大小 = 4 × 8MB = 32 MB
① 控制线
和SRAM类似,这里仅介绍和 SRAM 不同的地方
- CLK:时钟线
- CKE:时钟使能
- RAS:行选通信号,低电平有效。低电平时,说明 A0~A12 发送的是行地址
- CAS:列选通信号,低电平有效。低电平时,说明 A0~A8 发送的是列地址
3、DDR SDRAM
SDRAM 解决了SRAM 内存小的问题,但是人们产生了新的需求,那就是速度不够快,因此就有了现在的 DDR。DDR(Double Data Rate SDRAM),双倍速率SDRAM,这里的“双倍”来自于时钟的改进,SDRAM 在一个时钟周期传输一次数据,但是DDR在一个时钟周期传输两次(上升沿和下降沿各传递一次数据)。
原本的 SDRAM 传输速度是 133~200 MT/s,MT/s 表示每秒多少兆次数据传输。DDR 的传输速度就变为了 266~400 MT/s。
4、DDR2 / DDR3 / DDR3L
DDR 的传输速度进一步提升,就有了现在的DDR2、DDR3,甚至DDR4。DDR2 在DDR 的基础上进一步增加预取(相当于一个时钟周期传输4次数据)
- DDR2:533~800 MT/s
- DDR3:1066~1600 MT/s
为了适应不同场景,DDR3 衍生出了许多不同型号,如 LPDDR3、DDR3L。他们之间的区别在于工作电压。
- DDR3:工作电压 1.5 V (台式机)
- LPDDR3:工作电压 1.2 V
- DDR3L:工作电压 1.35 V (一般手机、嵌入式、笔记本)