1. RAM Random Access Memory 随机存取存储器

  • 一句话结论:掉电数据会丢失,是易失性存储,任何时候都可以读写,读写速度快,价格高。)

image.png

  • 存储和保存数据,任何时候都可以读写
  • 作为操作系统或其他正在运行程序的【临时存储】介质,也成为系统内存。断电时RAM不能保留数据。

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

      • 存储单元存储的是0还是1取决于电容是否有电荷,【有电荷代表1】,【无电荷代表0】。但时间一长,代表1的电容会放电,代表0的电容会吸收电荷,这就是数据丢失的原因

        静态RAM(SRAM)和动态内存(DRAM)

    • SRAM Static RAM 静态随机存取存储器

image.png

  • 不需要刷新电路就能够保存数据,具有静止存取数据的作用
  • 双稳态触发器,存储一位需要花6个晶体管,电路结构非常复杂,成本高

image.png

  • cache追求的是速度,所以选择SRAM
  • 结论:SRAM速度非常快,目前读写最快的存储设备了,但是它也非常昂贵 常用:CPU的一级缓冲,二级缓冲

DRAM Dynamic RAM 动态随机存取存储器

image.png

  • 需要不停地刷新电路,否则内部的数据将会消失,而且功耗很高
  • 只需要花一个电容和一个晶体管,成本低廉

image.png

  • PC的内存则追求低成本和高容量,容量所以选择能够在相同空间中存放更多内容并且【造价相对低廉,低成本】的DRAM
  • 数据实际上是存在电容里的。而电容放久了,内部的电荷就会越来越少,对外就形成不了电位的变化
  • 结论:DRAM成本低,容量大 常用语PC作为内存,但通常全称是DDR SDRAM
  • FPRAM/FastPage
  • EDO RAM
  • SDRAM【Synchronous DRAM,别搞混为SRAM】
  • DDR (SD省略了)RAM【Double DataRate 】
  • RD RAM【RambusDRAM】
  • SG RAM
  • WRAM等
  • 这里介绍其中的一种DDR RAM

    • SDRAMSynchronous DRAM
    • DDR RAM(Date-Rate RAM)也称作DDR SDRAM,和SDRAM(Synchronous DRAM)是基本一样的
    • 一个时钟读写两次数据,数据传输速度加倍了,目前【电脑中用得最多的内存】

      PSRAM 假静态随机存储器

    • 是伪SRAM,内部的内存颗粒跟SDRAM的颗粒相似

2. ROM Read Only Memory 只读存储器

  • 掉电不丢失,读取速度慢,是非易失性存储器,是“不会被轻易修改”或者“要通过一定的过程去修改”。执行过程中,通常是将应用程序拷贝到RAM中去执行。由于数据不能随意更新,正是由于该缺点,就有了【flash的发展】应运而生
  • ROM数据不能随意更新,但是在任何时候都可以读取。
  • 相当于PC硬盘,用来长期存储和保存数据 即使是断电,ROM也能够保留数据。
  • ROM常在嵌入式系统中担任存放作业系统的用途

    PROM Programmable ROM 可编程的只读存储器

  • PROM是一次性的,也就是软件灌入后,就无法修改了

    EPROM Erasable Programmable ROM 可擦除可编程只读存储器

  • EPROM是通过紫外光的照射擦出原先的程序,使用很不方便

    EEPROM Electrically Erasable Programmable ROM 电可擦除可编程只读存储器

  • 20世纪 80 年代制出

  • 价格高,写入时间很长,写入很慢

