Flash、RAM、ROM的区别

一、 ROM(Read Only Memory)

ROM (Read Only Memory),只读存储器。用来存储和保存数据。ROM 数据不能随意更新,但是在任何时候都可以读取。即使是断电,ROM 也能够保留数据。

ROM 也有很多种:

  • PROM 是可编程一次性(无法修改)的 ROM;
  • EPROM 是紫外线可擦除可编程的 ROM;
  • EEPROM 是电可擦除可编程的 ROM , 按字节进行删除和重写, 写入时间很长, 写入很慢; 现在多用作非易失的数据存储器。特点是可以随机访问和修改任何一个字节,可以往每个 bit 中写入0或者1。这是最传统的一种 EEPROM ,掉电后数据不丢失,可以保存100年,可以擦写100w次。具有较高的可靠性,但是电路复杂/成本也高。因此目前的 EEPROM 都是几十千字节到几百千字节的,绝少有超过512K的。

二、 RAM(Random Access Memory)

RAM (Random Access Memory), 随机存取存储器。是与 CPU 直接交换数据的内部存储器,也叫内存。它可以随时读写,而且速度很快,通常作为操作系统或其他正在运行中的程序的临时数据存储媒介, 当电源关闭时RAM不能保留数据。RAM 可以进一步分为静态 RAM(SRAM)和动态内存(DRAM)两大类。

  • 静态RAM(Static RAM/SRAM):SRAM速度非常快,不需要刷新电路即能保存数据,是目前读写最快的存储设备了,但是集成度较低,非常昂贵,多用于CPU的一级缓存,二级缓存(L1/L2 Cache)。
  • 动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短(需要内存刷新电路,每隔一段时间,刷新充电一次,否则数据会消失),速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的。

DRAM 分为很多种,常见的主要有 FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM 以及 WRAM 等,这里介绍其中的一种 DDR RAM。

DDR RAM(Date-Rate RAM)也称作 DDR SDRAM ,这种改进型的RAM和SDRAM是基本一样的,不同之处在于它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存,而且它有着成本优势,事实上击败了Intel的另外一种内存标准-Rambus DRAM。在很多高端的显卡上,也配备了高速 DDR RAM 来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。

内存工作原理:内存是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即 DRAM ),动态内存中所谓的"动态"指的是当我们将数据写入 DRAM 后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。

具体的工作过程是这样的:一个 DRAM 的存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因;刷新操作定期对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量小于1/2,则认为其代表0,并把电容放电,藉此来保持数据的连续性。

三、 FLASH Memory

1. FLASH闪存

FLASH闪存,它属于内存器件的一种,是一种不挥发性( Non-Volatile )内存,结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。

在过去的20年里,嵌入式系统一直使用 ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)。

FLASH属于广义上的ROM,和EEPROM的最大区别是FLASH按扇区操作,相对于EEPROM的改进就是擦除时不再以字节为单位,而是以块为单位,一次简化了电路,数据密度更高,降低了成本。上M的ROM一般都是FLASH。而EEPROM则按字节操作。目前Flash主要有两种NOR Flash和NADN Flash。

  • NOR Flash:NOR Flash 的读取和我们常见的 SDRAM 的读取是一样,用户可以直接运行装载在 NOR FLASH 里面的代码,这样可以减少 SRAM 的容量从而节约了成本。一般小容量的用 NOR Flash ,因为其读取速度快,多用来存储操作系统等重要信息。 NOR FLASH 数据线和地址线分开,可以实现RAM一样的随机寻址功能,可以读取任何一个字节,但是擦除仍要按块来擦。
  • NADN Flash:没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取 512 个字节,采用这种技术的 Flash 比较廉价。用户不能直接运行 NAND Flash 上的代码,因此好多使用 NAND Flash 的开发板除了使用 NAND Flah 以外,还作上了一块小的 NOR Flash 来运行启动代码。大容量的用 NAND FLASH ,最常见的 NAND FLASH 应用是嵌入式系统采用的 DOC(Disk On Chip)和我们通常用的"闪盘",可以在线擦除。 NAND FLASH 同样是按块擦除,但是数据线和地址线复用,不能利用地址线随机寻址。读取只能按页来读取。( NAND FLASH 按块来擦除,按页来读,NOR FLASH 没有页)。由于 NAND FLASH 引脚上复用,因此读取速度比 NOR FLASH 慢一点,但是擦除和写入速度比 NOR FLASH 快很多。NAND FLASH 内部电路更简单,因此数据密度大,体积小,成本也低。因此大容量的flash都是NAND FLASH型的。小容量的2~12M的flash多是NOR FLASH型的。

