前段时间面试了一个小伙子,他有三四年嵌入式软件开发经验的了,随意问了一个问题:

MCU软件的变量是存在哪的,RAM还是ROM?
他犹豫了会,说是ROM。
接着我问他RAM和ROM有什么区别,他“呃”了几下,然后就没然后了
……

很多人在“专注”开发自己负责的模块功能,很少关注这些概念,但做嵌入式开发的,我们经常会遇到诸如ROM、RAM、EEPRM、FLASH……这样的概念。

在这里插入图片描述

它们分别是什么,有什么区别呢?

今天我就将它们彻底地讲个明白。

1. Computer Memory

ROM、RAM、EEPRM、FLASH……这些都是Memory,这个是毫无疑问的。
首先,来看看Computer Memory是一个什么样的东西,从Wiki里面找个标准的说法:

Modern memory is implemented as semiconductor memory, where data is stored within memory cells built from MOS transistors on an integrated circuit. There are two main kinds of semiconductor memory, volatile and non-volatile. Examples of non-volatile memory are flash memory and ROM, PROM, EPROM and EEPROM memory. Examples of volatile memory are primary storage, which is typically dynamic random-access memory (DRAM), and fast CPU cache memory, which is typically static random-access memory (SRAM) that is fast but energy-consuming, offering lower memory areal density than DRAM.

翻译过来就是:

现代存储器被实现为半导体存储器,其中数据存储在由集成电路上的 MOS 晶体管构建的存储器单元内。 有两种主要的半导体存储器,易失性和非易失性。 非易失性存储器(non-volatile memory)的是闪存和 ROM、PROM、EPROM 和 EEPROM 存储器。 易失性存储器(volatile memory)的是主存储器(primary storage),通常是动态随机存取存储器 (DRAM) 和快速 CPU 高速缓存存储器,通常是静态随机存取存储器 (SRAM),速度快但耗能,相对DRAM来说,提供较低的存储面积密度比。

接下来的文字会有点多,先用个图镇镇场子:
在这里插入图片描述

2. MOS memory

MOS即MOSFET里面的MOS,没看错,就是场效应管,MOSFET是metal–oxide–semiconductor field-effect transistor的缩写。

MOSFET不是电路里做开关用的吗,和Memory有啥关系?

在这里插入图片描述

君不知,Memory里面的就是一大堆开关啊。

在1959年,Mohamed M. Atalla 和Dawon Kahng 在贝尔实验室(Bell Labs),引入了这个MOSFET作为存储单元(Memory Cell)。然后,1964年John Schmidt在仙童半导体公司(Fairchild Semiconductor)开发了这个MOS Memory。

而这个MOS semiconductor memory 比磁芯内存(magnetic core memory)更便宜、功耗更低。

后来1965 年,皇家雷达机构的 J. Wood 和 R. Ball 提出了使用 CMOS (complementary MOS) 存储单元的数字存储系统,此外还有用于电源、开关交叉耦合、开关和延迟线存储的 MOSFET 功率器件。

1968 年,仙童半导体的 Federico Faggin 开发了硅栅 MOS 集成电路 (MOS IC) 技术,从而实现了 MOS 存储芯片的生产。

NMOS 存储器在 1970 年代初期被 IBM 商业化。

MOS 存储器在 1970 年代初期取代磁芯存储器成为主要的存储器技术。

3. Volatile Memory

易失性存储器(Volatile Memory)是需要电力来维持存储信息的计算机存储器。当存储器芯片的电源关闭时,易失性存储器会丢失其存储的数据。然而,它可以比非易失性存储器更快且更便宜。这种类型用于大多数计算机的主存储器,因为在计算机关闭时数据存储在硬盘上。

大多数现代半导体易失性存储器是静态 RAM (SRAM) 或动态 RAM (DRAM)。

3.1 RAM

RAM(Random-access memory)——这已成为任何可以写入和读取的半导体存储器的通用术语,而 ROM则只能读取。所有的半导体存储器,而不仅仅是 RAM,都具有随机存取的特性。

这里普及下什么是Random Access:

Random Access随机访问(更准确地说,更普遍地称为直接访问)是在相等的时间内访问序列中的任意元素或从可寻址元素群体中访问任何数据的能力,无论有多少元素,都可以像任何其他元素一样轻松有效地访问在集合中。在计算机科学中,它通常与顺序访问形成对比,顺序访问需要按存储顺序检索数据。

3.1.2 DRAM

DRAM(Dynamic random-access memory),它使用由一个 MOSFET和一个 MOS 电容器组成的金属氧化物半导体 (MOS) 存储单元来存储每一位。这种类型的RAM最便宜,密度也最高,因此用于计算机中的主存储器。但是,存储单元中存储数据的电荷会慢慢泄漏,因此必须定期刷新(重写)存储单元,这需要额外的电路。刷新过程由计算机内部处理,对其用户是透明的。

