
我第一次接触“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 卡这套接口天然适合 NAND3.1 SD 协议就是“块设备协议”SD 卡、SD NAND、eMMC这些存储介质跑的都是块设备协议。主机读写时发出的命令很简单CMD17 读单个块、CMD18 读多块、CMD24 写单个块、CMD25 写多块。数据按 512 字节或 4KB 一个扇区组织主机根本不去关心闪存内部是页还是块。文件系统构建在这之上FAT 也好、exFAT 也罢本质都是把文件拆成一个个簇簇又映射到扇区。整个存取模型就是在“块”这个尺度上运行。NAND 的操作粒度是页和块和 SD 协议的块天然对味。咱们来对比一下典型数字SD 卡一个块 512B 到 4KBNAND 一个页通常 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 同样 32GBNOR 得堆多少颗咱们做个粗略估算普通 8GB SD NAND 在当前工艺下可能是单 die也可能是双 die 堆叠封装体不会太大。如果换用 NOR 来做同样 8GB以主流 NOR die 的单颗容量 32MB256Mb来算需要 250 颗 die堆叠难度和成本已经不可想象。我印象很深的一个案例某公司为了兼容老代码硬要把一款设备的存储从 NOR 换成 NAND最后靠控制器做起来的。他们原计划直接用 2GB NOR预算一算直接被否了因为 BOM 成本翻了好几倍供货也难。结论很直接容量级别不同选型方向就被锁死了。4.3 工艺制程也往 NAND 倾斜现在先进制程都优先给 NAND 和 DRAMNAND 已经走到 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 卡里的 bootloaderbootloader 再读内核镜像。这一整个流程大部分是顺序读一页接一页地搬。NAND 的顺序读能力在这里发挥得非常充分现代的 SD NAND 顺序读跑到上百兆每秒很轻松。再拿行车记录仪举例视频码流持续写入逻辑上是连续扇区的写入流。NAND 页式编程其实特别适合这种“连续追加写入”模式控制器可以把连续的逻辑块映射到同一擦除块或相邻擦除块上一次擦除、多页写入效率非常高。NOR 按照扇区小步擦写遇到大码流时反而频繁踩刹车。5.3 磨损均衡是必须的NOR 也逃不掉很多人误以为只有 NAND 才需要磨损均衡其实只要容量做大了NOR 也需要。只是 NOR 容量小、写入频率低某些简单场景能靠“王道算法”硬撑。SD NAND 的控制器做磨损均衡是常态动态均衡避开热块静态均衡把长期不动的冷数据往别的块上挪确保所有块被均匀擦写。同时还要做坏块管理、读重试、数据刷新。这一整套机制正是 NAND 能长期稳定工作在消费级产品里的基石。分享一个我在项目中实际遇到的问题某设备连续写日志几个月后卡顿明显。调试发现是 SD NAND 的写性能在掉速。原因不是芯片坏了而是控制器正在做垃圾回收和磨损均衡前台写入被后台操作打断。后来调整了写入策略把大块日志改成小批次、带缓冲的写入方式掉速现象大幅缓解。这个问题在纯 NOR 方案里基本遇不到但 NOR 的容量上限早早就把日志方案卡死了。6. 那 NOR 闪存是不是一无是处也不是6.1 NOR 的舒适区启动代码、固件、XIPNOR 最经典的使用场景是低容量代码存储。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 卡”你就能直接掏出数据手册拍桌上了。