ROM、RAM、SRAM、DRAM、FLASH区别(转载+梳理)

ROM、RAM、SRAM、DRAM、FLASH区别


    ROM和RAM指的都是半导体存储器,ROM在系统停止供电的时候仍然可以保持数据,而RAM通常都是在掉电之后就丢失数据,典型的RAM就是计算机的内存。

  • ROM(Read Only Memory)

    ROM是只读存储器,掉电时可以保存数据:    
    只读存储器,在单片机运行时,只能从中读取数据,不能向里面写数据。特点是掉电不丢失数据,在单片机中主要用来存储代码和常量等内容。

ROM种类:
    ROM也有很多种,PROM是可编程的ROM,PROM和EPROM(可擦除可编程ROM)两者区别是,PROM是一次性的,也就是软件灌入后无法修改,这种是早期的产品,现在已经不可能使用了;而EPROM是通过紫外光的照射擦除原先的程序,是一种通用的存储器。另外一种EEPROM是通过电子擦出,价格很高,写入时间很长,写入很慢。
     举个例子,手机软件一般放在EEPROM中,我们打电话,有些最后拨打的号码,暂时是存在SRAM中的,不是马上写入通讯记录(通话记录保存在EEPROM中),因为当时有很重要工作(通话)要做,如果写入,漫长的等待是让用户忍无可忍的。

  • RAM(Random Access Memory)随机存储器

    可读可写,特点是掉电会丢失数据。
    RAM又分为SRAM(Static RAM)和DRAM(Dynamic RAM),SRAM是读写速度非常快的存储设备,但价格昂贵。DRAM比ROM速度快,但是比SRAM速度慢,价格低于SRAM,计算机内存使用的就是DRAM。
    静态RAM(Static RAM/SRAM),SRAM速度非常快,是目前读写最快的存储设备了;但它也非常昂贵,所以只在要求很苛刻的地方使用,譬如CPU的一级缓冲,二级缓冲;掉电数据消失,持续供电时数据一直存在,不需要动态刷新。
    动态RAM(Dynamic RAM/DRAM),DRAM保留数据的时间很短,速度也比SRAM慢,不过它还是比任何的ROM都要快,但从价格上来说DRAM相比SRAM要便宜很多,计算机内存就是DRAM的;掉电数据丢失,供电时需要刷新电路(因为栅极会漏电)
    SDRAM(同步动态随机存储器)比DRAM多一个同步时钟。

    DRAM分为很多种,常见的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等,这里介绍其中的一种DDR RAM。
     DDR RAM(Date-Rate RAM)也称作DDR SDRAM,这种改进型的RAM和SDRAM是基本一样的,不同之处在于:它可以在一个时钟读写两次数据,这样就使得数据传输速度加倍了。这是目前电脑中用得最多的内存。在很多高端的显卡上,也配备了高速DDR RAM来提高带宽,这可以大幅度提高3D加速卡的像素渲染能力。

 

  • 内存工作原理:

    内存是用来存放当前正在使用的(即执行中)的数据和程序,我们平常所提到的计算机的内存指的是动态内存(即DRAM),动态内存中所谓的"动态",指的是当我们将数据写入DRAM后,经过一段时间,数据会丢失,因此需要一个额外设电路进行内存刷新操作。
     具体的工作过程是这样的:一个DRAM的存储单元存储的是0还是1取决于电容是否有电荷,有电荷代表1,无电荷代表0。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因;刷新操作定期对电容进行检查,若电量大于满电量的1/2,则认为其代表1,并把电容充满电;若电量小于1/2,则认为其代表0,并把电容放电,借此来保持数据的连续性。