FPM DRAM (Fast page mode DRAM)
一种较旧类型的异步 DRAM,它通过允许以更快的速度重复访问单个“页面”内存来改进以前的类型。 1990 年代中期使用。

EDO DRAM (Extended data out DRAM)
一种较旧类型的异步 DRAM,其访问时间比早期类型更快,因为它能够在上次访问的数据仍在传输的同时启动新的内存访问。在 1990 年代后期使用。

VRAM (Video random access memory)
一种旧类型的双端口存储器,曾经用于视频适配器(视频卡)的帧缓冲区。

SDRAM (Synchronous dynamic random-access memory)
这是向 DRAM 芯片添加的电路,可将所有操作与添加到计算机内存总线的时钟信号同步。这允许芯片使用流水线同时处理多个内存请求,以提高速度。芯片上的数据也被分成组,每个组可以同时进行内存操作。到 2000 年左右,这成为计算机内存的主要类型。

SDRAM又有以下分类:

  • DDR SDRAM (Double data rate SDRAM)
    这可以通过双泵(在时钟脉冲的上升沿和下降沿传输数据)在每个时钟周期传输两倍的数据(两个连续字)。这个想法的扩展是当前(2012 年)用于提高内存访问率和吞吐量的技术。由于事实证明难以进一步提高内存芯片的内部时钟速度,因此这些芯片通过在每个时钟周期传输更多数据字来提高传输速率

  • RDRAM (Rambus DRAM)
    一种替代的双倍数据速率内存标准,曾用于一些英特尔系统,但最终输给了 DDR SDRAM。

  • SGRAM (Synchronous graphics RAM)
    一种专为图形适配器(视频卡)制作的 SDRAM。它可以执行位屏蔽和块写入等图形相关操作,并且可以一次打开两页内存。

  • HBM (High Bandwidth Memory)
    一种用于图形卡的 SDRAM 开发,可以以更快的速度传输数据。它由多个堆叠在一起的内存芯片组成,具有更宽的数据总线。

PSRAM (Pseudostatic RAM)
这是一种 DRAM,它具有在芯片上执行存储器刷新的电路,因此它的作用类似于 SRAM,允许关闭外部存储器控制器以节省能源。 它用于一些游戏机,例如 Wii。

3.1.3 SRAM

SRAM(Static random-access memory),它将每一位数据存储在称为触发器的电路中,该电路由 4 到 6 个晶体管组成。 与 DRAM 相比,SRAM 的密度更低且每比特更昂贵,但速度更快且不需要内存刷新。 它用于计算机中较小的高速缓存。

3.1.4 CAM

CAM (Content-addressable memory) ,这是一种特殊类型,其中不使用地址访问数据,而是应用数据字,如果字存储在内存中,则内存返回位置。 它主要集成在其他芯片中,例如用于高速缓存的微处理器。

4. Non-volatile Memory

非易失性存储器 (NVM) 在芯片电源关闭期间保存存储在其中的数据。 因此,它被用于没有磁盘的便携式设备中的内存,以及用于可移动存储卡等用途。 主要类型有:非易失性半导体存储器 (Non-volatile semiconductor memory, NVSM) 将数据存储在浮栅存储单元中,每个单元都由一个浮栅(floating-gate) MOSFET 组成。

4.1 ROM

ROM (Read-only memory) ,旨在保存永久数据,在正常操作中只能读取,不能写入。 虽然可以写入的类型很多,但写入过程很慢,通常必须一次重写芯片中的所有数据。 它通常用于存储计算机必须立即访问的系统软件,例如启动计算机的 BIOS 程序,以及用于便携式设备和嵌入式计算机(如微控制器)的软件(微码)。

MROM (Mask programmed ROM or Mask ROM)
在这种类型中,数据在芯片制造时被编程到芯片中,因此它仅用于大批量生产。它不能用新数据重写。

PROM (Programmable read-only memory)
在这种类型中,数据在安装到电路中之前被写入现有的 PROM 芯片,但它只能写入一次。通过将芯片插入称为 PROM 编程器的设备来写入数据。

EPROM (Erasable programmable read-only memory)
在这种类型中,可以通过从电路板上取下芯片,将其暴露在紫外线下以擦除现有数据,并将其插入 PROM 编程器来重写其中的数据。 IC 封装的顶部有一个小的透明“窗口”,允许紫外线进入。它通常用于原型和小型生产运行设备,其中的程序可能必须在工厂进行更改。

EEPROM (Electrically erasable programmable read-only memory)
这种类型的数据可以用电方式重写,而芯片在电路板上,但写入过程很慢。此类型用于保存固件,即运行硬件设备(例如大多数计算机中的 BIOS 程序)的低级微代码,以便可以对其进行更新。