目前市面上的 FLASH 主要来自 Intel,AMD,Fujitsu 和 Toshiba,而生产 NAND Flash 的主要厂家有 Samsung和 Toshiba。根据不同的生产厂商和不同的应用,闪存卡大概有U盘、SmartMedia(SM卡)、Compact Flash(CF卡)、MultiMediaCard(MMC卡)、Secure Digital(SD卡)、Memory Stick(记忆棒)、MS卡、TF卡(Micro SD卡)、PCIe闪存卡、XD-Picture Card(XD卡)和微硬盘(MICRODRIVE)这些闪存卡虽然外观、规格不同,但是技术原理都是相同的。

FLASH 工作原理:Flash Memory,属于非易失性存储设备(Non-volatile Memory Device),Flash 的内部存储是 MOSFET,里面有个悬浮门(Floating Gate),是真正存储数据的单元。数据在Flash内存单元中是以电荷(electrical charge) 形式存储的。存储电荷的多少,取决于图中的外部门(external gate)所被施加的电压,其控制了是向存储单元中冲入电荷还是使其释放电荷。而数据的表示,以所存储的电荷的电压是否超过一个特定的阈值Vth来表示。

对于数据的表示,单个存储单元中内部所存储电荷的电压,和某个特定的阈值电压Vth,相比,如果大于此Vth值,就是表示1,反之,小于Vth,就表示0;对于nand Flash的数据的写入1,就是控制External Gate去充电,使得存储的电荷够多,超过阈值Vth,就表示1了。而对于写入0,就是将其放电,电荷减少到小于Vth,就表示0了。

2. SSD与HDD

  • HDD:硬盘驱动器(Hard Disk Drive),最基本的电脑存储器,也就是机械硬盘,靠磁场存储信息,故也称为磁盘。在这里不做过多介绍。
  • SSD:固态硬盘(Solid State Drives),简称固盘。由控制单元和存储单元(FLASH芯片、DRAM芯片)组成。固态硬盘的存储介质分为两种,一种是采用闪存(FLASH芯片)作为存储介质,另外一种是采用DRAM作为存储介质。
  • 基于DRAM类:采用DRAM作为存储介质,应用范围较窄。它仿效传统硬盘的设计,可被绝大部分操作系统的文件系统工具进行卷设置和管理,并提供工业标准的PCI和FC接口用于连接主机或者服务器。应用方式可分为SSD硬盘和SSD硬盘阵列两种。它是一种高性能的存储器,而且使用寿命很长,美中不足的是需要独立电源来保护数据安全。DRAM固态硬盘属于比较非主流的设备。
  • 基于闪存类:基于闪存的固态硬盘采用FLASH芯片作为存储介质,这也是通常所说的SSD。它的外观可以被制成笔记本硬盘、微硬盘、存储卡、U盘等样式。 固态硬盘SSD内主体其实就是一块PCB板,而这块PCB板上最基本的配件就是控制芯片,缓存芯片(部分低端硬盘无缓存芯片)和用于存储数据的闪存芯片。
  • 缓存芯片:主控芯片旁边是缓存芯片,固态硬盘和传统硬盘一样需要高速的缓存芯片辅助主控芯片进行数据处理。这里需要注意的是,有一些廉价固态硬盘方案为了节省成本,省去了这块缓存芯片,这样对于使用时的性能会有一定的影响。
  • 闪存芯片:除了主控芯片和缓存芯片以外,PCB板上其余的大部分位置都是NAND Flash闪存芯片了。NAND Flash闪存芯片又分为SLC(单层单元)MLC(多层单元)以及TLC(三层单元)NAND闪存。

SLC、MLC、TLC NAND的区别