==========================================================================================
    SRAM : 静态RAM,不用刷新,速度可以非常快,像CPU内部的cache,都是静态RAM,缺点是一个内存单元需要的晶体管数量多,因而价格昂贵,容量不大。 (SRAM :Static RAM,静态随机存储器。SRAM主要用于制造Cache)
    DRAM: 动态RAM,需要刷新,容量大。(DRAM :Dynamic RAM,动态随机存储器。DRAM用于通常的数据存取。我们常说内存有多大,主要是指DRAM的容量)
    SDRAM :同步动态RAM,需要刷新,速度较快,容量大。(SDRAM:Synchronous DRAM,扩充数据输出内存’,它比一般DRAM和EDO RAM速度都快,它已经逐渐成为PC机的标准内存配置)
    DDR SDRAM: 双通道同步动态RAM,需要刷新,速度快,容量大。

 

PSRAM,假静态随机存储器,基本原理:
    PSRAM就是伪SRAM,内部的内存颗粒跟SDRAM的颗粒相似,但外部的接口跟SRAM相似,不需要SDRAM那样复杂的控制器和刷新机制,PSRAM的接口跟SRAM的接口是一样的。
     PSRAM容量有8Mbit,16Mbit,32Mbit等等,容量没有SDRAM那样密度高,但肯定是比SRAM的容量要高很多的,速度支持突发模式,并不是很慢,Hynix,Coremagic, WINBOND .MICRON. CY 等厂家都有供应,价格只比相同容量的SDRAM稍贵一点点,比SRAM便宜很多。
    PSRAM主要应用于手机,电子词典,掌上电脑、PDA、PMP、MP3/4、GPS接收器等消费电子产品与SRAM(采用6T的技术)相比,PSRAM采用的是1T+1C的技术,所以在体积上更小,同时,PSRAM的I/O接口与SRAM相同.在容量上,目前有4MB,8MB,16MB,32MB,64MB和128MB。比较于SDRAM,PSRAM的功耗要低很多。所以对于要求有一定缓存容量的很多便携式产品是一个理想的选择。

  • FLASH存储器:

        FLASH存储器又称闪存,它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能,还不会断电丢失数据,同时可以快速读取数据(NVRAM的优势),U盘和MP3里用的就是这种存储器。在过去的20年里,嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,它用作存储Bootloader以及操作系统或者程序代码,或者直接当硬盘使用(U盘)
                          NOR                                           NAND
类型理解    (或非)                                          (与非)
接口理解    地址、数据总线分开                  地址、数据总线共用
读写单位    字节                                                     页
组成结构    扇区、字节                                       块、页
擦除单位    扇区                                                     块

                  读速度比较快    
                                                                           写速度比较快
                   5s擦除速度                                      4ms擦除速度
                                     写入时,先进行擦除操作
                                                                        擦除单元更小,相应的擦除电路少

        NOR价格比NAND高,NAND缺点是使用中数据读写容易出错,所以一般都需要有对应的软件或者硬件的数据校验算法缺点是使用中数据读写容易出错,所以一般都需要有对应的软件或者硬件的数据校验算法    闪存,这种存储器结合了ROM和RAM的优点,既可以保证掉电不丢失又可以有很高的读写速度。可以用来存储一些用户不希望掉电丢失的一些数据。
        在以往,单片机内部包含ROM和RAM,ROM的硬件实现主要EEPROM,但近年来Flash逐渐取代了他的位置,成为ROM实现的主要硬件。例如,51单片机有4KB的ROM和256B的RAM,这里的ROM实现为EEPROM,而STM31F103有64KB的Flash和20K的SRAM,这里Flash的一部分作为ROM来使用。

 

目前Flash主要有NOR Flash和NADN Flash:
        NOR Flash的读取和我们常见的SDRAM的读取是一样,用户可以直接运行装载在NOR FLASH里面的代码,这样可以减少SRAM的容量从而节约了成本。
        NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。用户不能直接运行NAND Flash上的代码,因此好多使用NAND Flash的开发板除了使用NAND Flah以外,还加上了一块小的NOR Flash来运行启动代码。
        一般小容量的用NOR Flash,因为其读取速度快,多用来存储操作系统等重要信息,而大容量的用NAND FLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk On Chip)和我们通常用的"闪盘",可以在线擦除。目前市面上的FLASH主要来自Intel,AMD,Fujitsu和Toshiba,而生产NAND Flash的主要厂家有Samsung和Toshiba。

 

 

