存储芯片的分类

类似推荐:https://www.cnblogs.com/icswordsman/articles/17415971.html
一、顶层:存储器(存储设备)
分为三大类:
- RAM(随机存取存储器) —— 易失性,断电数据丢失,用于主存/缓存
- ROM(只读存储器) —— 非易失性,断电数据保留,用于固件/启动程序
- NAND FLASH —— 非易失性,大容量存储,是现代闪存设备的核心
注:图中将 NAND FLASH 单独列出(红色框),因其在实际应用中极为重要(如 SSD、U盘),虽技术上属于 ROM 下的 FLASH 子类,但常被单独强调。
二、RAM 分支详解
-
SRAM(静态 RAM)
- 特点:速度快、功耗高、成本高、无需刷新
- 分类:单口 SRAM、双口 SRAM(支持同时读写两个端口)
- 应用:CPU 缓存(L1/L2)
-
DRAM(动态 RAM)
- 特点:需定期刷新、密度高、成本低、速度慢于 SRAM
- 主流类型:
- SDRAM → DDR → DDR2 → DDR3(逐代提升频率与带宽)
- 异步 DRAM(早期,无时钟同步,已淘汰)
-
FRAM(铁电 RAM)
- 特点:非易失 + 高速 + 低功耗 + 无限次擦写
- 应用:工业/医疗等需可靠掉电保存的场景(小众)
三、ROM 分支详解
- PROM(可编程 ROM):一次性烧录,不可改
- EPROM(可擦除 PROM):紫外线擦除,可重写(需取下芯片)
- EEPROM(电可擦除 PROM):按字节擦写,无需取下,速度慢
- FLASH(闪存):
- NOR FLASH:
- 支持 XIP(片内执行),读快、写/擦慢
- 分为:Serial NOR(串行接口,小容量)、Parallel NOR(并行接口,大容量)
- 应用:BIOS、嵌入式程序存储
- NAND FLASH:
- 写/擦快、密度高、成本低,但不支持 XIP
- 分为:Parallel NAND(并行接口,老式)、SPI NAND(串行接口,新兴,用于低成本嵌入式)
- 应用:SSD、U盘、SD卡、eMMC(见下)
- NOR FLASH:
四、NAND FLASH 的典型应用产品(红色框)
- eMMC:嵌入式多媒体卡,集成控制器,用于手机/平板
- SSD:固态硬盘,基于 NAND + 主控 + 缓存
- SD卡:便携式存储卡
- U盘:USB 接口的闪存盘
✅ 核心对比总结表:
| 类型 | 易失性 | 速度 | 成本 | 典型用途 | 是否可改写 |
|---|---|---|---|---|---|
| SRAM | 是 | ★★★★★ | 高 | CPU 缓存 | 是 |
| DRAM | 是 | ★★★☆ | 中 | 主内存(DDR系列) | 是 |
| NOR Flash | 否 | 读快/写慢 | 高 | 启动代码、固件 | 是(块擦) |
| NAND Flash | 否 | 读中/写快 | 低 | 大容量存储(SSD/U盘) | 是(页写/块擦) |
| EEPROM | 否 | 慢 | 中 | 小量参数存储(如校准值) | 是(字节级) |
为什么SRAM用作CPU,而DRAM只能用于主内存呢?
SRAM(静态随机存取存储器)和DRAM(动态随机存取存储器)在计算机系统中扮演不同角色,主要基于它们的特性、性能和成本差异:
SRAM 用于 CPU 缓存的原因
- 速度快:SRAM 使用触发器存储数据,无需刷新,访问延迟极低(通常几纳秒),适合高速 CPU 缓存(L1/L2/L3)。
- 稳定性高:数据只要通电就不会丢失,适合频繁高速访问。
- 集成度低:一个存储单元需要 6-8 个晶体管,占用面积大,成本高,因此容量通常较小(几 MB 到几十 MB)。
DRAM 用于主内存的原因
- 成本低:一个存储单元仅需 1 个晶体管加一个电容,密度高,适合制造大容量内存(如 GB 级别)。
- 容量大:相同面积下可存储更多数据,满足操作系统和应用程序的内存需求。
- 需要刷新:电容电荷会泄漏,需定期刷新(约每 64ms 一次),导致访问延迟较高(几十纳秒),但通过并行架构仍能满足主内存带宽要求。
关键权衡
- 性能 vs 成本:CPU 缓存需要极致速度,SRAM 虽贵但值得;主内存需平衡容量与成本,DRAM 更经济。
- 功耗:SRAM 静态功耗较高,但 CPU 缓存面积小,影响可控;DRAM 刷新会耗电,但大容量下能效更好。
现代计算机的典型架构
- CPU 内部:SRAM 作为高速缓存,加速数据访问。
- 主板插槽:DRAM 模块作为主内存,承载运行中的程序和数据。
- 辅助存储:SSD/硬盘用于长期存储。
未来,新型存储技术(如 MRAM、3D XPoint)可能模糊界限,但目前 SRAM/DRAM 的分工仍是性价比最优解。
单双口SRAM有什么区别
单口 SRAM
- 只有一个访问端口(一组地址线、数据线和控制线)。
- 同一时钟周期内只能执行一种操作:要么读,要么写,不能同时进行。
- 特点:结构简单,面积和功耗相对较小。
- 典型应用:对带宽要求不高的缓存、缓冲区或作为寄存器文件。
双口 SRAM
- 有两个独立的访问端口(通常称为 A 端口和 B 端口),每个端口都有自己的地址、数据和控制线。
- 支持并发操作:在同一个时钟周期内,可以同时进行以下操作:
- 两个端口同时读不同地址。
- 一个端口读,另一个端口写。
- 注意:如果两个端口同时访问同一个地址,通常需要定义优先级或仲裁逻辑来处理冲突,否则会导致数据错误。
- 特点:提供了更高的通信带宽和并行性,但电路更复杂,芯片面积和功耗也更大。
- 典型应用:需要高速数据交换的场合,例如:
- 通信系统中的 FIFO。
- 多处理器共享内存。
- 显示帧缓冲器(图形处理)。
核心区别总结
| 特性 | 单口 SRAM | 双口 SRAM |
|---|---|---|
| 端口数量 | 1 个 | 2 个独立端口 |
| 并行能力 | 每个周期只能进行一项操作(读或写) | 每个周期可进行两项操作(如同时读/写、双读、双写*) |
| 访问冲突 | 不存在 | 需处理同时访问同一地址的冲突 |
| 电路复杂度 | 低 | 高(约为单口的 1.5 - 2 倍面积) |
| 成本与功耗 | 较低 | 较高 |
| 主要用途 | 通用存储、缓存 | 高速数据缓冲、多核通信、实时数据处理 |
简单来说,单口 SRAM 像一条单车道的路,同一时间只能通过一辆车(一次操作);而双口 SRAM 像一条双车道的路,两辆车可以同时并行(两次并发操作),大大提升了数据吞吐量。 选择哪种取决于系统对带宽、成本和复杂度的要求。
单口SRAM和双口SRAM分别应用于哪些场景呢?
单口 SRAM 的应用场景
单口 SRAM 因其结构简单、面积小、功耗低,是应用最广泛的片上存储单元。主要用于对带宽要求不高、访问模式相对单一的场景。
-
通用缓存与缓冲
- CPU/SoC 的片上缓存:如 L2、L3 Cache。虽然现代 CPU 需要高带宽,但其内部复杂的控制逻辑(如多路、多组相连映射)通常基于单口存储阵列构建,通过架构设计(如哈佛结构、多bank)来提升并行度。
- 数据缓冲区:作为数据流中的临时存储站,例如网络包缓冲区、音频采样缓冲区。数据通常按顺序写入和读出,不需要同时访问。
-
寄存器文件
- 在处理器内核中,用于存储指令操作数的寄存器文件。虽然需要多端口读写(多发射、乱序执行),但现代高性能 CPU 的物理寄存器文件通常采用多端口 SRAM 或 Register File 专用电路,而非简单的单口。但在一些简单微控制器中,仍可能使用单口结构。
-
只读或低频写配置存储
- 存储固件、查找表、系数等不经常改变的数据。访问模式以读取为主。
-
低成本、低功耗嵌入式系统
- 单片机、物联网设备等,其性能要求不高,成本敏感,单口 SRAM 是最经济的选择。
核心特点:成本优先,访问串行。
双口 SRAM 的应用场景
双口 SRAM 的核心价值在于两个端口可以独立、并行地访问存储体,特别适合需要实时数据交换、共享和高速流水线处理的场合。
-
通信与数据流处理中的 FIFO
- 这是双口 SRAM 最经典的应用。例如,在两个不同时钟域(异步)或两个处理模块之间传递数据。
- 工作原理:一个端口(写端口)由生产者模块按顺序写入数据,另一个端口(读端口)由消费者模块按顺序读出数据。读写指针独立更新,实现了无冲突的并发读写,是平滑数据流、解决速率匹配和时钟域隔离的关键组件。
-
多处理器/多核共享内存
- 在两个处理器核(如 DSP + MCU)或硬件加速器与主控之间需要共享一块数据区域时。
- 优势:一个核在写入计算结果的同时,另一个核可以读取之前的数据,极大提升了数据共享效率和系统整体吞吐量,避免了总线仲裁带来的延迟。
-
显示与图形处理
- 帧缓冲器:在显示系统中,一个端口(写端口)由图形渲染引擎或视频解码器持续更新画面数据,另一个端口(读端口)由显示控制器按固定频率读取数据并发送给显示器。这种同时进行的读写操作是实时显示不撕裂的关键。
-
高性能网络交换与路由
- 在网络交换芯片中,需要同时处理多个端口的数据包排队和调度。双口 SRAM 可以用于包缓存,实现一个端口写入到达的数据包,另一个端口读取并转发数据包。
-
实时信号处理流水线
- 在图像处理、雷达信号处理等流水线中,前一级处理完的数据块需要立刻交给下一级处理。使用双口 SRAM 作为中间缓冲区,可以实现前一级写入当前结果的同时,后一级读取上一轮的结果,使流水线完全充满,没有停顿。
核心特点:带宽优先,并发访问。
场景选择总结
| 如果你需要... | 应选择 |
|---|---|
| 低成本、通用的数据存储或缓存,访问不频繁冲突。 | 单口 SRAM |
| 构建 FIFO、跨时钟域缓冲、或两个模块间实时数据共享。 | 双口 SRAM |
| 作为显示帧缓冲,需要一边刷新一边渲染。 | 双口 SRAM |
| 多核系统中共享受频繁访问的共享数据区。 | 双口 SRAM |
| 在面积和功耗严格受限的嵌入式设备中做内存。 | 单口 SRAM |
| 处理高速数据流,要求读写带宽均很高。 | 双口 SRAM |
简单比喻:
- 单口 SRAM 像一个单人图书馆,一次只能服务一个人(执行一次读或写操作)。适合人流量不大的社区。
- 双口 SRAM 像一个有前后门的仓库,送货员(写)可以从前门不停入库,而提货员(读)可以同时从后门不停出库。适合物流中转中心或繁忙的商店。
NOR Flash 和 NAND Flash 在原理上的区别是什么,NOR Flash 不可取代的特点是什么?
一、原理上的核心区别
| 特性 | NOR Flash | NAND Flash |
|---|---|---|
| 内部结构 | 并行连接。每个存储单元(晶体管)直接连接到位线和源线,像一个并联电路。 | 串联连接。多个存储单元(通常16个或32个)串联成一个“串”,再通过一个选择晶体管连接到位线,像一个串联电路。 |
| 访问方式 | 随机访问。可以像RAM一样,通过地址线直接访问任意一个字节/字的位置。 | 顺序访问。必须以“页”(Page,通常512B-16KB)为单位进行读写,以“块”(Block,通常64-256页)为单位进行擦除。不能直接寻址到某个字节。 |
| 接口 | 拥有独立的地址总线和数据总线,支持XIP。 | 主要使用复用的I/O接口来传输命令、地址和数据,更像硬盘。 |
| 性能特点 | 读取速度快,尤其是随机读取。写入和擦除速度非常慢。 | 连续读写速度快,擦除速度快。随机读取速度慢。 |
| 存储密度 | 低。因为每个单元都需要独立的连线,芯片面积大。 | 高。单元串联结构节省了大量连线面积,易于实现高容量。 |
| 寿命 | 擦写次数较低(约10万次)。 | 擦写次数较高(约10万-100万次,现代3D NAND更高)。 |
| 成本 | 单位容量成本高。 | 单位容量成本极低。 |
一个形象的比喻:
- NOR Flash 像一本书,你可以直接翻到任意一页(随机读取)阅读,但修改内容(写入/擦除)很麻烦。
- NAND Flash 像一盘磁带,要听某首歌必须快进到大致位置然后顺序播放(顺序读取),但录制新内容(写入/擦除)效率更高,且一盘磁带能存储更多歌曲。
二、NOR Flash 不可取代的特点
尽管NAND在容量和成本上占绝对优势,但NOR Flash凭借其独特的架构,在以下关键领域是不可取代的:
-
支持代码就地执行
- 这是NOR最核心、最不可替代的优势。由于其随机访问和总线式接口,CPU可以直接从NOR Flash中取指令并执行,无需先将代码复制到RAM中。这对于系统启动和运行对实时性、确定性要求高的代码至关重要。
-
极高的代码执行可靠性
- 位错误率极低:NOR的存储单元更独立,干扰少,其固有的位错误率远低于NAND Flash。
- 无需ECC:对于存储代码的NOR,通常不需要复杂的纠错码机制,简化了系统设计。
- 数据保持时间长:在高温等恶劣环境下,NOR的数据保存能力通常更强。
-
确定的、低延迟的随机读取性能
- 读取任意地址数据的时间是确定且快速的(通常在几十到一百纳秒级),这对于实时控制系统、中断服务程序等场景是必需的。NAND的随机读取延迟高且不确定。
-
精细的擦写管理
- 可以对单个扇区(通常比NAND的块小得多)进行擦除和编程,这在存储频繁更新的小规模配置数据时非常灵活高效。
总结与应用场景
-
NOR Flash 的典型应用:
- 启动代码:PC的BIOS/UEFI、嵌入式设备的Bootloader。
- 关键操作系统/应用代码:功能手机、网络设备、物联网设备、汽车MCU、航空航天系统等对可靠性和实时性要求高的领域。
- 小容量、频繁读写的配置数据。
-
NAND Flash 的典型应用:
- 大容量数据存储:SSD、U盘、SD卡、智能手机/平板电脑的存储。
- 流媒体数据:存放不需要CPU直接执行的音乐、视频、图片、应用程序包等。
结论:
NOR Flash 和 NAND Flash 是互补关系,而非替代关系。 NOR Flash 不可取代的特点根植于其支持XIP的随机访问能力、高可靠性和确定性延迟,这使其在代码存储和执行领域,尤其是在对安全、可靠、实时性有严格要求的嵌入式与关键系统中,牢牢占据着主导地位。而NAND则是海量数据存储的王者。在现代复杂系统中(如智能手机),常常能看到 “NOR(存储启动和关键固件)+ NAND(存储主系统和数据)” 的组合。
serial NOR Flash 和Parallel NOR Flash 的区别
核心区别对比表
| 特性 | Parallel NOR Flash | Serial NOR Flash |
|---|---|---|
| 接口方式 | 并行总线。拥有独立的地址总线和数据总线(例如:A0-Axx, DQ0-DQ15)。 | 串行接口。通常只有1个、2个、4个或8个用于双向数据传输的I/O引脚(如SPI的SI/SO/IO0/IO1...)。 |
| 引脚数量 | 非常多(通常40-56个引脚或更多)。因为需要大量引脚来承载地址和数据信号。 | 非常少(通常8-16个引脚,甚至更少)。封装小巧(如SOIC-8, WSON-8)。 |
| 访问模式 | 随机访问,支持XIP。CPU可以直接通过地址总线寻址,像访问内存一样读取数据并执行。 | 顺序/流式访问。必须通过发送命令、地址,然后以数据流形式接收数据。传统SPI NOR不支持原生XIP(但部分增强型SPI模式如XIP已出现)。 |
| 读取速度 | 非常高。数据位宽通常是8位或16位,一次传输一个字节或一个字,理论带宽大。 | 较低。但通过多I/O模式(如Quad SPI, QPI)和提高时钟频率(如133MHz, 200MHz DDR),其连续读取速度已大幅提升,接近低端Parallel NOR。 |
| PCB设计 | 复杂。需要大量走线,占用PCB空间大,可能带来信号完整性问题(如时序、串扰)。 | 简单。走线极少,布局灵活,节省PCB空间和层数,降低设计复杂度。 |
| 系统成本 | 较高。芯片本身引脚多、封装大;同时需要占用CPU/MCU的大量GPIO引脚,并增加PCB成本。 | 较低。芯片成本低,封装小;仅需占用CPU/MCU少量GPIO,显著降低整体系统成本。 |
| 主要优势 | 高性能、低延迟、真正的XIP。适合对启动速度和代码执行实时性要求极高的场景。 | 低成本、小尺寸、设计简单、高可靠性。适合空间和成本敏感的应用。 |
| 典型应用 | 传统高性能嵌入式系统、网络设备、旧式电脑BIOS、汽车仪表盘等。 | 绝对主流。广泛应用于物联网设备、可穿戴设备、手机/平板中的外围模块固件、PC主板及显卡的UEFI/BIOS芯片、汽车娱乐系统、工业控制等。 |
详细解释与趋势
1. 接口与性能的本质差异:
- Parallel NOR 像一个多车道高速公路,地址和数据可以同时、并行地快速传输,CPU可以“直接看到”整个存储空间。
- Serial NOR (SPI) 最初像一个单车道乡村公路,所有信息(命令、地址、数据)都需要排成一队,按位依次通过。但现代的 Quad SPI (QSPI) 或 Octal SPI 将其升级为 4车道或8车道高速公路,通过多个I/O引脚并行传输数据位,从而极大地提升了连续读取带宽。
2. 关于XIP(就地执行):
- Parallel NOR 天然支持XIP,这是其传统优势。
- 传统SPI NOR 不支持XIP,代码需要先加载到RAM中执行。
- 现代增强型SPI NOR 通过 “内存映射模式” 或 “XIP模式”,允许CPU通过一个特殊的内存映射窗口来访问SPI Flash,实现了“类XIP”功能。虽然其随机访问延迟仍高于Parallel NOR,但对于许多应用已足够,并成为主流选择。
3. 市场趋势:
- Serial NOR Flash 已成为绝对主流。其成本、尺寸和设计简易性的优势,加上性能的不断提升(高时钟频率、多I/O、DDR模式),使得它在绝大多数应用中取代了Parallel NOR。
- Parallel NOR Flash 市场在急剧萎缩,现在主要存在于一些对初始启动延迟要求极其苛刻(要求CPU上电后几个时钟周期内就能取指)或需要极高随机读取确定性的特定高端、传统或军工领域。
总结
简单来说,两者的选择是 “性能极致” 与 “综合性价比” 之间的权衡:
- 如果你的设计对系统启动时间、代码执行延迟有极致要求,且不介意复杂的布板和较高的成本,可能会选择 Parallel NOR。
- 对于当今绝大多数嵌入式、物联网和消费电子产品,Serial NOR Flash(尤其是Quad SPI) 因其极佳的成本效益、小巧的尺寸和简化的设计,是无可争议的首选。其性能也已能满足90%以上的应用需求。
Parallel Nand Flash 和 SPI Nand Flash 有何区别?
核心区别一览表
| 特性维度 | Parallel Nand Flash | SPI Nand Flash |
|---|---|---|
| 接口本质 | 并行、异步(主流)/ 同步(如Toggle DDR) | 串行、同步(基于SPI协议) |
| 核心数据总线 | 8位双向I/O总线(复用) | 1位、2位或4位单向/双向数据线(取决于模式) |
| 引脚数量 | 多(约20+个引脚),包括:CLE, ALE, CE#, RE#, WE#, 8xI/O, R/B#等 | 极少(通常6-8个引脚),包括:CS#, CLK, DI, DO, WP#, HOLD#等 |
| 通信方式 | 通过控制信号(CLE/ALE)区分命令、地址、数据周期 | 通过固定的串行指令帧传输命令、地址和数据 |
| 时钟信号 | 异步接口无时钟,靠WE#/RE#边沿触发 | 有时钟(CLK),所有数据在时钟边沿同步采样,时序更简单 |
| PCB设计 | 复杂,需布设大量并行走线,信号完整性挑战大 | 简单,走线极少,布局灵活,占用空间小 |
| 控制器需求 | 需要专门的、复杂的NAND控制器处理底层时序和协议 | 可使用通用的MCU内置的标准SPI控制器驱动,或使用专用控制器提升性能 |
| 易用性 | 低。开发者需直接管理坏块、ECC、复杂的读写时序。 | 高。接口标准化,驱动简单,但坏块管理仍需软件处理。 |
| 性能 | 理论峰值高(8位并行),但受限于异步时序和访问方式。 | 理论峰值低(受串行限制),但通过Dual/Quad SPI模式和更高时钟频率弥补。 |
| 成本 | 芯片封装和PCB成本相对较高。 | 芯片封装小,PCB成本低,系统总成本通常更低。 |
| 主要应用 | 旧式消费电子(如老款手机、MP4)、U盘、特定工业领域。 | 物联网设备、可穿戴设备、低功耗嵌入式系统、家电、作为启动介质等。 |
| 发展趋势 | 在消费领域已被淘汰,被eMMC/UFS取代。 | 正在普及,在中低容量市场(如1Gb-8Gb)快速取代Parallel Nand。 |
详细解释
1. 接口与通信方式的根本不同
- Parallel Nand: 像一个有多个开关和指示灯的控制面板。你需要操作不同的开关(拉高CLE、ALE),然后在同一组数据灯(I/O0~7)上读取或设置不同的信息(命令、地址、数据)。过程是异步的,没有统一的节拍器。
- SPI Nand: 像一个遵循固定协议的串行对话。主控先发起片选(CS#),然后与从设备在时钟(CLK)的节拍下,一位一位地交换数据。数据以固定的帧结构(命令 -> 地址 -> 数据)依次发送。过程是同步的,受时钟严格控制。
2. 引脚数量与设计复杂性的巨大差异
这是最直观的区别。Parallel Nand需要大量引脚来承载并行数据和独立控制信号,导致芯片封装大,PCB走线密集,设计难度和风险高。
SPI Nand引脚极少,通常只有电源、地、CS#、CLK、DI、DO 这6个必要引脚,布局极其灵活,非常适合空间受限的紧凑型设计。
3. 易用性与集成度
- Parallel Nand 对主控要求苛刻,主控必须集成一个专用的NAND控制器,这增加了芯片复杂性和成本。
- SPI Nand 的接口是通用的SPI,几乎所有的微控制器都内置了SPI主机控制器,因此可以直接连接,极大降低了硬件和软件集成的门槛。
4. 性能的权衡
虽然Parallel Nand的8位并行接口理论带宽有优势,但其异步访问方式、复杂的命令/地址周期以及需要频繁的坏块管理操作,使得实际持续读写效率并不像理论值那么高。
SPI Nand通过以下方式提升性能:
- 提高时钟频率: 从几十MHz提升到上百MHz。
- 使用Dual/Quad SPI模式: 在时钟的上升沿和下降沿都传输数据,并且使用2根或4根数据线同时传输,等效数据位宽和速率成倍增加(例如,Quad SPI模式下等效于4位并行接口)。
SPI和Serial是一个意思吗?
不完全是,但密切相关。可以这样理解:
- Serial(串行): 这是一个广义的、描述性的概念。指数据位在单条(或少数几条)线路上,按时间顺序依次传输的通信方式。它是与 Parallel(并行) 相对的概念。
- SPI: 这是一个具体的、标准化的串行通信协议。全称是 Serial Peripheral Interface。它明确规定了硬件接口(CS, CLK, MOSI, MISO)、时钟同步机制、数据帧格式等细节。
关系是:
- SPI 是 Serial 的一种具体实现形式。所有采用SPI协议的设备,其通信方式必然是串行的。
- 但 Serial 并不等同于 SPI。还存在其他串行协议,例如:
- UART: 异步串行通信(如RS-232),没有时钟线。
- I2C: 另一种常用的两线制(数据线+时钟线)串行协议。
- USB, PCIe, SATA: 这些都是高速串行协议。
在存储芯片的语境下:
- SPI Nand Flash 特指采用 SPI 协议 的串行NAND闪存。
- 有时也会用 Serial Nand Flash 来泛指串行接口的NAND,而 SPI Nand 是其中最主要、最常见的一类。可以说,市场上几乎所有的 Serial Nand Flash 都是 SPI Nand Flash。
解释一下XIP
什么是XIP?
XIP 是 eXecute In Place 的缩写,中文通常翻译为 “就地执行” 或 “芯片内执行”。
它是一种计算机系统的运行模式,指 CPU 能够直接从非易失性存储介质(如 NOR Flash、SPI Flash 等)中读取并执行代码,而无需先将代码复制(加载)到 RAM 中。
核心思想
传统程序的执行流程是:
存储介质(如硬盘、NAND Flash) -> 加载到 RAM -> CPU 从 RAM 读取指令并执行
而 XIP 的执行流程是:
存储介质(如 NOR Flash) -> CPU 直接从存储介质读取指令并执行
为什么可以 XIP?
实现 XIP 的关键在于存储介质必须满足两个条件:
- 支持随机访问: CPU 取指令是随机的(由程序计数器 PC 决定),因此存储介质必须能像 RAM 一样,快速访问任意地址的数据。NOR Flash 因其内部架构,完美支持这一点。而 NAND Flash 是页访问,不支持真正的随机访问,因此通常不能直接用于 XIP。
- 提供足够快的读取速度: 虽然比不上 RAM,但存储介质的读取速度必须足够快,以避免 CPU 因等待指令而严重“卡顿”。现代 SPI NOR Flash 的读取速度已能满足许多嵌入式应用的需求。
XIP 的优点
- 节省 RAM: 这是最主要的好处。代码不需要占用宝贵的 RAM 空间,尤其对于代码量较大但 RAM 资源紧张的嵌入式设备(如 IoT 设备、穿戴设备)至关重要。
- 启动速度快: 系统上电后,CPU 可以直接从 Flash 开始执行引导程序,省去了将引导代码搬运到 RAM 的时间,实现快速启动。
- 系统简化: 在某些简单系统中,甚至可以不使用 RAM,仅靠 CPU 寄存器和 Flash 就能运行,极大降低了硬件成本和复杂度。
XIP 的缺点与挑战
- 执行速度较慢: Flash(尤其是通过 SPI 接口访问的)的读取延迟和带宽通常远低于 RAM。这会导致程序执行效率下降。为了解决这个问题,现代 CPU 会使用指令缓存来加速。
- 写操作困难: XIP 主要针对代码执行。对代码所在存储区域的写操作(如更新变量)依然复杂,因为 Flash 的写入需要先擦除整个块,速度很慢。因此,XIP 区域通常被配置为只读,变量数据仍需放在 RAM 中。
- 对存储介质有要求: 如前所述,主要适用于 NOR Flash。虽然现在也有 SPI NAND Flash 支持 XIP(通过在其内部集成一个小的 SRAM 缓存页),但其性能和灵活性通常不如 NOR Flash。
典型应用场景
- 系统启动(Boot): 几乎所有嵌入式设备的 Bootloader 都存储在 NOR Flash 中,并以 XIP 方式运行,初始化硬件后,再决定是否将操作系统加载到 RAM。
- 微控制器固件: 许多 MCU 将程序固化在片内 Flash 上,CPU 以 XIP 模式运行,这是最常见的应用。
- 内存受限的 IoT 设备: 设备的大部分功能代码存储在外部 SPI NOR Flash 中,通过 XIP 执行,仅将堆栈和变量放在小容量 RAM 里。
- UEFI/BIOS: 计算机主板的固件也存储在 SPI Flash 中,CPU 启动时以 XIP 模式运行其中的代码。
与 “从 RAM 执行” 的对比总结
| 特性 | XIP(就地执行) | 从 RAM 执行 |
|---|---|---|
| 代码位置 | 非易失性存储器(如 NOR Flash) | 易失性存储器(RAM) |
| 启动速度 | 快(无需搬运) | 慢(需要加载时间) |
| 运行速度 | 较慢(受限于 Flash 速度) | 极快(RAM 带宽高、延迟低) |
| 内存占用 | 不占用 RAM(仅变量占 RAM) | 占用大量 RAM(代码+变量) |
| 硬件成本 | 可减少 RAM 需求,降低总成本 | 需要大容量 RAM,成本高 |
| 写操作 | 困难(需擦写,通常只读) | 简单(随时可写) |
| 典型存储介质 | NOR Flash, ROM | DRAM, SRAM |
结论
XIP 是一种用“时间换空间”的经典设计权衡。它通过牺牲一部分执行速度,换取了宝贵的 RAM 资源,从而在成本、功耗和体积敏感的嵌入式领域成为不可或缺的技术。随着 SPI Flash 速度的提升和 CPU 缓存技术的优化,XIP 的应用范围越来越广。
EEPROM和nor Flash 有什么区别?
核心区别对比表
| 特性 | EEPROM | NOR Flash |
|---|---|---|
| 技术渊源 | 传统电可擦除技术 | 从EEPROM技术发展而来,是Flash Memory的一种 |
| 擦除单位 | 非常小(字节 / 扇区,如128字节) | 较大(扇区 / 块,如64KB, 128KB)。这是最根本的区别 |
| 写入单位 | 字节 | 字节 / 字(通常需要先擦除整个扇区) |
| 访问方式 | 随机字节访问(读取和写入) | 随机字节访问(仅读取) |
| 读取性能 | 较慢(通常MHz级别) | 极快,支持XIP,可直接由CPU执行代码 |
| 写入/擦除速度 | 慢(毫秒级) | 相对快(擦除块为百毫秒级,编程较快) |
| 芯片密度/容量 | 低(通常KB到MB级),成本高 | 高(通常MB到GB级),单位比特成本低 |
| 主要优势 | 单字节可擦写,灵活性无与伦比,可靠性高 | 高速随机读取,支持XIP,容量大,性价比高 |
| 主要劣势 | 容量小,成本高,写入慢 | 不能像EEPROM一样直接覆盖单个字节,必须“擦除-写入” |
| 接口 | 通常为I2C, SPI等串行接口(节省引脚) | 并行接口(速度快)或SPI串行接口(成本低) |
| 典型用途 | 存储需频繁、独立修改的小数据。 (如:设备参数、校准数据、用户设定) |
存储需要高速读取或直接运行的代码/数据。 (如:BIOS/UEFI、嵌入式系统引导代码、关键应用程序) |
| 寿命(擦写次数) | 非常高(10万 - 100万次) | 较高(典型10万次),但比EEPROM稍低 |
详细解释与比喻
1. 最根本的区别:擦除粒度
这是理解两者差异的钥匙。
- EEPROM:像一个带橡皮的铅笔笔记本。你可以直接翻到某一页的某一行,用橡皮擦掉那几个字(擦除几个字节),然后重写。擦除和写入的粒度可以很小,非常灵活。
- NOR Flash:像一个使用白板笔的公告板。如果你想修改板上的某一条通知(一个字节),你不能只擦掉那几个字。你必须先擦掉整块白板(一个扇区/块),然后再把其他不需要修改的内容和新的内容一起重新写上去。擦除的粒度很大。
2. 性能与应用的分化
由于上述根本区别,导致了截然不同的性能特性和应用场景:
-
EEPROM 胜在“灵活写”:
- 其设计目标就是频繁、细粒度地修改数据。例如,汽车仪表盘里记录里程数,每次增加0.1公里就需要写入一次;或者Wi-Fi模块里存储不断变化的网络信道参数。这些场景下,EEPROM的“单字节可擦写”特性是无可替代的。
- 但它的读取速度相对较慢,且容量做不大,成本高。
-
NOR Flash 胜在“高速读”和“大容量”:
- 它牺牲了细粒度擦除的灵活性,换来了更简单的存储单元结构,从而实现了更高的存储密度(容量更大、成本更低) 和更快的随机读取速度。
- 其支持XIP的特性是杀手锏:CPU可以直接从NOR Flash中取指令执行,无需先拷贝到RAM。这使得它成为存储启动代码和关键固件的绝佳选择。你的电脑主板BIOS芯片、路由器里的Bootloader、车载娱乐系统的核心系统,几乎都使用NOR Flash。
3. 接口与系统集成
- EEPROM:通常以串行接口(如I2C, SPI)的“小芯片”形式出现,作为主控芯片的“外挂小记事本”。
- NOR Flash:早期多为并行接口以获得最快读取速度,现在SPI接口的NOR Flash因其引脚少、成本低已成为主流,但内部读取架构依然保证了快速的随机访问能力。
总结与选择建议
-
选择 EEPROM 当:
- 你需要一个可以随时、单独修改任何一个字节的“数据记录本”。
- 数据量很小(几字节到几百KB),但修改极其频繁。
- 对可靠性、寿命和字节级操作有极致要求。
-
选择 NOR Flash 当:
- 你需要存储程序代码,并要求CPU能直接高速运行(XIP)。
- 数据以“读取为主,偶尔整体更新”(如固件升级)。
- 需要比EEPROM大得多的容量(MB级以上),且注重成本效益。
简单来说:
EEPROM是“数据记录的精密瑞士军刀”,而NOR Flash是“程序执行的快速高速公路”。 在现代电子系统中,它们常常共存:用一小块EEPROM记录系统运行时的可变参数,用一块更大的NOR Flash来存放和执行主程序代码。


浙公网安备 33010602011771号