前言

  1. 个人邮箱:zhangyixu02@gmail.com
  2. 在学习 ESP32 的存储器结构时,发现 DRAM 是 Data RAM 而非 Dynamic RAM,IRAM 是 Instruction RAM 而非 Internal RAM 。突然发现自己对于这一块的知识还比较混乱,因此查阅相关资料进行学习整理。

半岛体存储器常见类型

  1. 如下为半导体存储的一些常见的类型介绍。

半岛体存储器常见类型简介_数据

ROM

只读存储器(Read Only Memory),非易失性。在 ROM 诞生之初,仅可下载一次。随着时代发展可多次擦写,主要特性是断电数据不丢失。ROM 当今依旧有存在意义,这个一般用于存储启动程序 BIOS 程序,例如 ESP32 的一级引导程序就是存储在 ROM 这样能防止他人恶意篡改启动程序,造成未知的破坏。

掩膜 ROM

利用掩膜工艺制造,一旦做好,不能更改,因此只适合于存储成熟的固定程序和数据。例如 ESP32 一级引导程序可烧录进该 ROM 中,防止被篡改。

PROM

通过特殊方法可编程ROM,只能被编程一次。

EPROM

通过特殊方法可擦写可编程ROM,擦写可达1000次。

EEPROM

电子可擦除,例如刚学单片机时我们可利用I2C协议将数据存储进来断电保存。

FLASH

这是如今最为常见的存储技术,一般程序都存储进 Flash 中。但有些人习惯将 Flash 划分出 ROM 这一行列。这两种说法都行,看个人习惯。

NOR FLASH

一般上电即可使用,读取速度非常快,支持随机访问,非常适合存储和直接执行代码(XIP,Execute In Place)。因此像 STM32 的内置 Flash 和 ESP32 的外置 Flash 均采用这种。

NAND FLASH

并非在上电后即可直接使用,它通常需要经过初始化过程才能正常工作。NAND Flash没有采取内存的随机读取技术,它的读取是以一次读取一块的形式来进行的,通常是一次读取512个字节,采用这种技术的Flash比较廉价。因此广泛应用于各种需要大规模数据存储的场景。例如固态硬盘(SSD),U盘和存储卡(如SD卡、microSD卡)等。

RAM

随机访问存储器(Random Access Memory),易失性,它可以随时读写,且速度很快。程序中的各种变量,堆栈都是存储在 RAM 中,被初始化非 0 的变量会在系统启动初期会被引导程序从 Falsh 拷贝进 RAM 中用以提高访问效率。你可以将程序全部拷贝进 RAM 用以提高程序执行效率,不过需要注意,RAM 的价格远高于 ROM。

SRAM

容量小、价格高,优点是不需要软件初始化直接上电就能用。因此广泛应用与单片机这类内存需求量小,而且希望开发尽量简单的应用场景。

DRAM

容量大、价格低,缺点就是上电后不能直接使用,需要软件初始化后才可以使用。因此广泛应用于 PC 机这种内存需求量大的应用场景。

SDRAM

SDRAM 是 DRAM 技术的发展演变,是DRAM 技术的一种类型。它对传统 DRAM 的改进。它通过与系统时钟同步,提供了更高的性能和效率。

DDR

SDRAM 技术的延伸,DDR内存可以在与SDRAM相同的总线频率下达到更高的数据传输率。

DDR2

DDR2 是 DDR SDRAM 内存的第二代产品。它在 DDR 内存技术的基础上加以改进,从而其传输速度更快,耗电量更低,散热性能更优良。

DDR3

DDR3在DDR2的基础上继承发展而来,其数据传输速度为DDR2的两倍,同时容量更为扩大。

FRAM

具有高速读写、高耐久性、低功耗、抗辐射性等特点。广泛应用于数据记录、医疗设备、传感器和航空航天等领域。

