想象一座建在硅片上的存储小镇,数据是一颗颗小球,必须住进不会停电的小房间。Flash 闪存就是这座小镇的房间与物流系统。最早的 NOR 像格子间档案馆:每个字节都有独立门牌号,CPU 想读哪个房间就直奔哪个房间;但盖一间独立房间很贵,容量做不大。为了装更多数据,NAND 出现了——它把小球装进密集的集装箱,按“页”搬运、按“块”清场,容量大、成本低,却没法随机取一个字节。再后来,小镇把 NAND 和一位物业管家封装在一起,做成 eMMC 精装公寓;而追求极致速度的 UFS,则修了两条能同时双向跑车的高速隧道。这篇文章就带你在存储小镇里走一圈,看懂四种闪存方案的分工。
对 AI 从业者:边缘盒子、手机推理、自动驾驶设备都离不开启动固件与大模型落盘,理解这些闪存差异能帮你定位存储瓶颈、做对硬件选型。
目录
可视化演示
展示NOR与NAND单元结构差异、NAND页块写入擦除机制与eMMC并行半双工vs UFS串行全双工接口对比,帮助理解Flash存储核心技术。
本节配有交互动效(进入视口后自动加载,约 3KB)。
'+captions.norNand+'
闪存基础:浮栅小柜子
存储小镇上,每个数据都是一颗小球。小球要住得久,就得住进“浮栅小柜子”。柜子的门由控制栅控制,柜子深处是浮栅,中间隔着一层比城墙还厚的氧化层。往柜子里放小球时,仓管员在控制栅上加高压,让小球穿过氧化层进入浮栅;移走电压后,氧化层把小球死死关在柜里,所以断电也不丢。
这颗小球的数量会影响晶体管的阈值电压。读出时,只要看柜子里小球多还是少,就能分辨 0 和 1。这个小柜子就是 Flash 的最基本单元——浮栅晶体管。它天生是非易失存储:柜门不需要持续供电,小球也能被关在里面。
Flash 不能像纸张一样原地改字:必须先擦除(清空柜子)、再编程(写入)。擦除以块为单位,因为高压清场动辄一整片区域;读和写则按页或字节进行。每次擦写,氧化层都会被高压轻微磨损,于是有了 P/E cycle(擦写次数)上限,这就是闪存的寿命来源。
所以选存储设备,本质是在选柜子的结构。NOR 是格子间,NAND 是集装箱,eMMC/UFS 是带管家和高速路的整体方案。
- 初始阈值 \(V_{th0}\)空柜时晶体管的开启阈值电压,是参照基准。
- 浮栅电荷 \(Q_e\)被关在浮栅里的电子总电荷量。
- 等效电容 \(C_{fg}\)浮栅与控制栅之间的等效电容,决定电荷对阈值的影响程度。
- 公式含义电荷越多,阈值越高,对应“已编程”状态。
NOR特性:格子间档案馆
最早的“格子间档案馆”叫 NOR。每个字节都有独立门牌号——地址线可以直接选中任意字节。想读固件里的某条指令,CPU 像拿着门牌号直奔房间,不需要把整个仓库搬出来。
这种随机读取能力来自 NOR 的电路结构:每个存储单元一端接位线,行译码器和列译码器形成一张二维地址网。读出时,行译码选字线,列译码选位线,读出放大器把微弱电流变成 0/1。由于译码电路密集,NOR 单元面积大,所以容量做不大、成本高。
代价是写入和擦除非常慢。NOR 擦除同样要把一个大块清空,编程也要先擦后写,所以它只适合存很少改动、经常随机读的内容,比如 BIOS、Bootloader、固件参数。CPU 甚至可以直接在 NOR 上执行代码(XIP),省去先拷贝到 RAM 的步骤。
存储小镇里,NOR 像一间间独立档案室:查资料快,但建档案室贵、扩建难、整层改造更慢,所以它只放最重要的启动说明书。
- 行译码延迟 \(t_{row}\)行译码器选中字线所需时间。
- 列译码延迟 \(t_{col}\)列译码器接通目标位线所需时间。
- 读出放大器稳定时间 \(t_{SA}\)把电流转换成逻辑电平需要的时间。
- 总读出时间三段串行相加,就是一次随机读取的大致延迟。
NAND特性:集装箱仓库
数据越来越多,格子间太贵。于是 NAND 来了——它不是一个个独立房间,而是把晶体管串成一条长队,做成一排排密集的集装箱。为了节约面积,NAND 不给每个字节单独拉地址线,数据最小按“页”(例如 4KB)读写。
在 NAND 集装箱堆场里,一个块由一个或多个页组成。读数据可以按页搬;擦除却必须按“块”整片清场,用高压把浮栅里的电子一次性赶走。这种结构让单元之间不需要大量金属线,容量密度高、单位成本低,但也带来两个麻烦:不能覆盖写,必须先擦整块;读取时可能出现位翻转,需要控制器做 ECC 纠错和坏块管理。
所以存储小镇的集装箱仓库 NAND 擅长一次装很多货物、按箱进出,不适合零散取单个字节。它成为 SSD、存储卡、手机大容量存储的底层主角。
- 页数 \(P_{per\_block}\)每个块里包含的页数量。
- 页大小 \(S_{page}\)一个页的字节数,常见 4KB 或 16KB。
- 擦除耗时 \(T_{erase}\)擦除一个块需要的时间,量级最大。
- 写读速度关系写入一页比读出一页慢得多。
单元类型:一柜多档位
同样是 NAND 集装箱,柜门上的“刻度”还能再分。SLC 只分两档:有没有电子,代表 0/1,一柜存 1 比特;MLC 把电压分成 4 档,每柜存 2 比特;TLC 分成 8 档,每柜存 3 比特。
档位越多,同一个柜子里塞的比特越多,容量密度越高、单 GB 成本越低。但相邻档位之间的电压差值变小,读写电路更容易判断错;反复擦写后氧化层老化,电平偏移,纠错压力变大,寿命缩短。于是 SLC/MLC/TLC 成为不同产品间的取舍。
小镇里的看门人最清楚:格子里的抽屉越多,找东西越便宜但越容易看走眼。为了省成本,MLC/TLC 进入大众设备;为了高可靠,SLC 留给工业级关键数据。
- 电压档位数 \(M\)存储单元支持的电压等级数量。
- 比特数 \(N_{bits}\)每个存储单元能够保存的比特数量。
- 对数关系档位从 2 变 4 再变 8,比特数从 1 到 2 到 3。
eMMC集成:带管家的精装公寓
裸 NAND 擦写麻烦、有坏块、还要纠错,用户直接使用太痛苦。于是存储小镇推出一体化精装房:eMMC。它把 NAND 芯片和一位“物业管家”(控制器)封装在同一个模块里,用户插上就能用,不需要懂坏块、磨损均衡和擦写算法。
eMMC 的接口采用并行总线:8 根数据线可以同时发 8 位数据,就像八辆小车并排出小区。为了进一步提高吞吐,eMMC 支持 DDR 双倍速率——时钟上升沿和下降沿都传数据。控制器还负责 ECC、坏块管理、功耗控制。它成为手机、平板、车载中控常见的嵌入式存储。
eMMC 的短板在并行总线:八辆车并排跑,频率高了容易互相干扰,而且发送和接收共用道路,不能同时双向。高档小区还想要更快,就得换 UFS 高铁。
- 总线宽度 \(W_{bus}\)并行数据总线位数,eMMC 常见 8 位。
- 时钟频率 \(f_{clk}\)接口时钟频率,单位通常为 MHz。
- DDR 系数 2在时钟上升沿和下降沿都采样,速度翻倍。
- 计算示例8 位总线、200MHz 时钟,DDR 时约为 3200Mbps。
UFS高速:高铁双隧道
UFS 是存储小镇新修的高铁系统。它不用 8 条并行马路,而是用 2 条高速串行 Lane——每条是一条专用隧道,数据以极高频率一列车接一列车发。并行总线怕时钟偏斜和串扰,串行隧道反而容易把单车道速度推到很高。
更关键的是全双工:两条 Lane 可以一条下行、一条上行,同时发车;eMMC 的半双工一次只能一个方向。UFS 还支持命令队列,相当于调度中心可以同时安排多趟列车,而不是等上一趟到站再问下一趟。因此随机读写和顺序读写都大幅提升,高端手机从 eMMC 转向 UFS。
如果 eMMC 是八车道普通公路,UFS 就是两条可同时反向跑的高铁隧道。隧道窄,但班次密、调度聪明,整体吞吐反而更高。
- 全双工系数 2收和发两个方向同时工作,吞吐翻倍。
- Lane 数量 \(N_{lane}\)UFS 常见 2 条 Lane。
- 单 Lane 速率 \(R_{lane}\)每条 Lane 的物理传输速率。
- 有效载荷率 \(\eta\)扣除编码和协议开销后,真正传数据的有效比例,约 0.8。
应用选型:按需配货
最后回到小镇的物流调度台:没有最好的存储,只有最合适的送货方式。需要快速随机取用小数据、还要断电不丢的,派 NOR 去,比如 BIOS、Bootloader、网卡固件;需要海量数据、按块搬运的,派 NAND/eMMC 上,比如监控录像、手机相册、SSD 数据盘。
手机和平板里,中低端常用 eMMC,因为便宜、封装省心;高端机用 UFS,因为要秒开应用、加载大型游戏,AI 模型文件也需要快速读入内存。服务器和数据中心则直接用带更强控制器的 NAND SSD,追求高 IOPS 和低延迟。
所以存储选型就像安排送货路线:说明书放格子间,照片视频扔集装箱,旗舰机直接上高铁双隧道。你只需要问三个问题:读多还是写多?随机多还是顺序多?预算够不够?
- 接口速度 \(V_{interface}\)接口能提供的带宽,如 eMMC 或 UFS。
- 控制器速度 \(V_{controller}\)控制器处理命令的速度。
- 介质速度 \(V_{NAND}\)闪存颗粒本身的读写和擦除速度。
- min 运算木桶效应,整体性能由最慢环节决定。
AI 应用场景
边缘AI盒子启动与固件更新
阶段:部署与启动
解决的问题:传统方案把 Bootloader 放在普通磁盘里,启动慢且容易被异常断电破坏;AI 边缘盒子需要在毫秒级完成设备初始化,并可靠保存模型版本与 OTA 标记。NOR 随机读取快,适合放启动固件;eMMC 负责放系统和大模型镜像。把两者结合,既保证启动可靠,又避免频繁擦写 NOR。
具体案例:一台自动售货机的视觉识别盒子,把 Bootloader 放在 SPI NOR 上,Linux 系统和 TensorFlow Lite 模型放在 eMMC 中。上电后 NOR 先执行,再从 eMMC 加载模型,固件升级时只替换 eMMC 分区,不会把 NOR 写坏。
手机端大模型应用提速
阶段:模型加载与推理初始化
解决的问题:端侧大模型文件动辄几个 GB,还包含大量小文件;eMMC 命令队列浅、半双工,加载慢,用户等白屏。UFS 的全双工和命令队列可以同时处理多个读取请求,显著降低冷启动延迟。
具体案例:手机端侧部署量化后的 7B 模型,模型文件约 4GB。使用 UFS 的旗舰机比使用 eMMC 的中端机打开 AI 助手时,模型加载时间缩短接近一半,首字延迟明显下降。
数据中心AI训练数据读取
阶段:数据管道
解决的问题:训练集包含海量小图片和 JSON 样本,传统机械硬盘随机读 IOPS 太低,GPU 经常等数据。基于 NAND 的企业级 SSD 提供高随机读和深度队列,把 DataLoader 瓶颈降到最低。
具体案例:PyTorch DataLoader 读取 10 万张图片时,把数据盘从 HDD 换成 NAND SSD 后,单卡 GPU 利用率从 60% 提升到 95%,训练步耗时明显缩短。
Python 演示
class FlashStorage: def __init__(self, name, page_bytes, pages_per_block, blocks, read_ms, program_ms, erase_ms): self.name = name self.page_bytes = page_bytes self.pages_per_block = pages_per_block self.blocks = blocks self.read_ms = read_ms self.program_ms = program_ms self.erase_ms = erase_ms def capacity_gb(self): total = self.page_bytes * self.pages_per_block * self.blocks return total / (1024 ** 3) def simulate(disk, reqs): total_ms = 0.0 for op, addr in reqs: if op == 'read': total_ms += disk.read_ms elif op == 'write': total_ms += disk.program_ms elif op == 'erase': total_ms += disk.erase_ms return total_ms if __name__ == '__main__': nor = FlashStorage('NOR', 2, 128, 1024, 0.10, 0.35, 60.0) nand = FlashStorage('NAND', 4096, 512, 2048, 0.08, 0.50, 3.50) emmc = FlashStorage('eMMC', 4096, 512, 4096, 0.06, 0.40, 3.00) ufs = FlashStorage('UFS', 4096, 512, 8192, 0.03, 0.25, 2.00) requests = [] for i in range(100): requests.append(('read', i)) requests.append(('write', i)) requests.append(('erase', 0)) for disk in [nor, nand, emmc, ufs]: print(disk.name, 'capacity=', round(disk.capacity_gb(), 3), 'GB', 'total_ms=', simulate(disk, requests))
class FlashStorage:定义一个存储抽象,把容量、读写和擦除耗时打包在一起。total / (1024 ** 3)从字节换算成 GB,方便对比容量密度。requests.append(('read', i))给所有存储相同的 100 次读、100 次写和 1 次擦除,保证公平。simulate(disk, requests)用统一请求集模拟总耗时,突出结构差异。for disk in [nor, nand, emmc, ufs]四种方案轮流上场,代码跑完就能看到 NOR 容量小但读快、NAND 系容量大但处理同一批请求更省时。
常见误区
误区NOR 读起来这么快,写应该也不差,为什么大家不用 NOR 装所有数据?是不是厂商故意不用好东西?
正解NOR 只有随机字节读取快,写入和擦除都很慢,而且单元面积大、容量做不大。NAND 虽然不能随机读字节,但页读写、块擦除的结构让密度和成本远优于 NOR。分工不同:NOR 守固件,NAND 扛数据。
为何常见:初学者先接触 NOR 的“随机读快”优势,容易把局部优势放大成整体优势,忽略了容量和成本。
误区eMMC 和 UFS 是不是像 SLC、MLC、TLC 一样,是闪存颗粒的类型?
正解eMMC 和 UFS 是“封装+接口+控制器”的整体方案,底层仍然是 NAND 闪存。eMMC 使用并行接口和内置控制器,UFS 使用串行高速 Lane、全双工和命令队列,但它们都不是颗粒工艺。
为何常见:手机参数表只写“eMMC 5.1”或“UFS 3.1”,不解释内部结构,容易让人把它们误认为新的颗粒技术。
误区TLC 一柜能存 3 比特,比 SLC 存得多,所以 TLC 一定更快更先进。
正解档位越多,单柜容量密度越高、成本越低,但相邻电压差变小,读写判断更容易出错,寿命和速度反而可能下降。TLC 能大规模普及,靠的是控制器 ECC 和磨损均衡,而不是“更快”。
为何常见:人们习惯用“数字大=更好”来判断,忽略了模拟电路里电压窗口变窄带来的可靠性代价。
误区eMMC 有 8 条数据线,UFS 只有 2 条 Lane,8 条并行肯定比 2 条串行快。
正解并行总线频率提高后,线间串扰和时钟偏斜会严重限制速度;UFS 的串行 Lane 单通道速率极高,再加上全双工和命令队列,实际吞吐远超 eMMC。车道多不等于跑得快,还要看车道频率和调度。
为何常见:“八车道比两车道宽”符合日常直觉,但电子世界里并行高频的物理局限不容易被直观感知。
面试题
Q1. NOR Flash 最典型的应用场景是哪个?
- A.存放BIOS固件代码← 正确答案
- B.存放4K高清视频
- C.当作计算机主内存
- D.作为CPU里高速缓存
答案:A。NOR 支持随机字节读取,且能够原地执行,适合存放 BIOS、Bootloader 等固件。高清视频需要大容量,NAND 更合适;主内存需要可快速改写且容量大,DRAM 才是主角;CPU 缓存需要极高速 SRAM,也不是 NOR。
Q2. NAND Flash 以什么为最小单位进行读和编程?
- A.字节
- B.页← 正确答案
- C.块
- D.整片
答案:B。NAND 为了高密度,不给每个字节单独引出地址线,读和编程的最小单位是页;擦除的最小单位是块。字节寻址是 NOR 的特点,整片擦除一般不是正常操作单位。
Q3. TLC 存储单元将电压大致划分为几个档位?
- A.2 档
- B.4 档
- C.8 档← 正确答案
- D.16 档
答案:C。TLC 每单元存 3 比特,2 的 3 次方等于 8,所以需要 8 个电压档位。SLC 是 2 档,MLC 是 4 档,QLC 才是 16 档。
Q4. eMMC 相对裸 NAND 最重要的改进是什么?
- A.内置控制器做坏块磨损管理← 正确答案
- B.把接口改成串行差分
- C.让存储单元支持全双工
- D.不需要擦除就能覆盖写入
答案:A。eMMC 把 NAND 和控制器封装在一起,由控制器统一处理坏块、磨损均衡、ECC 等复杂逻辑,用户拿到的是一块“省心”的嵌入式存储。串行差分、全双工是 UFS 的特性;Flash 仍然不能覆盖写。
Q5. UFS 使用命令队列带来的直接好处是什么?
- A.同时处理多个读写命令降低延迟← 正确答案
- B.增大每个存储单元的电平档位
- C.支持随机字节读取和XIP执行
- D.使NOR也可以大容量存储
答案:A。命令队列让控制器一次性接收多个命令并优化执行顺序,多个读写请求可以并发处理,从而降低延迟、提升吞吐。电平档位由单元类型决定,随机字节读取和 XIP 是 NOR 特性,与 UFS 命令队列无关。
Q6. 一块 UFS 芯片有 2 条 Lane,每条 Lane 速率 2.4Gbps,有效载荷率 80%,且支持全双工,理论总带宽约为多少?
- A.7.68Gbps← 正确答案
- B.3.84Gbps
- C.9.60Gbps
- D.4.80Gbps
答案:A。全双工表示收发两个方向同时工作,所以先算 2 个方向乘以 2 条 Lane 再乘以 2.4Gbps 得到 9.6Gbps;再乘 80% 有效载荷,得到 7.68Gbps。B 少算了全双工,C 是未扣除协议开销的物理带宽,D 既没算全双工也没按有效载荷修正。
Q7. 磨损均衡(Wear Leveling)的主要目的是什么?
- A.让各块擦写次数接近延长寿命← 正确答案
- B.把电压细分成更多档位
- C.提高NOR随机读取速度
- D.减少UFS的Lane数量
答案:A。如果频繁写同一个块,它会很快达到 P/E cycle 上限;磨损均衡会把写操作分散到整个 NAND 的各个块上,让寿命更均匀。电压档位和 Lane 数量由颗粒工艺与接口标准决定,与磨损均衡无关。
Q8. 以下哪些是 NOR Flash 的特点?
- A.支持随机字节读取← 正确答案
- B.容量密度通常低于NAND← 正确答案
- C.写入和擦除速度慢← 正确答案
- D.常用于大数据量视频存储
答案:ABC。NOR 有独立地址译码,可以随机读字节;单元面积大,容量密度低;写入和擦除需要高压且按块清场,速度慢。大数据量视频存储需要高密度 NAND,而不是 NOR。
Q9. 以下哪些属于 UFS 相对 eMMC 的架构优势?
- A.串行高速Lane← 正确答案
- B.全双工同时收发← 正确答案
- C.支持命令队列← 正确答案
- D.8位并行总线更宽
答案:ABC。UFS 用串行高速 Lane 替代并行总线,支持全双工和命令队列,因此性能更强。eMMC 的 8 位并行总线是它自己的接口特点,并非 UFS 的优势。
Q10. 在给视频监控设备做存储选型时,选择 NAND/eMMC/UFS 而不是 NOR 的原因包括哪些?
- A.容量密度更高← 正确答案
- B.单位容量成本更低← 正确答案
- C.按页读写适合大块数据← 正确答案
- D.支持字节级随机访问
答案:ABC。监控视频是大块连续数据,NAND 按页读写、块擦除的结构适合这类负载,并且容量密度高、单位成本低。NOR 支持字节级随机访问,但容量小、成本高,适合放固件而不适合放下几个月的视频。