4、NOR Flash 特性:随机读取优势、适用场景与局限性

好,咱们来聊聊 NOR Flash。这东西在嵌入式领域,尤其是黑匣子这种对可靠性要求极高的设备里,地位很特殊。它不像 NAND 那样能装,但它的随机读取能力,说白了,是独一无二的。

4.1 随机读取优势:为什么它能“直通”CPU?

NOR Flash 最核心的优势,就是支持随机读取。你想想看,CPU 要执行代码,得从存储器里把指令一条条取出来。如果是 NAND Flash,你得先把一大块数据读到 RAM 里,再让 CPU 去 RAM 里取指令。这中间多了一道“搬运工”的活儿,延迟就上去了。

NOR Flash 不一样。它的内部结构,有点像我们电脑里的内存。每个存储单元都直接连到了数据线上。CPU 给它一个地址,它就能直接把这个地址里的数据吐出来。这个过程叫 XIP(Execute In Place,原地执行)

关键点: NOR Flash 的读延迟通常在 50-100ns 级别,而 NAND Flash 的首次读取延迟通常在 10-50μs 级别。差了整整两个数量级。这意味着,NOR Flash 可以让 CPU 直接从 Flash 里跑代码,不需要先把代码搬到 RAM 里。

我在一个早期的黑匣子项目中,用过 NAND Flash 存代码。结果发现,系统上电后,要等好几秒才能开始干活。为什么?因为 Bootloader 得先把内核从 NAND 里读到 RAM 里。后来换成 NOR Flash,上电后几乎瞬间就开始执行了。这个体验上的差距,在需要快速响应的黑匣子里,是致命的。

4.2 适用场景:代码执行的“黄金搭档”

NOR Flash 最适合的场景,就是存储并直接执行代码。具体来说,有这几个典型应用:

  • Bootloader(引导程序):系统上电后,CPU 第一条指令从哪里来?通常就是从 NOR Flash 的起始地址开始。这是 NOR Flash 最经典的应用。我习惯把 Bootloader 放在 NOR Flash 里,因为它启动快,而且不容易被意外篡改。
  • 固件存储:对于一些功能相对固定的嵌入式设备,比如黑匣子的核心控制固件,可以直接放在 NOR Flash 里运行。这样省去了 RAM 的开销,也降低了系统复杂度。
  • 关键参数存储:黑匣子里的配置参数、校准数据,这些数据量不大,但要求极高的可靠性。NOR Flash 的位翻转率远低于 NAND Flash,用来存这些“命根子”数据,我比较放心。
  • FPGA 配置存储:很多 FPGA 在上电时,需要从外部 Flash 加载配置数据。NOR Flash 的快速随机读取能力,正好满足 FPGA 的配置时序要求。

我的经验: 在选择 NOR Flash 时,我通常会关注它的“读时序”。不同的 CPU 对 NOR Flash 的读时序要求不一样。我曾经因为没仔细看数据手册,选了一款读速度偏慢的 NOR Flash,结果 CPU 在高速运行时,偶尔会读到错误的数据。排查了好久才发现是时序不匹配。所以,选型时一定要核对 CPU 的读时序参数。

4.3 局限性:容量与写入速度的“硬伤”

NOR Flash 也不是万能的。它的局限性,说白了,就是容量小、写入慢、擦除更慢

特性 NOR Flash NAND Flash
随机读取速度 极快(~50ns) 慢(~10μs)
写入速度 慢(~1MB/s) 快(~10MB/s)
擦除速度 极慢(~1s/块) 快(~1ms/块)
典型容量 1MB - 512MB 1GB - 1TB
位翻转率 极低 较高

为什么会这样?这跟它的内部结构有关。NOR Flash 的每个存储单元,都像一个小开关。写入数据时,需要施加高电压,让电子穿过绝缘层,这个过程本身就慢。而擦除操作,更是需要把一大块区域(通常是一个扇区,64KB 或 128KB)里的所有电子都“赶走”,所以特别耗时。

避坑指南: 我曾经在一个项目中,试图用 NOR Flash 来记录黑匣子的飞行数据。结果发现,数据写入速度根本跟不上传感器采集的速度。因为 NOR Flash 的写入操作,需要先擦除再写入,而且擦除一个扇区就要 1 秒钟。后来我改用 NAND Flash 来存数据,NOR Flash 只用来存代码和关键参数。这个教训告诉我:NOR Flash 适合“读多写少”的场景,不适合“频繁写入”的场景。

另外,NOR Flash 的容量也上不去。目前市面上主流的 NOR Flash,容量大多在 256MB 以下。对于需要存储大量视频、图像数据的黑匣子来说,这点容量根本不够看。所以,在黑匣子系统里,NOR Flash 和 NAND Flash 通常是配合使用的:NOR Flash 负责“大脑”(代码),NAND Flash 负责“记忆”(数据)。

4.4 小结:选型时的“三看”原则

嗯,总结一下。你在选型 NOR Flash 时,可以记住这“三看”:

  1. 看用途:是不是用来存代码?如果是,NOR Flash 是首选。如果是存数据,尤其是大数据量,那还是考虑 NAND Flash 吧。
  2. 看速度:CPU 的读时序能不能匹配?写入速度能不能满足你的需求?别像我一样,等到板子调不通了才回头查时序。
  3. 看容量:你的代码有多大?如果超过 256MB,那 NOR Flash 基本就告别了。可以考虑用 SPI NAND 或者 eMMC 来替代。

最后说一句,NOR Flash 虽然“老”,但在可靠性要求高的场合,它依然是不可替代的。黑匣子这种设备,稳定比什么都重要。NOR Flash 的简单、可靠,恰恰是它最大的价值。