对于基于NAND存储技术的设备而言,无论是U盘还是SSD,甚至是SD卡,都会涉及到一个问题成本,于是产品设计从SLC转变到MLC,再到TLC,甚至QLC也将在后续问世,那么SLC、MLC、TLC究竟对用户有什么影响呢?

  • SLC--SLC英文全称(Single Level Cell——SLC)即单层式储存 SLC技术特点是在浮置闸极与源极之中的氧化薄膜更薄,在写入数据时通过对浮置闸极的电荷加电压,然后透过源极,即可将所储存的电荷消除,通过这样的方式,便可储存1个信息单元,这种技术能提供快速的程序编程与读取,不过此技术受限于Silicon efficiency的问题,必须要由较先进的流程强化技术(Process enhancements),才能向上提升SLC制程技术。
  • MLC--MLC英文全称(Multi Level Cell——MLC)即多层式储存 英特尔(Intel)在1997年9月最先开发成功MLC,其作用是将两个单位的信息存入一个Floating Gate(闪存存储单元中存放电荷的部分),然后利用不同电位(Level)的电荷,通过内存储存的电压控制精准读写。MLC通过使用大量的电压等级,每 个单元储存两位数据,数据密度比较大。SLC架构是0和1两个值,而MLC架构可以一次储存4个以上的值,因此,MLC架构可以有比较好的储存密度。
  • TLC--TLC英文全称(Trinary-Level Cell)即三层式储存 TLC即3bit per cell,每个单元可以存放比MLC多1/2的数据,共八个充电值,所需访问时间更长,因此传输速度更慢。TLC优势价格便宜,每百万字节生产成本是最低的,但是寿命短,只有约1000次擦写寿命。

正如上面的介绍,从SLC到MLC再到TLC,cell对于电压的精确控制更高,这直接导致TLC的寿命下降到只有1000次PE,而对应的SLC和MLC分别为10000和3000,相对来说TLC的耐久度显著下降。

TLC的另外一个劣势就是数据的读写效率,在SLC时代,1个cell一次只需要读取/写入1个bit,到MLC时代每次需要读取/写入2bit,而到TLC时代则上升到3bit,很显然其性能受到电压控制的程序复杂度会变慢,当然由于工艺和主控的不断升级,目前TLC已经可以追平MLC产品。

不过TLC耐久的硬伤短时间内并无法得到有效解决,当然TLC的耐久可以通过存储设备的容量加大而均衡磨损,变相延长了产品的使用寿命。

3. eMMC与USF2.0

在手机兴起的这几年中,手机的闪存规格有了很大的提高,eMMC规格的标准逐渐从eMMC 4.3时代发展到现在的eMMC 5.0存储产品,手机的闪存性能有了十分大的提高。不过,现在一种新的闪传规格已经出现,它就是UFS 2.0闪传标准,有着比eMMC 5.0更快的读取性能。

  • eMMC闪传规格:eMMC的全称为“embedded Multi Media Card”,是由MMC协会所订立的、主要是针对手机或平板电脑等产品的内嵌式存储器标准规格。eMMC的一个明显优势是在封装中集成了一个控制器,它提供标准接口并管理闪存,eMMC利用的是它将主控制器、闪存颗粒整合到了一个小的BGA封装内。

eMMC=NAND Flash+控制器+标准封装接口

现在,eMMC 4.5已经问世,eMMC 4.4的读取速度大约为104MB/s、eMMC 4.5则为200MB/s,性能在当时也是十分优秀的;而在2013年7月29日三星开始量产行业首款eMMC 5.0存储产品,其读取速度为400MB/s,但是因为使用的是8位并行界面,因此性能潜力已经基本到达瓶颈,以最新的eMMC 5.1规范来说,其理论带宽为600MB/s左右,性能的大提升基本是不可能的了。

  • UFS 2.0:UFS 2.0的闪存规格则采用了新的标准,它使用的是串行界面,很像PATA、SATA的转换。并且它支持全双工运行,可同时读写操作,还支持指令队列。相比之下,eMMC是半双工,读写必须分开执行,指令也是打包的,在速度上就已经是略逊一筹了。而且UFS芯片不仅传输速度快,功耗也要比eMMC 5.0低一半,可以说是旗舰手机闪存的理想搭配。

其实,JEDEC在2013年9月就已经发布了UFS 2.0的新一代闪存存储标准,UFS 2.0闪存读写速度可以高达每秒1400MB,这相当于在两秒钟内读写两个CD光盘的数据,不仅比eMMC有更巨大的优势,而且它甚至能够让电脑上使用的闪存存储介质固态硬盘也相形见绌。

除了在速度性能方面有着巨大优势之外,在功耗方面UFS 2.0也有更好表现。事实上,如果从功耗方面来比较,即使是新一代的UFS 2.0标准也是能够与eMMC持平。不过eMMC和UFS 2.0在操作过程中消耗的功率约为1mW(毫瓦),而待机状态下功耗将低于0.5mW。当UFS 2.0满载时,所消耗的功率实际上比eMMC还要多,但它可以更快地完成操作而更早地切换到待机状态,因此在功耗方面的表现UFS 2.0与eMMC不相上下。