也可参见如下博客:

https://blog.csdn.net/liujiaoyage/article/details/37930475

  • 64
    点赞
  • 571
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
以下是对ROMRAM、SRAM、DRAMFLASH的介绍: 1. ROM(只读存储器):只读存储器是一种只能读取数据而不能写入数据的存储器。它通常用于存储固件、BIOS和其他需要在计算机启动时加载的程序。ROM的数据是在制造过程中被写入的,因此它的内容是固定的。 2. RAM(随机存储器):随机存储器是一种可以读取和写入数据的存储器。它通常用于存储正在运行的程序和数据。RAM是易失性存储器,这意味着当计算机关闭时,其中的数据将被清除。 3. SRAM(静态随机存储器):静态随机存储器是一种使用触发器来存储数据的RAM。它比动态随机存储器(DRAM)更快,但也更昂贵。SRAM通常用于高速缓存和其他需要快速访问的应用程序。 4. DRAM(动态随机存储器):动态随机存储器是一种使用电容器来存储数据的RAM。它比SRAM更便宜,但速度较慢。DRAM需要定期刷新以保持数据的完整性。 5. FLASH:闪存是一种非易失性存储器,可以读取和写入数据。它通常用于存储固件、操作系统和其他需要在计算机启动时加载的程序。闪存比传统的硬盘驱动器更快,更可靠,也更耐用。 以下是对ROMRAM、SRAM、DRAMFLASH的演示: ```python # ROM # 由于ROM是只读存储器,因此我们无法在程序中演示写入操作。 # 我们可以使用Python的binascii库来读取ROM中的数据。 import binascii # 读取ROM中的数据 with open('rom.bin', 'rb') as f: data = f.read() # 将数据转换为十六进制字符串 hex_data = binascii.hexlify(data) # 输出数据 print(hex_data) # RAM # 在Python中,我们可以使用列表来模拟RAM。 # 我们可以使用索引来读取和写入RAM中的数据。 ram = [0] * 1024 # 创建一个大小为1024字节的RAM # 写入数据 ram[0] = 0x12 ram[1] = 0x34 # 读取数据 data = (ram[0] << 8) | ram[1] print(hex(data)) # SRAM # 在Python中,我们可以使用类来模拟SRAM。 # 我们可以使用类变量来存储数据。 class SRAM: data = [0] * 1024 # 创建一个大小为1024字节的SRAM @classmethod def write(cls, address, value): cls.data[address] = value @classmethod def read(cls, address): return cls.data[address] # 写入数据 SRAM.write(0, 0x12) SRAM.write(1, 0x34) # 读取数据 data = (SRAM.read(0) << 8) | SRAM.read(1) print(hex(data)) # DRAM # 在Python中,我们可以使用类来模拟DRAM。 # 我们可以使用字典来存储数据。 class DRAM: data = {} # 创建一个空的DRAM @classmethod def write(cls, address, value): cls.data[address] = value @classmethod def read(cls, address): return cls.data.get(address, 0) # 写入数据 DRAM.write(0, 0x12) DRAM.write(1, 0x34) # 读取数据 data = (DRAM.read(0) << 8) | DRAM.read(1) print(hex(data)) # FLASH # 由于FLASH是非易失性存储器,因此我们无法在程序中演示数据丢失。 # 我们可以使用Python的struct库来读取FLASH中的数据。 import struct # 读取FLASH中的数据 with open('flash.bin', 'rb') as f: data = f.read() # 将数据转换为整数 value = struct.unpack('>I', data)[0] # 输出数据 print(hex(value))) ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值