常见的存储器组合

  1. 需要注意,有些人喜欢将 ROM 说成是 Flash。你可以认为 Flash 是 ROM 的一个子版本,也可以说 Flash 就是 ROM,或者说 ROM 和 Flash是不同的东西,都行,这不过是历史遗留的术语争论。
  2. 我们只需要知道其中的发展历史,清楚不同名称背后的含义即可。

STM32

  1. STM32 的存储器结构简单,一般就一个内置 NOR Flash + 一个内置 SRAM
  2. 这种这样它的 Flash 和 RAM 上电即可使用,无需复杂的初始化。
  3. 但这样造成的结果就是,STM32 的 Flash 和 RAM 都很少,因为这种类型的 Flash 和 RAM 较为昂贵。

ESP32

存储结构
  1. ESP32 往往一个内置掩膜 ROM + 一个外置 NOR Flash + 一个外置 SRAM + 一个内置 SRAM + 一个 RTC Slow memory + 一个 RTC FAST memory
  2. 看到上面的内容,是不是懵逼了。我这里一一介绍:
  • 内置掩膜 ROM : 这个一般用来存储一级引导程序。这里将会初始化外置 SRAM外置 Flash NOR Flash芯片内部硬件加载等程序。同时,这里还将会一些乐鑫不愿意公开ROM API 函数,我们最终只能够看到他的头文件。如果我们也想制作一些不被他人看到的 API 函数同时又没有对应的硬件支持,其实那么我们可以学习 :
  • 外置 NOR Flash : 二级 Bootloader应用程序都将会存储在这里。ESP32 可以利用 Cache 加速访问外置 NOR Flash,利用 MMU对外置 NOR Flash 进行内存管理
  • 内置 SRAM : 内置掩膜 ROM进行一级引导程序时候,肯定需要对应的 SRAM 配合,这个时候就会利用到这里。一级引导程序结束后,一些对实时性要求较高的任务和频繁访问的数据就可以放在这里面。
  • 外置 SRAM : 这个需要一级引导程序执行完成后,该部分才可以使用。外置 SRAM 主要用于扩展内存容量,适合用于存储较大的数据缓冲区图形处理数据音频数据、以及其他不需要频繁快速访问的大块数据
  • RTC Slow memory : 访问速度较慢,主要用于睡眠期间存储关键数据。ESP32 进入深度睡眠后,储在深度睡眠期间需要保留的数据,如状态信息、计数器值等。设备唤醒后,可以从 RTC Slow Memory 中读取之前保存的系统状态,以便快速恢复或执行某些特定操作。
  • RTC FAST memory : 访问速度接近常规的 SRAM ,远比 RTC Slow Memory 快,主要用于设备唤醒时刻立即需要的数据或代码
应用程序烧录
  1. 通过上面的了解,我们知道了 ESP32 的二级 BootloaderAPP 程序均存储在外置 NOR Flash中,那么我们是否思考过一个问题。这个程序是如果烧录进外置 NOR Flash的呢?
  2. 如下有两个视频,是使用的 STM32 将程序烧录到外置 SPI Flash 的方法。他们的原理应该是类似的,感兴趣的可以了解了解:

PC机

  1. 一般PC机都是:很小容量的 BIOS(NorFlash)+ 很大容量的硬盘(类似于 NAND Flash )+ 大容量的 DRAM。
  • NOR Flash : 用于存储 BIOS 程序,初始化 NAND Flash 和 DRAM。这个坏了,整个电脑就宣布报废了。
  • NAND Flash : 存储电脑程序,如果这个崩溃了,我们可以在电脑上电时候按住某个按键,例如 F12 进入BIOS 界面。然后电脑插入一个带系统的 U 盘重新烧机。
  • DRAM : 程序运行是各种数据流,或者一些期待快速运行的程序存储在这里面。

参考

  1. C站:存储器的分类整理(SRAM/DRAM/NOR FLASH/Nand FLASH)
  2. C站:ROM、RAM、FLASH、IRAM、IROM、DRAM、DROM等简单介绍
  3. C站:ROM、RAM、IROM、IRAM、DRAM、SRAM、Flash
  4. C站:半导体存储器的分类