很多嵌入式软件使用的外围小数据量存储就用了EEPROM,目前的技术,EEPROM的擦写寿命有约100万次。
以下对这个ROM、MROM、PROM、EPROM和EEPROM一个汇总:

Date of introductionCapacity (bits)ROM typeMOSFETManufacturer(s)
1956?PROM
1965256-bitROMBipolar
19651 kb
19691 kbROMBipolar
1970512-bitPROMBipolar TTLRadiation
19712 kbEPROMIntel
19744 kbROMMOSAMD
1974?EAROM
19758 kbEPROMNMOSIntel
19762 kbEEPROM
197716 kbPROMPMOS
197716 kbEPROMTTLIntel
197816 kbROMNMOS
197816 kbPROMCMOSNEC
197832 kbEPROMNMOS (HMOSIntel
197864 kbROMNMOSIntel
198016 kbEEPROMNMOSMotorola
198164 kbEPROMNMOS (HMOS II)Intel
198232 kbEEPROMMOSMotorola
1982128 kbEPROMNMOS (HMOS II)Intel
198364 kbEPROMCMOSSignetics
1983256 kbEPROMNMOS (HMOS)Intel
1983256 kbEPROMCMOSFujitsu
January 198464 kbEEPROMNMOSFujitsu
1984512 kbEPROMNMOSAMD
1984512 kbEPROMNMOS (HMOS)Intel
19841 MbEPROMCMOSNEC
19874 MbEPROMCMOSToshiba
199016 MbEPROMCMOSNEC
19938 MbMROM
19951 MbEEPROMCMOSHitachi
199516 MbMROMCMOSAKM, Hitachi

4.2 NVRAM

4.2.1 NVRAM (Non-volatile random-access memory)

NVRAM (Non-volatile random-access memory),是一种在不通电的情况下保留数据的随机存取存储器。 这与动态随机存取存储器 (DRAM) 和静态随机存取存储器 (SRAM) 形成对比,它们都只在通电时保持数据,或者磁带等形式的存储器不能随机存取 但它在没有电力的情况下无限期地保留数据

4.3 Flash

Flash Memory即闪存,是一种电子非易失性计算机存储器存储介质,可以电擦除和重新编程。 两种主要类型的闪存,NOR 闪存和 NAND 闪存,以 NOR 和 NAND 逻辑门命名。 NAND 闪存和 NOR 闪存使用相同的单元设计,由浮栅 MOSFET 组成。 它们在电路层面有所不同:在NAND闪存中,位线和字线之间的关系类似于与非门; 在 NOR 闪存中,它类似于 NOR 门; 这取决于位线或字线的状态是拉高还是拉低。

4.3.1 NOR Flash

在 NOR Flash中,每个单元的一端直接接地,另一端直接连接到位线。 这种排列被称为“NOR Flash”,因为它的作用类似于 NOR 门:当其中一条字线(连接到单元的 CG)被拉高时,相应的存储晶体管就会将输出位线拉低。 NOR Flash仍然是需要分立非易失性存储设备的嵌入式应用的首选技术。 NOR 器件的低读取延迟特性允许在单个存储器产品中直接执行代码和数据存储。

4.3.1 NAND Flash

NAND Flash也使用浮栅晶体管,但它们的连接方式类似于 NAND 门:几个晶体管串联连接,只有当所有字线都被拉高时(在晶体管的上方),位线才会被拉低 VT)。 然后,这些组通过一些额外的晶体管连接到 NOR 类型的位线阵列,就像单个晶体管在 NOR Flash中链接一样。

以下是NOR Flash和NAND Flash的一些比较:

AttributeNANDNOR
Main applicationFile storageCode execution
Storage capacityHighLow
Cost per bitLow
Active powerLow
Standby powerLow
Write speedFast
Read speedFast
Execute in place(XIP)NoYes
ReliabilityHigh

5. Semi-volatile Memory

第三类存储器是“半易失性(Semi-volatile)”。 该术语用于描述在断电后具有一定非易失性持续时间有限但数据最终会丢失的存储器。 使用半易失性存储器的典型目标是提供高性能/耐用性等。 与易失性存储器相关联,同时提供真正的非易失性存储器的一些好处。

例如,一些非易失性存储器类型可能会磨损,其中“磨损”的单元增加了易失性,但在其他方面继续工作。 因此可以将频繁写入的数据位置定向到使用磨损的电路。 只要位置在某个已知保留时间内更新,数据就会保持有效。 如果保留时间在没有更新的情况下“到期”,则该值将复制到具有较长保留时间的磨损较少的电路中。 首先写入磨损区域允许高写入速率,同时避免未磨损电路的磨损。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