在传输速度方面,UFS 2.0可以说远远超过eMMC的。即使与当前最新的eMMC 5.0标准相比,UFS 2.0的速度也高出3倍。UFS 2.0可以在UFS主机与闪存之间以全双工模式进行交换,读写可以同时执行。另外,UFS 2.0附加的控制通道可以有效地确保数据的安全传输,不必再因为读写操作而做不必要的等待,这是UFS 2.0获得更高速度的关键。据了解,UFS 2.0有两个版本,均有两个传输信道。HS-G2的理论带宽就有5.8Gbps,也就是超过了740MB/s,HS-G3更是翻番到11.6Gbps,接近了1.5GB/s,速度方面UFS 2.0完胜。

总结: 虽然eMMC在传输速度和性能方面不及现在最新的UFS 2.0,但在日后相当长的一段时间内,还是会继续占领移动产品闪存芯片的主流。因为eMMC有着更成熟的工艺,能够大规模生产,成本更低更适合大众化的移动产品闪存芯片需求;而UFS 2.0虽然很好,但是生产成本较高,在现在刚开始投入市场的初期,只能够被放在高端产品上使用。但以现在的趋势来看,UFS 2.0将会逐渐成为移动产品市场的主流相信是不成问题,毕竟科技是需要进步的。

四、 补充说明

什么是SDRAM?

SDRAM(Synchronous DRAM): 同步动态随机存储器。目前的168线64bit带宽内存基本上都采用SDRAM芯片,工作电压3.3V电压,存取速度高达7.5ns,而EDO内存最快为15ns。并将RAM与CPU以相同时钟频率控制,使RAM与CPU外频同步,取消等待时间。所以其传输速率比EDO DRAM更快。

什么是DDR SDRAM?

DDR(Double Data Rate)SDRAM。其核心建立在SDRAM的基础上,但在速度上有了提高。SDRAM仅在时钟信号的上升沿读取数据,而DDR在时钟信号的上升沿和下降沿都读取数据,因此,它的速度是标准SDRAM的2倍。

什么是RDRAM?

RDRAM(Rambus DRAM):总线式动态随机存储器,是由RAMBUS公司与INTEL公司合作提出的一项专利技术,它的数据传输率最高可达800MHZ,而它的总线宽度却仅为16bit,远远小于现在的SDRAM的64bit。

什么是SPD?

SPD (Serial Presence Detect): SPD 是一颗8针的 EEPROM(Electrically Erasable Programmable ROM 电可擦写可编程只读存储器), 容量为256字节,里面主要保存了该内存的相关资料,如容量、芯片厂商、内存模组厂商、工作速度等。SPD的内容一般由内存模组制造商写入。支持SPD的主板在启动时自动检测SPD中的资料,并以此设定内存的工作参数。
现在的单片机,RAM主要是做运行时数据存储器,FLASH主要是程序存储器,EEPROM主要是用以在程序运行保存一些需要掉电不丢失的数据. 另外,一些变量,都是放到RAM里的,一些初始化数据比如液晶要显示的内容界面,都是放到FLASH区里的(也就是以前说的ROM区),EEPROM可用可不用,主要是存一些运行中的数据,掉电后且不丢失。

五、ROM,RAM和FLASH在单片中的作用

ROM——存储固化程序的(存放指令代码和一些固定数值,程序运行后不可改动)
c文件及h文件中所有代码、全局变量、局部变量、’const’限定符定义的常量数据、startup.asm文件中的代码(类似ARM中的bootloader或者X86中的BIOS,一些低端的单片机是没有这个的)通通都存储在ROM中。
RAM——程序运行中数据的随机存取(掉电后数据消失)
整个程序中,所用到的需要被改写的量,都存储在RAM中,“被改变的量”包括全局变量、局部变量、堆栈段。

FLASH——存储用户程序和需要永久保存的数据。
例如:现在家用的电子式电度表,它的内核是一款单片机,该单片机的程序就是存放在ROM里的。电度表在工作过程中,是要运算数据的,要采集电压和电流,并根据电压和电流计算出电度来。电压和电流时一个适时的数据,用户不关心,它只是用来计算电度用,计算完后该次采集的数据就用完了,然后再采集下一次,因此这些值就没必要永久存储,就把它放在RAM里边。然而计算完的电度,是需要永久保存的,单片机会定时或者在停电的瞬间将电度数存入到FLASH里。

