4. NOR Flash详解:架构、随机读取特性、编程/擦除机制与应用场景
NOR Flash是存储芯片家族中极具特色的一员,其名称来源于或非(NOT OR)逻辑门结构。与NAND Flash追求大容量、高密度不同,NOR Flash的核心竞争力在于随机读取速度快、芯片内执行(XIP)能力以及极高的数据可靠性。在嵌入式系统、物联网设备、汽车电子以及计算机固件(BIOS/UEFI)领域,NOR Flash始终扮演着“代码守护者”的角色。本章将深入剖析NOR Flash的存储单元架构、读取与编程机制、应用边界及其在工程实践中的优劣权衡。
上图展示了NOR Flash在系统中的典型连接关系。主机控制器通过并行或SPI接口访问NOR Flash,其中地址总线、数据总线和控制信号线构成了通信的基础。值得注意的是,NOR Flash支持片上执行(XIP),这意味着CPU可以直接从NOR Flash中读取指令并执行,无需先将代码复制到RAM中,这一特性对于系统上电启动(Boot)过程至关重要。
4.1 NOR Flash核心架构与存储单元原理
4.1.1 存储单元结构
NOR Flash的存储单元基于浮栅晶体管(Floating Gate Transistor)技术。每个单元由一个MOS晶体管构成,其栅极分为控制栅(Control Gate)和浮栅(Floating Gate)两层。浮栅被绝缘层(通常是二氧化硅)完全包裹,能够捕获电荷。当电子被注入浮栅时,晶体管的阈值电压(Vth)升高,表示存储了逻辑"0";当浮栅中没有电荷时,阈值电压较低,表示存储了逻辑"1"。这种电荷存储机制使得NOR Flash在断电后仍能保持数据,即非易失性。
与NAND Flash的串行连接方式不同,NOR Flash的存储单元采用并联结构。每个单元的漏极连接到位线(Bit Line),源极连接到公共地线(Source Line),控制栅连接到字线(Word Line)。这种并联结构赋予了NOR Flash两个关键特性:一是可以实现字节级随机读取,因为每个单元都可以被独立寻址;二是读取速度极快,因为并联结构允许较大的读取电流。
| 特性参数 | NOR Flash | NAND Flash |
|---|---|---|
| 存储单元连接 | 并联结构 | 串联结构 |
| 随机读取速度 | ~100ns(字节级) | ~50μs(页级) |
| 写入/编程粒度 | 字节/字(1-2字节) | 页(2KB-16KB) |
| 擦除粒度 | 扇区/块(4KB-64KB) | 块(128KB-8MB) |
| XIP支持 | 支持 | 不支持 |
| 单位容量成本 | 高 | 低 |
4.1.2 内部架构组成
一颗典型的NOR Flash芯片内部包含以下关键模块:
- 存储阵列(Memory Array):由成千上万个浮栅晶体管组成的矩阵,按行(字线)和列(位线)排列。
- 行解码器(Row Decoder):根据地址信号选择对应的字线,激活目标行。
- 列解码器(Column Decoder):选择目标位线,实现字节或字级别的数据访问。
- 灵敏放大器(Sense Amplifier):检测存储单元的电流/电压状态,将其转换为逻辑电平"0"或"1"。
- 控制逻辑与状态机(Control Logic & State Machine):解析命令,控制编程、擦除、读取等操作的时序。
- 高压发生器(Charge Pump):产生编程和擦除所需的高电压(通常为8-12V),因为芯片外部只提供低电压(1.8V/3.3V)。
- SRAM缓冲器:用于暂存编程数据或擦除验证数据,提高操作效率。
工程要点:NOR Flash的读取路径延迟主要由地址解码时间、存储单元电流建立时间和灵敏放大器响应时间构成。在设计高速读取电路时,需要关注位线电容和字线RC延迟。对于并行NOR Flash,通常采用流水线技术来提升连续读取的吞吐量,但首次访问延迟(Latency)仍然由上述物理过程决定。
4.2 随机读取特性与XIP机制
4.2.1 随机读取性能指标
NOR Flash的随机读取特性是其区别于NAND Flash的最重要优势。在并行NOR Flash中,读取操作可以精确到字节级别,访问时间通常在70-120ns范围内。这意味着CPU可以直接将NOR Flash映射到内存地址空间,通过标准的读总线周期获取数据,无需额外的地址转换或数据缓冲。
对于SPI NOR Flash,读取操作通过串行协议进行,虽然单次访问需要传输地址(3-4字节)和读取数据,但由于SPI时钟频率可达133MHz(对应DDR模式),连续读取吞吐量可以超过66MB/s。然而,随机访问的延迟会因命令开销而增加,通常在几百纳秒到几微秒之间。
4.2.2 XIP(Execute in Place)工作原理
XIP是NOR Flash最具价值的特性之一。在XIP模式下,系统将NOR Flash映射到CPU的地址空间中,CPU的取指操作直接通过内存总线访问NOR Flash。以典型的ARM Cortex-M系列微控制器为例,其内部Flash接口支持0等待状态(Zero Wait State)访问,而外部NOR Flash则可能需要1-2个等待周期。
// XIP模式下的代码执行流程(以ARM为例)
1. CPU 发出取指地址 (例如 0x08000000)
2. 地址经过总线矩阵,直接映射到外部NOR Flash
3. NOR Flash 在 ~100ns 内返回指令数据
4. CPU 执行指令,无需先将代码复制到RAM
5. 若发生分支跳转,CPU 直接访问新地址对应的Flash区域
XIP模式的优势在于:节省RAM空间(代码无需加载到RAM)、启动速度快(上电即可执行)、系统简化(无需复杂的启动加载流程)。但代价是读取速度受限于Flash接口带宽,且随机访问的等待周期会降低CPU执行效率。
设计建议:对于性能敏感的关键代码段(如中断服务程序、实时性要求高的循环),建议将其复制到RAM中执行;而将初始化代码、配置数据等低频访问内容保留在NOR Flash中。这种混合策略可以兼顾启动速度和运行性能。
4.3 编程与擦除机制
4.3.1 编程操作(Program)
NOR Flash的编程操作基于热电子注入(Channel Hot Electron Injection, CHE)效应。编程过程如下:
- 在目标字线上施加高电压(约8-10V),激活目标行。
- 在目标位线上施加中等电压(约4-6V),在沟道中产生高能电子。
- 控制栅电压吸引沟道中的热电子,使其穿越绝缘层注入浮栅。
- 浮栅电荷积累导致阈值电压升高,完成逻辑"0"的写入。
NOR Flash支持字节或字级别的编程,这是其与NAND Flash(页编程)的重要区别。编程时间通常在几十到几百微秒(μs)级别。编程操作需要遵循"先擦除后编程"的原则,即只能将"1"变为"0",而不能反向操作。
4.3.2 擦除操作(Erase)
擦除操作基于Fowler-Nordheim隧穿效应(F-N隧穿)。擦除时,在控制栅施加负高压(约-8至-10V),同时在源极或衬底施加正电压,形成强电场使浮栅中的电子隧穿回衬底。擦除操作以扇区(Sector)或块(Block)为单位进行,典型扇区大小为4KB、32KB或64KB。擦除时间较长,通常在几百毫秒到几秒之间。
| 操作类型 | 粒度 | 典型时间 | 物理机制 |
|---|---|---|---|
| 读取(Read) | 字节/字 | 70-120ns | 浮栅电荷检测 |
| 编程(Program) | 字节/字 | 10-100μs | 沟道热电子注入 |
| 擦除(Erase) | 扇区/块 | 100ms-2s | F-N隧穿效应 |
4.3.3 编程/擦除的工程注意事项
- 擦写寿命:NOR Flash的擦写次数通常为10万次(100K cycles),超过此限制后绝缘层损伤可能导致数据保持能力下降。
- 数据保持:在常温下,NOR Flash可保证10年以上的数据保持时间,但高温环境会加速电荷泄漏。
- 编程干扰:在对某个字节编程时,同一字线上的其他单元可能受到干扰,因此需要精确控制编程电压和时间。
- 擦除验证:擦除操作后必须进行验证,确保所有单元确实被擦除为"1"状态。
风险提示:在固件升级过程中,如果突然断电,可能导致NOR Flash处于编程或擦除的中间状态,造成数据损坏。工程上必须采用双备份(A/B分区)策略或断电保护电路,确保系统在任何异常情况下都能恢复启动。
4.4 应用场景与工程案例
4.4.1 典型应用场景
NOR Flash凭借其独特的性能组合,在以下领域占据不可替代的地位:
- BIOS/UEFI固件存储:PC主板、服务器、工业计算机的BIOS芯片几乎全部采用NOR Flash(如Winbond W25Q128、Macronix MX25L25645G)。系统上电后,CPU第一条指令从NOR Flash的复位向量地址读取。
- 嵌入式系统Bootloader:在基于ARM、RISC-V的嵌入式系统中,NOR Flash存储一级Bootloader(如U-Boot SPL),负责初始化DDR、加载主系统镜像。
- 物联网设备固件:智能电表、传感器节点、智能家居设备使用NOR Flash存储应用程序代码和配置参数。
- 汽车电子:发动机控制单元(ECU)、ADAS系统、车载信息娱乐系统使用NOR Flash存储关键控制算法和启动代码。
- 5G通信设备:基站、光模块的固件存储,要求高可靠性和快速启动。
4.4.2 案例拆解:基于SPI NOR Flash的嵌入式Boot设计
背景与约束:某工业物联网网关产品,主控采用NXP i.MX6ULL(ARM Cortex-A7),需要从外部存储启动。系统约束:成本敏感、要求启动时间小于500ms、需要支持OTA固件升级。
初始方案:采用4MB SPI NOR Flash(Winbond W25Q32)存储Bootloader和内核镜像,通过Quad SPI接口连接。
关键参数:
- SPI时钟频率:104MHz(Quad模式)
- Bootloader大小:256KB
- 内核镜像大小:3.2MB
- NOR Flash读取速度:约50MB/s(连续读取)
分析过程:系统上电后,i.MX6ULL的ROM代码首先从NOR Flash的0x0地址读取Bootloader。Bootloader初始化DDR后,需要将内核镜像从NOR Flash复制到DDR中执行。计算启动时间:
Bootloader加载时间 = 256KB / 50MB/s ≈ 5ms
内核镜像复制时间 = 3.2MB / 50MB/s ≈ 64ms
总启动时间 ≈ 5ms + 64ms + DDR初始化时间(约50ms) ≈ 120ms
实际操作步骤:
- 使用U-Boot作为Bootloader,配置SPI NOR Flash驱动。
- 将内核镜像存储在NOR Flash的0x100000偏移地址。
- U-Boot启动时,通过SPI DMA方式批量读取内核数据到DDR。
- 启用Quad SPI模式,将读取吞吐量提升4倍。
结果对比:优化后实际启动时间约150ms,满足500ms的设计要求。相比使用NAND Flash方案(需要加载UBI文件系统、处理坏块),NOR Flash方案简化了软件复杂度,且启动时间缩短了约40%。
风险与代价:4MB NOR Flash的成本约为NAND Flash(同样容量)的3-4倍。但考虑到系统无需额外的RAM加载Bootloader,且可靠性更高,整体BOM成本差异在可接受范围内。
复盘经验:在Boot设计中,NOR Flash的随机读取能力使得Bootloader可以直接XIP执行,省去了"加载到RAM再执行"的步骤。对于启动时间要求极严苛的场景(如汽车仪表盘),可以考虑使用支持Dual/Quad SPI的NOR Flash,并启用DDR模式进一步提升读取速度。
4.5 优缺点总结与选型建议
4.5.1 核心优势
- 随机读取性能卓越:字节级寻址,纳秒级访问延迟,适合代码存储。
- XIP支持:无需RAM加载,简化系统设计,加快启动速度。
- 高可靠性:数据保持时间长,抗干扰能力强,适合关键数据存储。
- 编程粒度灵活:字节级编程,便于参数更新和配置修改。
4.5.2 主要劣势
- 存储密度低:单颗芯片容量通常不超过2Gb,难以满足大容量存储需求。
- 成本高:单位比特成本远高于NAND Flash和eMMC。
- 擦除速度慢:块擦除时间长达数百毫秒,不适合频繁数据更新。
- 写入带宽低:编程速度远低于读取速度,不适合大文件写入。
4.5.3 选型决策矩阵
| 应用需求 | 推荐存储方案 | 理由 |
|---|---|---|
| BIOS/UEFI固件 | SPI NOR Flash (8-32MB) | 高可靠性、XIP、快速启动 |
| 嵌入式Bootloader | SPI NOR Flash (4-16MB) | 启动速度快、接口简单 |
| 代码存储+数据存储 | NOR Flash + 外部NAND/eMMC | NOR存代码,NAND存大容量数据 |
| 大容量文件系统 | eMMC / NAND Flash | 成本低、容量大、适合顺序读写 |
| OTA升级暂存 | NOR Flash (双Bank) | 支持后台升级,掉电安全 |
总结复盘:NOR Flash在存储芯片生态中扮演着"小而精"的角色。它不追求大容量,而是专注于提供最可靠的代码执行环境。在系统设计中,正确理解NOR Flash的架构特性,合理利用其XIP能力和随机读取优势,同时规避其容量小、成本高的劣势,是嵌入式系统架构师的基本功。对于任何需要快速启动、高可靠代码存储的应用,NOR Flash都是不可替代的选择。