嵌入式存储器基础知识--RAM/ROM/FLASH
本文总结嵌入式系统中RAM、ROM和FLASH的基础知识,重点说明各类内存在代码存储中的作用。如有疏漏之处,欢迎指正。感谢阅读!
一、前言
按照存储器断电后,存储的数据内容是否会丢失的特性,将常用存储器分为两大类:
- 易失性存储器(存取速度快,掉电丢失典型代表:内存RAM)
- 非易失性存储器(可长期存储数据,存取速度慢,典型代表:硬盘,FLASH/ROM)
二、易失性存储器–RAM
RAM(Random Access Memory-随机存储器)是计算机的主要内部存储器----内存。"随机存取"是数据读取和写入花费的时间与存储位置无关(这里的"随机"意味着数据并非线性排列,而是可以自由指定地址进行访问)。这种存储器具有访问速度快、读写次数不受限、支持随机访问等特点。然而,RAM也存在断电后数据丢失、存储容量有限以及成本较高等不足。
在嵌入式系统中,RAM通常用于存储运行时数据、堆栈、寄存器,正在运行的操作系统、应用程序和临时数据等。
RAM具有以下主要特点:
- 快速访问:RAM具有非常快速的读取和写入速度,可以实现高性能的数据存取。这使得RAM非常适合用于存储正在运行的程序和临时数据,以提供快速的计算和响应。
- 随机访问:RAM可以随机访问存储的数据,即可以直接访问任何存储单元,而不需要按照顺序进行读取或写入。这使得RAM非常适合用于需要快速访问任意数据的应用,如计算机内存和缓存。
- 容量灵活:RAM的容量可以根据需要进行灵活扩展,从几兆字节到几十或上百吉字节不等。这使得RAM可以满足不同应用的存储需求,从个人计算机到服务器和大型数据中心,但是总体容量较小。
- 临时存储:RAM主要用于临时存储数据和程序,当计算机断电或重新启动时,RAM中的数据将被清除。因此,RAM通常用于存储正在运行的操作系统、应用程序和临时数据,而不是长期存储。
- 高价格:相比于Flash等非易失性存储器,RAM的价格较高。这是因为RAM需要更高的性能和更复杂的制造工艺,以实现快速访问和随机访问的能力。
RAM可以分为动态随机存储器 DRAM 以及静态随机存储器 SRAM 。速度:ROM=FLASH<DRAM<SRAM
2.1 动态随机存储器–DRAM(Dynamic RAM)
DRAM的具体的工作过程是这样的:由 1个晶体管+1个电容(1T1C)构成存储单元,一个存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因,所以他需要定期刷新操作,即 Dynamic(动态的),访问速度通常 50~100ns 级。
根据 DRAM 的通信是否需要时钟信号,又分为SDRAM(Synchronous DRAM 同步动态随机存储器)和异步 DRAM,SDRAM在时钟的上升沿表示有效数据。相比于异步DRAM,SDRAM速度更快,应用更广。
SDRAM,同步动态随机存储器,“同步”是指内存工作需要同步时钟,内部的命令的发送与数据的传输都以它为基准;“动态”是指存储阵列需要不断地刷新来保证数据不丢失;“随机”是指数据不是线性依次存储的,而是自由指定地址进行数据读写。
为了进一步提高 SDRAM 的速度,设计出了 DDR SDRAM(Double Data Rate SDRAM,双倍速率同步动态随机存储器),在上升沿和下降沿各表示一位数据,即在时钟频率相同的前提下,相对于 SDRAM 在一个时钟周期内可以表示两位数据,速度翻倍。再有就是 DDR2 和 DDR3,他们与 DDR SDRAM 通信方式一样,只是通信的时钟频率提高了。(当前个人计算机多为 DDR3 或者 DDR4 ),这是目前主流的内存类型。DDR SDRAM、DDR2 SDRAM、DDR3 SDRAM、DDR4 SDRAM都属于SDRAM类型,其主要区别在于速度、容量与功耗。
主要用于电脑内存
2.2 静态随机存储器–SRAM(Static RAM)
SRAM 的存储单元是由 6个晶体管(6T)构成,不需要定时刷新(断电还是会丢失数据的)。异步SRAM用的比较广泛。访问速度通常 1~10ns 级。
(1)这里的“静态”,是指这种存储器只要保持通电状态,里面储存的数据就可以保持稳定,不需要像DRAM那样去刷新电路;但注意掉电时数据还是会消失的。
(2)SRAM速度非常快,是目前读写最快的存储设备。
Tips📌:
DRAM 结构简单,生产相同容量的存储器,DRAM 成本低,集成度高,但是他的存取速度不如 SRAM,所以在实际应用中,SRAM 一般用于CPU内部高速缓存(Cache),而外部扩展的内存一般用 DRAM。
2.3 DRAM和SRAM比较
特性 | SRAM(片内) | DRAM(片外) |
---|---|---|
访问速度 | 1-10ns | 50-100ns |
存储密度 | 低(6T/单元) | 高(1T1C/单元) |
功耗 | 高(静态电流) | 低(动态刷新功耗) |
成本 | 高(占芯片面积) | 低(可外扩) |
典型容量 | 几 KB ~ 几 MB | 几十 MB ~ 几 GB |
应用场景:
SRAM:芯片内部集成的RAM(如 STM32 的 128KB SRAM),高速缓存(Cache,如 Cortex-M7 的 TCM 内存),对实时性要求高的场合(如中断服务程序变量)。MCU上一般定义的全局变量都是存放在SRAM中的(也可以通过连接脚本控制)
DRAM:外挂大容量内存(如 Linux 嵌入式系统的 DDR SDRAM),需要大容量存储且对成本敏感的场景(如视频缓存)。一般超过片内 SRAM 容量的大数组,需要动态内存分配的大型缓存等内容存放在DRAM中(并不是所有的板子都存在DRAM的)
三、非易失性存储器–ROM and FLASH
种类较多,半导体类的有 ROM 和 Flash,其他的还有光盘、软盘、机械硬盘等。本文主要讨论ROM和FLASH。
3.1 ROM
ROM(Random Only Memory-只读存储器),它的内容在出厂时就已经被编程,不可修改。在嵌入式系统中,ROM通常用于存储启动代码、关键配置参数和系统固件,保了系统的稳定运行和数据可靠性。ROM数据具有永久保存特性,即使在断电情况下也能保持数据完整性,且无法被更改或删除。ROM的主要优点是读写速度快、容量大、可靠性高,价格便宜,但不支持擦写和编程,存储内容无法更新,存储速度不如RAM。
ROM一般情况下只能读取而不能修改该介质里面的数据(按照EEPROM的描述,还是可以修改数据的,因此这句话改为“不能随意写”更为妥当)。
在单片机中用来存储程序数据及常量数据或变量数据,凡是c文件及h文件中所有代码、全局变量、局部变量、‘const’限定符定义的常量数据、startup.asm文件中的代码(类似ARM中的bootloader或者X86中的BIOS,一些低端的单片机是没有这个的)通通都存储在ROM中。
ROM具有以下主要特点:
- 只读性:ROM中的数据在制造过程中被写入,一旦写入后就无法被修改或擦除。这使得ROM非常适合存储固定的程序代码、固件、操作系统等不需要修改的数据。
- 持久性:与RAM和FLASH闪存不同,ROM中的数据在断电或重新启动后仍然保持不变。这使得ROM非常适合存储需要长期保存的数据,如固定的程序代码和配置信息。
- 高可靠性:由于ROM中的数据无法被修改或擦除,所以它具有非常高的可靠性和稳定性。这使得ROM非常适合用于存储关键的系统代码和数据,以确保系统的正常运行。
- 低功耗:由于ROM不需要电力来维持存储的数据,所以它具有很低的功耗。这使得ROM非常适合用于低功耗设备和嵌入式系统,以延长电池寿命。
例如,计算机的BIOS(基本输入输出系统)是存储在ROM中的。当我们打开计算机时,BIOS会首先运行,负责初始化硬件设备和加载操作系统。由于ROM的数据是只读的,所以BIOS在计算机启动过程中是不可修改的。
为了便于使用和大批量生产,进一步发展出了可编程只读存储器(PROM)、可擦除可编程只读存储(EPROM)。EPROM需要用紫外线长时间照射才能擦除,使用很不方便。1980年又出现了电可擦除可编程只读存储器(EEPROM),它克服了EPROM的不足,但是集成度不高、价格较贵。于是又发展出了一种新型的存储单元结构同EPROM类似的快闪存储器(FLASH MEMORY)。FLASH集成度高、功耗低、体积小,又能在线快速擦除,因而获得了快速发展。
类型 | 特点 |
---|---|
MASK ROM | 出厂固化,不可修改 |
PROM | 一次可编程存储器,不可擦 |
EPROM | 只能使用紫外线擦除,基本被淘汰,被EEPROM代替 |
EEPROM | 可以按字节为单位修改数据,无需擦除整个芯片。但是集成度不高、价格较贵。 |
FLASH | 集成度高、功耗低、体积小,又能在线快速擦除。 |
但随着技术的发展,通常将掉电后数据不会消失的半导体存储器都泛称为 ROM ,因此现在的 ROM 一般是指 EEPROM 和 FLASH 。
EEPROM常用于接口卡,用于存放硬件设置数据,如接口卡配置信息
3.2 Flash
Flash 全名为Flash Memory,我们平时一般叫“闪存”,是存储芯片的一种。它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还可以快速读取数据的优势,使数据不会因为断电而丢失。容量一般比 EEPROM 大得多,擦除时一般以多个字节为单位,
FLASH闪存具有以下主要特点:
- 非易失性:FLASH闪存存储的数据在断电后仍然保持,不需要电源维持。这使得FLASH闪存非常适合用于存储重要的数据和程序代码。
- 快速访问:FLASH闪存具有快速的读取和写入速度,可以实现高性能的数据存取。这使得它适用于需要快速存取数据的应用,如操作系统、应用程序和游戏。
- 高密度:FLASH闪存的存储单元采用浮栅晶体管结构,可以非常紧密地组织在一起,从而实现高存储密度,容量可达 TB 级(如 NAND Flash)。
- 低功耗:FLASH闪存在读取和写入数据时消耗的能量相对较低,适合用于便携设备和移动设备。这使得它成为手机、相机、便携式媒体播放器等设备的理想存储解决方案。
- 耐用性:FLASH闪存具有较高的耐用性,可以承受大量的擦写操作。每个存储单元的擦写次数有限,但通过使用擦除算法和均衡技术,可以延长FLASH闪存的寿命。
根据存储单元电路不同分为 NOR Flash 和 NAND Flash。NOR Flash 和 NAND Flash 的共性是在数据写入前都需要进行擦除操作,而擦除操作一般是以 “ 扇区 / 块 ” 为单位的。
NOR 和 NAND 特性的差别主要在于其内部 “ 地址 / 数据线 ” 是否分开。NOR 是分开的,可以按字节为单位读写数据,符合 CPU 指令译码要求,所以如果在其中存储的是代码,就具有立即执行的特性,而 NAND 数据和地址线公用,只能按 “块” 读写数据,所以其中存储代码的话,不具有立即执行的特性,需要先把代码加载到 RAM 存储器上,再由 CPU 执行。所以,在功能上,可以认为 NOR 是一种断电后数据不丢失的 RAM,只是擦除单位于 RAM 有区别,且读写速度比 RAM 慢很多。
特点 | NOR Flash | NAND Flash |
---|---|---|
结构特点 | 存储单元并联,支持随机访问;每个存储单元独立寻址(类似 RAM) | 存储单元串联,按页(Page)和块(Block)管理;通过复杂的控制器(如 FTL)管理坏块和磨损均衡。 |
优势 | XIP(Execute In Place):CPU 可直接从 NOR 执行代码,无需加载到 RAM;高可靠性:适合存储关键代码(如 Bootloader) | 高密度低成本:单位容量价格仅为 NOR 的 1/10。高速顺序读写:顺序读 >500MB/s |
缺点 | 存储密度低,成本高(单位容量价格是 NAND 的 5-10 倍) | 随机访问慢(需整页读取);需要 ECC 纠错(原始误码率高) |
场景 | 嵌入式系统固件(如路由器、智能手表);汽车 ECU 的启动代码存储 | 大容量存储设备(SSD、U 盘、手机存储,固态硬盘)。 |
Flash存储器是非易失性存储器,它可以被反复擦写和编程。在嵌入式系统中,Flash通常用于保存程序代码和数据,例如U-Boot、内核镜像、文件系统等。Flash存储器的主要优点是具有大容量、低功耗和高可靠性等特点,但它的擦写次数受到限制,一般只能擦写几万次。因此,在实际应用中,需要采用特殊的算法和策略来延长Flash的寿命。
四、总结
ROM是只读存储器,其中存储的数据只能被读取,而不能被写入或修改。它通常包含计算机系统的启动程序和其他重要的系统信息。
FLASH是一种可擦写非易失性存储器,它可以被重复写入和修改。它通常用于存储操作系统、应用程序和用户数据。
RAM是一种易失性存储器,其中存储的数据可以被读取、写入和修改,但在断电后数据会消失。它通常用于临时存储计算机程序和数据。
五、常见问题
5.1 缓存与寄存器的区别
缓存和寄存器都是计算机硬件组件,它们用于临时存储数据以提高处理器和内存之间的数据传输速度。尽管它们的目的相似,但它们之间存在一些关键区别:
-
存储位置:寄存器位于处理器(CPU)内部,是一种高速存储器。它们用于存储和处理中间结果、指令和其他重要数据。缓存位于CPU和主内存之间,可以是内部或外部的。它们主要用于存储处理器经常访问的数据和指令,以减少处理器和主内存之间的访问延迟。
-
存储容量:寄存器的数量有限,存储容量相对较小。然而,缓存的容量要大得多,可以存储更多数据和指令。缓存通常分为多级(如L1、L2和L3缓存),其中L1缓存最接近CPU,具有最小的访问延迟,但容量有限;L2和L3缓存具有更大的容量,但访问延迟稍长。
-
数据访问速度:寄存器的访问速度是最快的,因为它们位于CPU内部。缓存的访问速度要慢一些,但仍然比主内存快。多级缓存中,L1缓存的访问速度最快,L2和L3缓存的访问速度略慢。
-
数据管理:寄存器中的数据通常由处理器和编译器显式管理。程序员可以使用某些编程语言(如C语言中的
register
关键字)来建议将某个变量存储在寄存器中,但最终决定由编译器和处理器决定。缓存中的数据是由硬件自动管理的,通常基于某种缓存替换策略(如最近最少使用,LRU)来决定哪些数据应该被存储在缓存中。
总之,寄存器和缓存都用于临时存储数据以提高处理器性能,但它们在存储位置、容量、访问速度和数据管理方面存在一些关键区别。
5.2 缓存与内存的区别
缓存(一般为SRAM)和内存(一般为DRAM)都是计算机系统中用于存储数据的硬件组件。它们在存储位置、访问速度、容量和用途方面有一些关键区别。以下是缓存和内存之间的一些主要区别:
-
存储位置:缓存位于CPU和主内存(通常称为RAM)之间,可以是内部或外部的。它们用于存储处理器经常访问的数据和指令,以减少处理器和主内存之间的访问延迟。内存是计算机系统的一部分,用于存储程序和数据。
-
访问速度:缓存的访问速度比内存快。缓存被设计成具有较低的访问延迟,以便处理器能更快地访问存储在其中的数据。内存的访问速度较慢,尤其是与寄存器和缓存相比。
-
容量:缓存的容量相对较小,因为它只存储处理器经常访问的数据和指令。内存的容量要大得多,用于存储程序和数据。
-
用途:缓存主要用于减少CPU访问内存的延迟,提高系统性能。当CPU需要访问某个内存地址时,它首先检查缓存是否包含该地址的内容。如果找到匹配项(称为缓存命中),CPU将直接从缓存中读取数据,而不是从内存中读取。如果未找到匹配项(称为缓存未命中),CPU将从内存中读取数据,并将其存储在缓存中以供将来使用。内存用于存储程序和数据,在计算机启动时加载操作系统和应用程序。
总之,缓存和内存是计算机系统中用于存储数据的硬件组件,它们在存储位置、访问速度、容量和用途方面有一些关键区别。