参考:正点原子《I.MX6U 嵌入式 Linux 驱动开发指南》
1、RAM 与 ROM
RAM:随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、SRAM、SDRAM、DDR 等都是 RAM。RAM 一般用来保存程序数据、中间结果。
ROM:只读存储器,断电信息不会丢失。从其制造工艺和功能上分,ROM有五种类型,即掩膜编程的只读存储器MROM(Mask-programmedROM)、可编程的只读存储器PROM(Programmable ROM)、可擦除可编程的只读存储器EPROM(Erasable Programmable ROM)、可电擦除可编程的只读存储器 EEPROM(Elecrically Erasable Programmable ROM)和快擦除读写存储器(Flash Memory)。
SRAM/SDRAM/DDR/Cache :
2. SRAM
Static Random-Access Memory 静态随机存储器,这里的“静态” 意思是只要 SRAM 上电,里面的数据就会一直保存着,直到 SRAM 掉电。对于 RAM 而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方式,这里就以 STM32F103/F407 开发板常用的 IS62WV51216 这颗 SRAM 芯片为例简单的讲解一下 SRAM,这是一颗 16 位宽(数据位为 16 位)、1MB 大小的 SRAM,芯片框图如图1所示:
2.1 地址线
A0~A18是地址线,共19根地址线,可访问的地址大小是 2^19=524288=512KB。不是说 IS62WV51216 是个 1MB 的 SRAM 吗?为什么地址空间只有512KB?前面我们说了 IS62WV51216 是 16 位宽的,也就是一次访问 2 个字节,因此需要对512KB 进行乘 2 处理,得到 512KB*2=1MB。位宽的话一般有 8 位/16 位/32 位,根据实际需求选择即可,一般都是根据处理器的 SRAM 控制器位宽来选择 SRAM 位宽。
2.2 数据线
根据 SRAM 位宽的不同,数据线的数量要不同,8 位宽就有 8根数据线,16 位宽就有 16 根数据线,32 位宽就有 32 根数据线。IS62WV51216 是一个 16 位宽的 SRAM,因此就有 16 根数据线,一次访问可以访问 16bit 的数据,也就是 2 个字节。因此就有高字节和低字节数据之分,其中 IO0~IO7 是低字节数据,IO8~IO15 是高字节数据。
2.3 控制线
SRAM 要工作还需要一堆的控制线,CS2 和 CS1 是片选信号,低电平有效,在一个系统中可能会有多片 SRAM(目的是为了扩展 SRAM 大小或位宽),这个时候就需要 CS 信号来选择当前使用哪片 SRAM。另外,有的 SRAM 内部其实是由两片 SRAM 拼接起来的,因此就会提供两个片选信号。
OE 是输出使能信号,低电平有效,也就是主控从 SRAM 读取数据。
WE 是写使能信号,低电平有效,也就是主控向 SRAM 写数据。
UB 和 LB 信号,前面我们已经说了,IS62WV51216 是个 16 位宽的 SRAM,分为高字节和低字节,那么如何来控制读取高字节数据还是低字节数据呢?这个就是 UB 和 LB 这两个控制线的作用,这两根控制线都是低电平有效。UB 为低电平的话表示访问高字节,LB 为低电平的话表示访问低字节。那么 SRAM 有什么缺点没有?SRAM 最大的缺点就是成本高。
SRAM 突出的特点就是无需刷新(SDRAM 需要刷新),读写速度快!所以 SRAM通常作为 SOC 的内部 RAM 使用或 Cache 使用,比如 STM32 内存的 RAM 或 I.MX6U 内部的 OCRAM 都是 SRAM。
3. SDRAM
SDRAM 全称是