ROM,RAM和FLASH在单片中的运作原理:
1、程序经过编译、汇编、链接后,生成hex文件;
2、用专用的烧录软件,通过烧录器将hex文件烧录到ROM中
注:这个时候的ROM中,包含所有的程序内容:一行一行的程序代码、函数中用到的局部变量、头文件中所声明的全局变量,const声明的只读常量等,都被生成了二进制数据。
疑问:既然所有的数据在ROM中,那RAM中的数据从哪里来?什么时候CPU将数据加载到RAM中?会不会是在烧录的时候,已经将需要放在RAM中数据烧录到了RAM中?
答:
(1)ROM是只读存储器,CPU只能从里面读数据,而不能往里面写数据,掉电后数据依然保存在存储器中;RAM是随机存储器,CPU既可以从里面读出数据,又可以往里面写入数据,掉电后数据不保存,这是条永恒的真理,始终记挂在心。
(2)RAM中的数据不是在烧录的时候写入的,因为烧录完毕后,拔掉电源,当再给MCU上电后,CPU能正常执行动作,RAM中照样有数据,这就说明:RAM中的数据不是在烧录的时候写入的,同时也说明,在CPU运行时,RAM中已经写入了数据。
3、ROM中包含所有的程序内容,在MCU上电时,CPU开始从第1行代码处执行指令。这里所做的工作是为整个程序的顺利运行做好准备,或者说是对RAM的初始化(注:ROM是只读不写的),工作任务有几项:
(1)为全局变量分配地址空间---如果全局变量已赋初值,则将初始值从ROM中拷贝到RAM中,如果没有赋初值,则这个全局变量所对应的地址下的初值为0或者是不确定的。当然,如果已经指定了变量的地址空间,则直接定位到对应的地址就行,那么这里分配地址及定位地址的任务由“连接器”完成。
(2)设置堆栈段的长度及地址---用C语言开发的单片机程序里面,普遍都没有涉及到堆栈段长度的设置,但这不意味着不用设置。堆栈段主要是用来在中断处理时起“保存现场”及“现场还原”的作用,其重要性不言而喻。而这么重要的内容,也包含在了编译器预设的内容里面,确实省事,可并不一定省心。
(3)分配数据段data,常量段const,代码段code的起始地址——代码段与常量段的地址可以不管,它们都是固定在ROM里面的,无论它们怎么排列,都不会对程序产生影响。但是数据段的地址就必须得关心。数据段的数据时要从ROM拷贝到RAM中去的,而在RAM中,既有数据段data,也有堆栈段stack,还有通用的工作寄存器组。通常,工作寄存器组的地址是固定的,这就要求在绝对定址数据段时,不能使数据段覆盖所有的工作寄存器组的地址。必须引起严重关注。
注:这里所说的“第一行代码处”,并不一定是你自己写的程序代码,绝大部分都是编译器代劳的,或者是编译器自带的demo程序文件。因为,你自己写的程序(C语言程序)里面,并不包含这些内容。高级一点的单片机,这些内容,都是在startup的文件里面。
4、普通的flashMCU是在上电时或复位时,PC指针里面的存放的是“0000”,表示CPU从ROM的0000地址开始执行指令,在该地址处放一条跳转指令,使程序跳转到_main函数中,然后根据不同的指令,一条一条的执行,当中断发生时(中断数量也很有限,2~5个中断),按照系统分配的中断向量表地址,在中断向量里面,放置一条跳转到中断服务程序的指令,如此如此,整个程序就跑起来了。决定CPU这样做,是这种ROM结构所造成的。
注:特别的,如下
1--I/O口寄存器:也是可以被改变的量,它被安排在一个特别的RAM地址,为系统所访问,而不能将其他变量定义在这些位置。
2--中断向量表:中断向量表是被固定在MCU内部的ROM地址中,不同的地址对应不同的中断。每次中断产生时,直接调用对应的中断服务子程序,将程序的入口地址放在中断向量表中。


原文链接:

Flash、RAM、ROM的区别『转载』 - 知乎

单片机中的ROM,RAM和FLASH的作用_单片机flash的作用_小白study的博客-CSDN博客

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值