3. Flash Memory FLASH存储器 又称”闪存”

  • 一句话结论:掉电数据会丢失,任何时候都可以读写,读写速度快,价格高 应用场景: 过去,U盘和MP3里用的就是这种存储器 过去20年来嵌入式系统一直使用ROM(EPROM)作为它们的存储设备,然而近年来Flash全面代替了ROM(EPROM)在嵌入式系统中的地位,用作存储Bootloader以及操作系统或者程序代码或者直接当硬盘使用(U盘)
  • 不易更改的特性让更新资料变得相当麻烦,FlashMemory具有ROM不需电力维持资料的好处,
  • 它结合了ROM和RAM的长处,不仅具备电子可擦除可编程(EEPROM)的性能
  • 不过【单价】也比普通的ROM要高

    NOR Flash和NADN Flash

    NOR Flash

  • NOR的特点是芯片内执行(XIP, execute In Place),这样应用程序可以接在flash闪存内运行,不必再把代码读到系统RAM中

  • 读取速度快,传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能
  • NOR则要求在进行擦除前先要将目标块内所有的位都写为0

    NADN Flash

  • NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。

  • NANDFlash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,
  • NAND器件执行擦除操作是十分简单的
  • 比较廉价
  • 用户不能直接运行NANDFlash上的代码, 因此许多使用NAND Flash的开发板除了使用NAND Flah以外,还用了一块小的NOR Flash来运行启动代码。
  • 大容量的用NANDFLASH,最常见的NAND FLASH应用是嵌入式系统采用的DOC(Disk OnChip)和我们通常用的闪盘

    两者区别

  • 一,存储区别比较 NOR的特点是芯片内执行(XIP, execute In Place),这样应用程序可以接在flash闪存内运行,不必再把代码读到系统RAM中。 NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。 NAND结构能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。应用NAND的困难在于flash的管理和需要特殊的系统接口。

  • 二,性能比较 flash闪存是非易失存储器,可以对称为块的存储器单元块进行擦写和再编程。任何flash器件的写入操作只能在空或已擦除的单元内进行,所以大多数情况下,在进行写入操作之前必须先执行擦除。NAND器件执行擦除操作是十分简单的,而NOR则要求在进行擦除前先要将目标块内所有的位都写为0。
    • ● NOR的读速度比NAND稍快一些。
    • ● NAND的4ms擦除速度远比NOR的5s快。
  • 三,接口差别 NOR flash带有SRAM接口,有足够的地址引脚来寻址,可以很容易地存取其内部的每一个字节。 NAND器件使用复杂的I/O口来串行地存取数据,各个产品或厂商的方法可能各不相同。8个引脚用来传送控制、地址和数据信息。 NAND读和写操作采用512字节的块,这一点有点像硬盘管理此类操作,很自然地,基于NAND的存储器就可以取代硬盘或其他块设备。
  • 四,容量和成本 NAND flash的单元尺寸几乎是NOR器件的一半,由于生产过程更为简单,NAND结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。 NOR flash占据了容量为1~16MB闪存市场的大部分,而NAND flash只是用在8~128MB的产品当中,这也说明NOR主要应用在代码存储介质中,NAND适合于数据存储,NAND在CompactFlash、Secure Digital、PC Cards和MMC存储卡市场上所占份额最大。
  • 五,可靠性和耐用性 采用flahs介质时一个需要重点考虑的问题是可靠性。对于需要扩展MTBF的系统来说,Flash是非常合适的存储方案。可以从寿命(耐用性)、位交换和坏块处理三个方面来比较NOR和NAND的可靠性。
  • 六,寿命(耐用性) 在NAND闪存中每个块的最大擦写次数是一百万次,而NOR的擦写次数是十万次。NAND存储器除了具有10比1的块擦除周期优势,典型的NAND块尺寸要比NOR器件小8倍,每个NAND存储器块在给定的时间内的删除次数要少一些。
  • 七.位交换问题 所有flash器件都受位交换现象的困扰。在某些情况下(很少见,NAND发生的次数要比NOR多),一个比特位会发生反转或被报告反转了。 一位的变化可能不很明显,但是如果发生在一个关键文件上,这个小小的故障可能导致系统停机。如果只是报告有问题,多读几次就可能解决了。 当然,如果这个位真的改变了,就必须采用错误探测/错误更正(EDC/ECC)算法。位反转的问题更多见于NAND闪存,NAND的供应商建议使用NAND闪存的时候,同时使用EDC/ECC算法。 这个问题对于用NAND存储多媒体信息时倒不是致命的。当然,如果用本地存储设备来存储操作系统、配置文件或其他敏感信息时,必须使用EDC/ECC系统以确保可靠性。
  • 八.坏块处理 NAND器件中的坏块是随机分布的。以前也曾有过消除坏块的努力,但发现成品率太低,代价太高,根本不划算。 NAND器件需要对介质进行初始化扫描以发现坏块,并将坏块标记为不可用。在已制成的器件中,如果通过可靠的方法不能进行这项处理,将导致高故障率。 易于使用可以非常直接地使用基于NOR的闪存,可以像其他存储器那样连接,并可以在上面直接运行代码。 由于需要I/O接口,NAND要复杂得多。各种NAND器件的存取方法因厂家而异。 在使用NAND器件时,必须先写入驱动程序,才能继续执行其他操作。向NAND器件写入信息需要相当的技巧,因为设计师绝不能向坏块写入,这就意味着在NAND器件上自始至终都必须进行虚拟映射。
  • 九.软件支持 当讨论软件支持的时候,应该区别基本的读/写/擦操作和高一级的用于磁盘仿真和闪存管理算法的软件,包括性能优化。 在NOR器件上运行代码不需要任何的软件支持,在NAND器件上进行同样操作时,通常需要驱动程序,也就是内存技术驱动程序(MTD),NAND和NOR器件在进行写入和擦除操作时都需要MTD。 使用NOR器件时所需要的MTD要相对少一些,许多厂商都提供用于NOR器件的更高级软件,这其中包括M-System的TrueFFS驱动,该驱动被Wind River System、Microsoft、QNX Software System、Symbian和Intel等厂商所采用。 驱动还用于对DiskOnChip产品进行仿真和NAND闪存的管理,包括纠错、坏块处理和损耗。

单片机

  • RAM主要是做【运行时数据存储器】,存放【变量】
  • FLASH主要是【程序存储器】,【长期的数据】
  • EEPROM主要是用以在程序运行保存一些需要【掉电不丢失】的数据

    比喻

  • 如果有一个书架上有10 行和10 列格子(每行和每列都有0-9 的编号),有100 本书要存放在里面,那么我们使用+个行的编号+个列的编号就能确定某一本书的位置。如果已知这本书的编号87,那么我们首先锁定第8 行,然后找到第7 列就能准确的找到这本书了。 在RAM 存储器中也是利用了相似的原理。

    实际

  • 对于CPU 来说,RAM 就象是一条长长的有很多空格的细线,每个空格都有一个唯一的地址与之相对应。 如果CPU 想要从RAM 中调用数据,它首先需要给地址总线发送地址数据定位要存取的数据,然后等待若干个时钟周期之后,数据总线就会把数据传输给CPU。

image.png

  • 上图中的小园点代表RAM 中的存储空间,每一个都有一个唯一的地址线同它相连。 当地址解码器接收到地址总线送来的地址数据之后,它会根据这个数据定位CPU 想要调用的数据所在的位置,然后数据总线就会把其中的数据传送到CPU。 上面所列举的例子中,CPU 在一行数据中每次存取一个字节的数据,但是在现实世界中是不同的,通常CPU 每次需要调用32bit 或者是64bit 的数据(这是根据不同计算机系统的数据总线的位宽所决定的)。如果数据总线是【64bit 的话】,CPU 就会在一个时间中存取【8 个字节(一个字节是8bit,64bit即是8个8bit)】的数据,因为每次还是存取1 个字节的数据,64bit 总线将不会显示出来任何的优势,工作的效率将会降低很多。