我第一次接触“SD NAND”这个概念,是在帮某公司的工业仪表换存储颗粒的时候。板子上一颗 BGA 封装的存储芯片报错,我按丝印查规格书,产品型号那一栏清清楚楚写着“SD NAND”。我当时心里冒出的第一个问题是:它到底算 SD 卡,还是算 NAND 闪存?等我把内部结构弄明白,才发现这个名字本身就把答案说明白了——外面是 SD 接口协议,中间是一个负责转换的控制器,里面装的是 NAND 闪存。可紧跟着第二个问题就来了:为什么这些做存储的工程师,偏偏选了 NAND,而不是 NOR闪存?毕竟 NOR 名字里带着“读快、可按字节访问”的光环,听着更适合做启动代码。这篇文章不整教科书式的对比,我直接用做项目时踩过的一些场景,把这个问题拆给你听。
1. SD NAND 到底是个什么东西
1.1 从 SD 卡看到它的内核
很多人把 SD NAND 想得很玄,其实你可以直接理解成“一个焊在电路板上的 SD 卡核心”。
普通的 microSD 卡拆开外壳,里面是一小块 PCB,上面至少有一颗控制芯片和一颗 NAND 闪存颗粒。而 SD NAND 为了满足嵌入式场景,把这套结构做成了单颗 BGA 封装:控制器和 NAND die 都封在同一个封装里。主机这边不用管卡槽、卡座、异形外壳,直接用 SDIO 接口,甚至部分型号还支持 SPI 模式,就能读到同一个块设备。
我当时做的是把一颗 4GB SD NAND 焊到样板上,代码几乎是零改动:初始化 SD 卡、读扇区、写扇区,原来逻辑还能用。这就是产品名字里“SD”的由来。
1.2 控制器在这里扮演什么角色
说到这,必须把控制器单独拉出来讲清楚。以下内容在数据手册里不一定写,但做产品选型时非常关键。
SD NAND 里的控制器,本质上是把“原始 NAND”翻译成“标准 SD 协议”的翻译官。NAND 物理层需要坏块管理、ECC校错、磨损均衡、读干扰处理,这些工作如果丢给主机做,那主机的 CPU 和驱动代码会被拖死。控制器把这些脏活全包了,主机看到的只是一串连续的扇区地址。
这也就解释了一个常见迷惑:为什么型号叫 SD NAND,而不是 SD NOR?因为控制器那颗芯片在设计之初就是按 NAND 的脾气写的。它知道怎么处理块擦除、页写入、坏块替换,把它换成 NOR,反而是自废武功。
2. 先分清楚:NAND 和 NOR 在物理层面就不一样
2.1 两种闪存单元的本质差异
先不急着聊“谁比谁快”,咱们回头看闪存的基本工作原理。
不管是 NOR 还是 NAND,存储单元都是浮栅晶体管,靠往浮栅里注入电荷来存 0 和 1。关键区别在于这些晶体管怎么连接。
NOR 的单元是并联在字线和位线之间的,每个单元都能被独立寻址。所以读数据时可以像 RAM 一样,按任意字节地址直接读出来,这是 NOR 最拿手的本事——随机读取快。但成也萧何败也萧何,并联结构导致每个单元占面积大,集成度做不上去,成本高。
NAND 的单元则是串联成一个个串,一串就是一个 NAND 串,再组成页和块。这种串联结构布局紧凑,芯片面积可以做得非常小,单位容量的成本远低于 NOR。可代价是没办法按任意字节直接读,读的时候必须先把整个页的数据搬进缓存,再从缓存里取需要的部分。写操作更严格,只能往空白区域写 0,要改写就得先把整个块擦除,再重写。
2.2 用档案室和货架来理解
我给新来的工程师打过这么个比方:
NOR 像一个货架,每一格都独立放着零件,你要啥直接拿啥。NAND 是一本厚厚的档案册,一页一页装订好,读的时候必须先把整页翻出来,想改其中一格,得把整页抽出来重新打印,甚至整册换掉。
货架找东西方便,但仓库面积浪费大,租不起。档案册密度高,装得多,但读取和修改的粒度都粗一些。
2.3 这决定了主控的设计思路
连接的差异导致了接口行为完全不同。NOR 可以像内存一样挂在 CPU 总线旁边,做即写即读、片上执行。NAND 必须由控制器介入,按照“发命令、读页、检查状态、写页、擦块”这套流程去操作。
所以早期很多嵌入式系统里,代码放 NOR,数据存 NAND,分工跑得很顺。SD NAND 的场景则不一样,它本身就是一套成熟的“卡式”接口,主机根本不想碰底层页和块,控制器全部包揽。这时候 NAND 的劣势被控制器挡掉,剩下的优势自然就亮了。
3. 为什么 SD 卡这套接口,天然适合 NAND
3.1 SD 协议就是“块设备协议”
SD 卡、SD NAND、eMMC,这些存储介质跑的都是块设备协议。主机读写时,发出的命令很简单:CMD17 读单个块、CMD18 读多块、CMD24 写单个块、CMD25 写多块。数据按 512 字节或 4KB 一个扇区组织,主机根本不去关心闪存内部是页还是块。
文件系统构建在这之上,FAT 也好、exFAT 也罢,本质都是把文件拆成一个个簇,簇又映射到扇区。整个存取模型就是在“块”这个尺度上运行。NAND 的操作粒度是页和块,和 SD 协议的块天然对味。
咱们来对比一下典型数字:SD 卡一个块 512B 到 4KB,NAND 一个页通常 4KB 到 16KB,擦除一个块通常是几千 KB。虽然单位不完全相等,但量级匹配。控制器还可以把逻辑扇区映射到物理页里,用多页连续写的方式组合出更高效的多块写。这个节奏,NOR 做起来就别扭了:NOR 虽然按字节随机写,但真正擦除却是按扇区来的,扇区又小,大批量流式写入时反而显得零碎。
3.2 按字节读取的优势在 SD 场景里没用武之地
一提到 NOR,大家条件反射就是“读快、可以随机读”。这句话本身没错,但要看你用在什么场景。
SD NAND 的主机拿到的是 SD 协议,它只能按照扇区、块去访问。主机发一个“读 LBA 1000 开始的 32 块”,控制器就得搬一堆数据出来。NAND 页读取在这个场景里很快,因为它是整页整页往外搬的。NOR 的随机字节读优势,在面对块设备接口时根本施展不开,反而因为密度低成本高显得昂贵。
换句话说:SD 协议把“随机读”这个需求先过滤掉了一层。主机本来就没跟你说“我要读第 3 个字节”,而是说“把第 100 到 130 号扇区交给我”。NAND 天生就是干这个的。
3.3 控制器重映射是 NAND 成败的关键
NAND 有一个绕不开的毛病:有坏块。出厂就有坏块,用着用着还会新产生坏块。如果直接暴露给主机,任何文件系统都会崩溃。SD NAND 里的控制器做了一件极其核心的事:维护一张逻辑块到物理块的映射表,把读取和写入的 LBA 重映射到健康的物理块上。
读多块时,控制器发现某些块坏了,直接跳过后面的备份块;写多块时,它会动态挑一个干净块来写,再把映射关系更新。这套机制让主机完全感知不到底层坏块的存在。这个逻辑放在 NAND 上是一套成熟体系,放在 NOR 上反而有点杀鸡用牛刀。
4. 容量和成本:这是最现实的一票否决
4.1 按字节成本,NAND 能便宜到怀疑人生
工程师最后拍板的往往不是性能表,而是 BOM 成本。从单价上讲,NAND 的每 GB 成本比 NOR 低一个数量级以上,高密度场景差距更大。
为什么有这么大差距?刚才讲过,NOR 单元面积大、串并联结构复杂,在同样的晶圆面积上能做出来的 bit 数远不如 NAND。做 8MB 的 NOR 很常见,但想用 NOR 做到 1TB,晶圆片数和封装成本直接失控。
我自己做项目时有体会:采购一颗 128Mb NOR,价格是便宜的,可你要买 8GB 的 NAND,发现反而比 8GB 的 NOR 便宜得多,而且容量越大越明显。这背后就是工艺路线分道扬镳的结果。
4.2 同样 32GB,NOR 得堆多少颗?
咱们做个粗略估算:普通 8GB SD NAND 在当前工艺下可能是单 die,也可能是双 die 堆叠,封装体不会太大。如果换用 NOR 来做同样 8GB,以主流 NOR die 的单颗容量 32MB(256Mb)来算,需要 250 颗 die,堆叠难度和成本已经不可想象。
我印象很深的一个案例:某公司为了兼容老代码,硬要把一款设备的存储从 NOR 换成 NAND,最后靠控制器做起来的。他们原计划直接用 2GB NOR,预算一算直接被否了,因为 BOM 成本翻了好几倍,供货也难。结论很直接:容量级别不同,选型方向就被锁死了。
4.3 工艺制程也往 NAND 倾斜
现在先进制程都优先给 NAND 和 DRAM,NAND 已经走到 1xx 层甚至 200 层堆叠,TF 平面制程也在推进。NOR 因为结构限制,堆叠难度大,主流工艺相对保守。这不代表 NOR 没人用,但在高容量消费电子领域,NAND 完全是统治地位。
SD 卡和 SD NAND 目标容量是几十 GB 到 TB 级,只能在 NAND 赛道上跑。除非哪天出现全新的存储介质,否则 NOR 不可能在这个量级与 NAND 抗衡。
5. 读写性能与寿命:SD 应用场景里的真实差异
5.1 时序参数的直观对比
直接把我常用的对比表放出来。这里数值代表量级,不同工艺和厂商会有差异,但格局不会变:
| 指标 | NOR 闪存 | NAND 闪存 |
|---|---|---|
| 随机读 | 按字节直接读,微秒级,非常快 | 必须整页读入缓存,随机读相对慢 |
| 顺序读 | 一般,内部并行度低 | 强项,整页整块连续搬,适合视频、镜像 |
| 页写入 | 单字节/字编程,几微秒到几百微秒 | 以页为单位,约几百微秒到毫秒级 |
| 擦除 | 扇区擦除,通常几十到几百毫秒 | 块擦除,通常几毫秒到十几毫秒 |
| 典型容量 | 1Mb ~ 512Mb,少数到 2Gb | 小到几百Mb,大到数Tb |
| 单位成本 | 高 | 低 |
| 寿命 | 常见10万~100万次擦写 | 取决于SLC/MLC/TLC/QLC,几百到10万次 |
| 控制器 | 大多不需要 | 几乎必须有 |
5.2 顺序读快,才是 SD 场景刚需
SD NAND 最常见的应用是什么?存固件镜像、存日志、跑文件系统、存视频和图片。这些场景里,主机高强度执行顺序读和顺序写。
就拿设备启动举例:主控加电后先读 SD 卡里的 bootloader,bootloader 再读内核镜像。这一整个流程大部分是顺序读,一页接一页地搬。NAND 的顺序读能力在这里发挥得非常充分,现代的 SD NAND 顺序读跑到上百兆每秒很轻松。
再拿行车记录仪举例:视频码流持续写入,逻辑上是连续扇区的写入流。NAND 页式编程其实特别适合这种“连续追加写入”模式,控制器可以把连续的逻辑块映射到同一擦除块或相邻擦除块上,一次擦除、多页写入,效率非常高。NOR 按照扇区小步擦写,遇到大码流时反而频繁踩刹车。
5.3 磨损均衡是必须的,NOR 也逃不掉
很多人误以为只有 NAND 才需要磨损均衡,其实只要容量做大了,NOR 也需要。只是 NOR 容量小、写入频率低,某些简单场景能靠“王道算法”硬撑。
SD NAND 的控制器做磨损均衡是常态:动态均衡避开热块,静态均衡把长期不动的冷数据往别的块上挪,确保所有块被均匀擦写。同时还要做坏块管理、读重试、数据刷新。这一整套机制,正是 NAND 能长期稳定工作在消费级产品里的基石。
分享一个我在项目中实际遇到的问题:某设备连续写日志,几个月后卡顿明显。调试发现是 SD NAND 的写性能在掉速。原因不是芯片坏了,而是控制器正在做垃圾回收和磨损均衡,前台写入被后台操作打断。后来调整了写入策略,把大块日志改成小批次、带缓冲的写入方式,掉速现象大幅缓解。这个问题在纯 NOR 方案里基本遇不到,但 NOR 的容量上限早早就把日志方案卡死了。
6. 那 NOR 闪存是不是一无是处?也不是
6.1 NOR 的舒适区:启动代码、固件、XIP
NOR 最经典的使用场景是低容量代码存储。CPU 从 NOR 启动时,可以直接映射到内存空间里取指令执行,这叫 Execute in Place,即写即执行。单片机外挂一颗 SPI NOR,上电之后代码不拷贝到 RAM 也能跑,省 RAM、省启动时间。
物联网设备、Wi-Fi 模组、触摸屏控制器、传感器固件,这些场景里固件几兆字节,NOR 很够用,而且随机读、低引脚数、简单接口、稳定性好,特别合适。
6.2 为什么 SD NAND 也能做启动盘
有人会问:SD NAND 不能 XIP,那它怎么当启动设备?
这要看你主控的启动流程。多数 SoC 内部都有 BootROM,上电后 BootROM 会按照预设顺序尝试从 SDIO/eMMC 读数据。它并不是让 CPU 直接从 SD 卡上取指执行,而是先把 SD 卡里前几个扇区的启动代码读到内部 SRAM,再跳过去执行。说白了,启动代码和数据对存储来说是“顺序读”,并不需要真正的随机字节寻址。
所以 SD NAND 不需要 XIP,也能成为合格的启动介质。很多国产主控、路由器、电视盒子都是 SDIO/eMMC 启动,存储里面装的就是 NAND。工程师选型时不必一听“启动”就只想到 NOR,只要启动流程支持,NAND 完全能扛。
6.3 嵌入式设计里的典型选型逻辑
到了选型阶段,我一般会先把需求分成两筐:
一筐是固件、代码、参数配置,容量小于 16MB,读多写少,要求上电即跑,那 NOR 很合适。
另一筐是文件系统、日志、图片、视频、大固件包,容量从几百 MB 到几十 GB 甚至上 TB,写入频繁,那必须 NAND。SD NAND 或者 eMMC 是现成方案,省去自己设计控制器的麻烦。
当然也有折中方案:一颗小容量 NOR 放 bootloader 和关键配置,一颗大容量 SD NAND 放系统分区和数据分区。很多产品为了省电、省启动时间,就这么干。这套组合看着奢侈,但设计很稳。
7. 初级工程师速查:一张表看清区别 + 常见误区
7.1 一张速查表
| 对比角度 | NOR 闪存 | NAND 闪存 | SD NAND 采用的方案 |
|---|---|---|---|
| 读取方式 | 任意字节随机读取 | 按页读取,整页进缓存 | 主控通过块协议按扇区读取 |
| 写入方式 | 字节/字编程,擦除按扇区 | 页编程,块擦除 | 控制器把扇区映射到页和块 |
| 密度 | 低,通常到 512Mb | 高,单 die 可达 Tb 级 | 满足 SD 卡大容量要求 |
| 成本 | 高 | 低 | 适合消费电子 |
| 典型寿命 | 10万~100万次 | 几百到10万次 | 配合磨损均衡 |
| 是否需复杂控制器 | 多数不需要 | 必须 | 控制器内置 |
| XIP | 支持 | 不支持 | 不需要,BootROM 搬运 |
| 典型应用 | 固件、启动、小配置 | 文件、媒体、日志、大容量 | SD 卡、eMMC、嵌入式存储 |
7.2 常见误区
误区一:NAND 比 NOR 快。这不对,要分场景。随机读和低容量配置读,NOR 明显快;顺序读写和大容量持续吞吐,NAND 压倒性胜出。不能说谁快,只能说谁更匹配。
误区二:NOR 寿命长,所以更可靠。NAND 的 P/E 次数低一些,但 SD NAND 有磨损均衡和坏块替换,整卡寿命其实是可控的。NOR 寿命高但容量小,频繁写日志照样会磨穿。可靠性不只看介质寿命,还要看控制器和管理策略。
误区三:SD NAND 里的 NAND 是普通 U 盘里的 NAND,可以直接当裸片用。不是,内部有控制器,对外是标准 SD 协议。你想直接发原始页读命令、挑坏块、做ECC,根本没这个通道。
误区四:卡上有主控,坏了就是闪存坏了。很多时候是控制器或固件出了问题,不一定是 NAND die 坏了。调试时别一上来就断定介质损坏,先确认供电、时钟、信号完整性,再测读写稳定性和 SMART 信息(如果有)。
7.3 一条我在项目里常走通的验证路径
给初级工程师一个可落地的实验思路:拿一块开发板,接一颗 SD NAND,先把 SD 初始化流程跑通,然后用连续读 16GB 数据校验的方式测读稳定性;再用 4KB 随机写、持续一小时的脚本测写稳定性;最后连续断电重启 50 次,看文件系统能否完好保持。这套流程基本能帮你判断存储方案是否靠谱。
8. 留给初级工程师的验证清单与个人体会
8.1 一套可落地的对比实验
如果你想亲手验证 NAND 和 NOR 的差异,不用先把电路画复杂。找一块带 SDIO 的开发板,再接一颗 SPI NOR,分别在两个存储上实现同样功能:写一段日志、读一段日志、启动加载一段代码。
然后记录三组数据:初始化时间、顺序写吞吐、掉电后的数据恢复情况。我上次在实验室里跑这套,结果非常典型:NOR 初始化快但容量很快耗尽,NAND 初始化稍慢但连续写起来完全不带喘的。文件系统在这种差异下会直接影响产品使用体验,特别是要在存储里放几千条记录时,NOR 往往先败下阵来。
8.2 我踩过的小坑
这里分享几个亲身踩过的坑:
第一个坑是 SD NAND 焊接。BGA 封装焊好后忘记检查虚拟墙,结果数据读出来全是 0xFF。排查半天,最后是虚焊导致命令线电平不稳。焊接后一定要用万用表量关键的 CLK、CMD、DATA 线对地阻值。
第二个坑是掉电时序。SD NAND 正在写内部映射表时突然断电,下次加电后可能表现为“容量变小”或“文件系统损坏”。工业设备如果无法保证断电时机,必须加超级电容或者 UPS 断电保护,哪怕只撑几毫秒都关键。
第三个坑是容量虚标。市面上有些 SD NAND 标称容量包含坏块替换区,实际用户可用容量会少一小块。选型时一定要看明确可用容量,别只看型号数字。
8.3 真正的选择逻辑
回到最开始的问题:SD NAND 里为什么是 NAND,不是 NOR?最终的答案其实不是某一种技术绝对比另一种好,而是整个 SD 生态、容量需求、成本结构、控制器能力,全部把选型推向了 NAND。NOR 有它不可替代的位置,只是不在“SD 卡”这个赛道上。
我给初级工程师的建议是:别死记结论,多去拆十颗存储芯片、多读几页规格书、多做几次写入掉电实验。当你自己看到容量成本曲线、读写延迟、控制器管理逻辑之后,这个问题的答案会刻在骨子里。下一次再有人问你“为什么不用 NOR 做 SD 卡”,你就能直接掏出数据手册拍桌上了。