ROM,RAM,FLASH,SRAM,EMMC,NAND详解

ROM,RAM,FLASH,SRAM,EMMC,NAND详解

在我们做嵌入式设备开发时,特别是涉及到linux系统开发时,我们经常听到ROM,RAM,FLASH,SRAM,EMMC,NAND这几个名词,后续又有很多开发需要这方面的知识,在百度搜索,解释名词很多,但都没有很详细的讲解,最终还是由原子哥出面解决这个问题,因此简单整理一下分享给大家。
相信大家在购买手机、电脑等电子设备的时候,通常都会听到 RAM、ROM、硬盘等概念,
很多人都是一头雾水的。普通用户区分不清楚 RAM、ROM 到可以理解,但是作为一个嵌入式
Linux 开发者,要是不清楚什么是 RAM、什么是 ROM 就绝对不行!RAM 和 ROM 专业的解释
如下:
RAM: :随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存
条、SRAM、SDRAM、DDR 等都是 RAM。RAM 一般用来保存程序数据、中间结果,比如我
们在程序中定义了一个变量 a,然后对这个 a 进行读写操作,示例代码如下:

1 int a;
2 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,这些都是可以进行写操作的!只
是写起来比较麻烦,要先发送要先进行擦除,然后在发送要写的地址或扇区,最后才是要写入
的数据,学习过 STM32,使用过 WM25QXX 系列的 SPI Flash 的同学应该深有体会。可以看出,
相比于 RAM,向 ROM 或者 Flash 写入数据要复杂很多,因此意味着速度就会变慢(相比 RAM),
但是 ROM 和 Flash 可以将容量做的很大,而且掉电以后数据不会丢失,适合用来存储资料,比
如音乐、图片、视频等信息。嵌入式设备常见的 NANF Flash 或 EMMC 就是 ROM,EMMC的容量
可以做的比NAND flash更大。
综上所述,RAM 速度快,可以直接和 CPU 进行通信,但是掉电以后数据会丢失,容量不
容易做大(和同价格的 Flash 相比)。ROM(目前来说,更适合叫做 Flash)速度虽然慢,但是容量
大、适合存储数据。
为什么要讲 SRAM 呢?因为大多数的朋友最先接触 RAM 芯片都是从 SRAM 开始的,因
为大量的 STM32 单片机开发板都使用到了 SRAM,比如 F103、F407 等,基本都会外扩一个
512KB 或 1MB 的 SRAM 的,因为 STM32F103/F407 内部 RAM 比较小,在一些比较耗费内存
的应用中会出现内存捉紧的情况,比如 emWin 做 UI 界面。
SRAM 的全称叫做 Static Random-Access Memory,也就是静态随机存储器,这里的“静态”
说的就是只要 SRAM 上电,那么 SRAM 里面的数据就会一直保存着,直到 SRAM 掉电。对于
RAM 而言需要可以随机的读取任意一个地址空间内的数据,因此采用了地址线和数据线分离的方法,
具体实现可参考正点原子开发板使用手册,这里我们并不关心怎么使用。
SRAM的缺点就是成本高!价格高,大家可以在淘宝上搜索一下 IS62WV51216 这个仅仅只有 1MB
大小的 SRAM 售价为多少,大概为 5,6 块钱。大家在搜索一下 32MB 的 SDRAM 多钱,以华邦
的 W9825G6KH 为例,大概 4,5 块钱,可以看出 SDRAM 比 SRAM 容量大,但是价格更低。
SRAM 突出的特点就是无需刷新(SDRAM 需要刷新,后面会讲解),读写速度快!所以 SRAM
通常作为 SOC 的内部 RAM 使用或 Cache 使用。
前面给大家简单讲解了 SRAM,可以看出 SRAM 最大的缺点就是价格高、容量小!但是应
用对于内存的需求越来越高,必须提供大内存解决方案。为此半导体厂商想了很多办法,提出
了很多解决方法,最终 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,学过
STM32F429/F767/H743 的朋友应该知道 SDRAM,以正点原子407为例:
LIENTEK 探索者 STM32F4 开发板板载资源如下:
◆ CPU:STM32F407ZGT6,LQFP144,FLASH:1024K,SRAM:192K;
◆ 外扩 SRAM:IS62WV51216,1M 字节
◆ 外扩 SPI FLASH:W25Q128,16M 字节
◆ 1 个电源指示灯(蓝色)
◆ 2 个状态指示灯(DS0:红色,DS1:绿色)
◆ 1 个红外接收头,并配备一款小巧的红外遥控器
◆ 1 个 EEPROM 芯片,24C02,容量 256 字节
通过这个配置,大家应该就有所了解了。
那么DDR又是什么呢,我们的电脑包括一些嵌入式设备都会配置DDR。
其实DDR 内存是 SDRAM 的升级版本,SDRAM 分为 SDR SDRAM、
DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM。可以看出 DDR 本质上还是
SDRAM,只是随着技术的不断发展,DDR 也在不断的更新换代。先来看一下 DDR,也就是
DDR1,人们对于速度的追求是永无止境的,当发现 SDRAM 的速度不够快的时候人们就在思
考如何提高 SDRAM 的速度,DDR SDRAM 由此诞生。
DDR 全称是 Double Data Rate SDRAM,也就是双倍速率 SDRAM,看名字就知道 DDR 的
速率(数据传输速率)比 SDRAM 高一倍!这 1 倍的速度不是简简单单的将 CLK 提高 1 倍,
SDRAM 在一个 CLK 周期传输一次数据,DDR 在一个 CLK 周期传输两次数据,也就是在上升
沿和下降沿各传输一次数据,这个概念叫做预取(prefetch),相当于 DDR 的预取为 2bit,因此
DDR 的速度直接加倍!比如 SDRAM 速度一般是 133~200MHz,对应的传输速度就是
133~200MT/s,在描述 DDR 速度的时候一般都使用 MT/s,也就是每秒多少兆次数据传输。
133MT/S 就是每秒 133M 次数据传输,MT/s 描述的是单位时间内传输速率。同样 133~200MHz
的频率,DDR 的传输速度就变为了 266~400MT/S,所以大家常说的 DDR266、DDR400 就是这
么来的。
DDR2 的 IO 时钟是 DDR 的 2 倍,因此 DDR 内核时钟依旧是 133~200MHz 的时候,总线
速度就是 266~400MHz。而且 DDR2 在 DDR 基础上进一步增加预取(prefetch),增加到了 4bit,
相当于比 DDR 多读取一倍的数据,因此 DDR2 的数据传输速率就是 533~800MT/s,这个也就
是大家常说的 DDR2 533、DDR2 800。当然了,DDR2 还有其他速度,这里只是说最常见的几
种。
DDR3 在 DDR2 的基础上将预取(prefetch)提高到 8bit,因此又获得了比 DDR2 高一倍的传
输速率,因此在总线时钟同样为 266~400MHz 的情况下,DDR3 的传输速率就是 1066~1600MT/S。
I.MX6U 的 MMDC 外设用于连接 DDR,支持 LPDDR2、DDR3、DDR3L,最高支持 16 位数据
位宽。总线速度为 400MHz(实际是 396MHz),数据传输速率最大为 800MT/S。这里我们讲一下
LPDDR3、DDR3 和 DDR3L 的区别,这三个都是 DDR3,但是区别主要在于工作电压,LPDDR3
叫做低功耗 DDR3,工作电压为 1.2V。DDR3 叫做标压 DDR3,工作电压为 1.5V,一般台式内
存条都是 DDR3。DDR3L 是低压 DDR3,工作电压为 1.35V,一般手机、嵌入式、笔记本等都
使用 DDR3L。

你可能感兴趣的:(Linux驱动学习,LINUX)