存储介质选型分析:NAND Flash vs eMMC vs SD卡

做数据采集设备,选存储介质是个绕不开的坎儿。我见过不少项目,硬件都调通了,结果因为存储选型翻车——要么寿命不够,要么速度跟不上,要么就是量产时发现供货有问题。

今天咱们就把 NAND Flash、eMMC 和 SD 卡这三兄弟掰开揉碎聊清楚。你想想看,它们本质上都是 NAND 闪存技术,但封装、控制器、接口协议完全不同。选错了,后面分区表怎么优化都白搭。

核心结论先放这儿:工业级数据采集设备,首选 eMMC;消费级或原型验证,SD 卡够用;裸 NAND Flash 除非你有硬件 ECC 和坏块管理能力,否则别碰。

2.1 三者的本质区别

先看一张对比表,心里有个底:

特性 NAND Flash(裸片) eMMC SD 卡
内部结构 纯闪存阵列 + 无控制器 闪存 + 专用控制器 + FTL 闪存 + 控制器 + 协议层
接口 ONFI / Toggle 原始接口 MMC 协议(8位并行) SPI / SDIO 协议
坏块管理 用户自己处理 控制器自动管理 控制器自动管理
ECC 纠错 用户实现(BCH / LDPC) 控制器内置 控制器内置
磨损均衡 无,需软件实现 动态 + 静态磨损均衡 动态磨损均衡(有限)
典型寿命(P/E) MLC: 3000-5000
TLC: 500-1000
MLC: 3000-5000
TLC: 1000-3000
消费级: 500-2000
工业级: 2000-5000
顺序读/写 50-200 MB/s(依赖总线) 100-400 MB/s UHS-I: 50-104 MB/s
UHS-II: 156-312 MB/s
随机 IOPS(4K) 极低(无调度) 2000-10000 500-3000
成本(每GB) 最低 中等 中等偏高

这张表信息量不小,我挑几个重点说说。

2.2 NAND Flash:裸片,一切靠自己

NAND Flash 裸片,说白了就是一块闪存颗粒,没有控制器,没有 FTL(Flash Translation Layer),连坏块标记都得你自己读。

我在一个工业记录仪项目里用过裸 NAND。当时图它便宜,8GB 的 MLC 颗粒才十几块钱。结果呢?驱动写了两个月,坏块管理、ECC、磨损均衡全得自己撸。量产之后还发现,不同批次的颗粒坏块分布差异很大,固件得跟着调。

避坑指南:我曾经因为裸 NAND 的 ECC 强度不够,导致设备运行半年后出现数据静默错误。后来换成 BCH-40bit 纠错才算稳住。如果你非要用裸 NAND,ECC 至少留 24bit/1KB,最好上 LDPC。

裸 NAND 的优势只有一个:成本。适合以下场景:

  • 你团队有 Flash 驱动专家
  • 产品量极大(百万级),能摊薄开发成本
  • 对数据可靠性要求不是变态高
  • 有足够的 MCU 资源跑软件 FTL

否则,我建议你直接跳过。真的,别跟自己过不去。

2.3 eMMC:工业数据采集的首选

eMMC 是什么?就是把 NAND Flash 和一个专用控制器封装在一起,对外暴露标准的 MMC 接口协议。控制器帮你干了所有脏活累活——坏块管理、ECC、磨损均衡、垃圾回收。

我个人习惯在数据采集设备里优先用 eMMC。原因很简单:

  • 可靠性高:工业级 eMMC 的 P/E 寿命能做到 3000 次以上,配合 wear leveling,实际写入量可以放大 3-5 倍
  • 接口简单:MCU 端只需要 MMC 控制器,驱动代码量比裸 NAND 少 80%
  • 分区友好:eMMC 原生支持 Boot Partition、RPMB、User Data Area,分区表优化空间大

我记得有个项目,设备需要连续 7×24 小时采集振动数据,每天写入量约 50GB。用消费级 SD 卡,三个月就挂了。换成工业级 eMMC(8GB MLC),跑了两年多还没出问题。

选型小技巧:eMMC 的寿命标称通常是 TBW(Total Bytes Written)。比如 8GB eMMC 标称 TBW=16TB,意味着你可以写 16TB 数据才达到寿命终点。按每天 50GB 算,能用 320 天。但实际因为磨损均衡,往往能用到标称值的 1.5-2 倍。

eMMC 的缺点呢?也有:

  • 封装固定(BGA),焊接要求高,维修困难
  • 容量扩展不灵活,不像 SD 卡可以随时换
  • 价格比裸 NAND 贵 30-50%

2.4 SD 卡:灵活但不够可靠

SD 卡,大家最熟悉了。插拔方便,容量大,便宜。但用在数据采集设备里,你得留个心眼。

SD 卡的问题在于:

  • 控制器策略不透明:不同品牌的磨损均衡算法天差地别。有的卡写 100GB 就坏块溢出,有的能撑 10TB
  • 掉电保护弱:大部分消费级 SD 卡没有掉电保护,写操作时断电,轻则丢数据,重则卡报废
  • 温度范围窄:普通 SD 卡工作温度 0-70°C,工业级(如 Western Digital Industrial)才到 -40~85°C

我曾经在一个户外气象站项目里用 SD 卡。夏天机箱温度 65°C,连续写日志,三个月换了四张卡。后来换成工业级 SD 卡(SLC 颗粒),才算稳住。但价格嘛,翻了五倍。

SD 卡适合的场景:

  • 原型验证、小批量试产
  • 数据量不大,且允许人工更换存储介质
  • 对成本极度敏感,且能接受一定故障率

我的建议:如果非要用 SD 卡,选工业级(Industrial Grade),并且做好掉电检测和文件系统日志(如 FAT32 + 定期 fsck)。别信那些「高速卡=好卡」的说法,速度再快,数据丢了等于零。

2.5 寿命与性能的深层对比

咱们再深入聊聊寿命。很多人只看 P/E 次数,其实不够。

实际寿命 = P/E 次数 × 容量 × 磨损均衡效率 ÷ 写入放大因子

举个例子:

  • 8GB eMMC,MLC 颗粒,P/E=3000
  • 磨损均衡效率 90%,写入放大因子 2.0
  • 实际可写入量 = 8GB × 3000 × 0.9 ÷ 2.0 = 10,800 GB ≈ 10.5 TB

而同样容量的裸 NAND,没有磨损均衡,写入放大因子可能高达 5-10,实际寿命只有 2-4 TB。差距就在这里。

性能方面,我重点说随机写入。数据采集设备经常要写小文件(比如每秒钟一条传感器数据,4KB 一条)。这时候随机 IOPS 比顺序读写重要得多。

场景 NAND Flash eMMC SD 卡
连续大文件写入(视频流) ⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐
小文件频繁写入(传感器日志) ⭐ ⭐⭐⭐⭐ ⭐⭐
混合读写(数据库类) ⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐
掉电安全 ⭐⭐(需硬件配合) ⭐⭐⭐⭐ ⭐⭐

你看,eMMC 在随机小文件写入上明显占优。为什么?因为它的控制器有专用的 SRAM 做 write buffer,还能做 command queuing。裸 NAND 没有这些,每次写入都要擦除再写,慢得让人抓狂。

2.6 一张图看懂选型逻辑

下面这张 SVG 图,是我自己总结的选型决策流程。每次做新项目,我都会走一遍这个逻辑。

存储介质选型决策流程 存储介质选型决策流程 开始选型 量产规模 > 10万件? 是 否 裸 NAND Flash 需自研FTL + ECC + 坏块管理 eMMC 工业级首选,可靠性高 团队有Flash驱动专家? 掉电保护要求高? 可以,但风险自担 工业级SD卡 + 掉电检测 💡 核心原则:可靠性优先于成本,数据无价 eMMC 是数据采集设备的最优解,SD卡适合原型验证,裸NAND只适合有深厚积累的团队

走完这个流程,你大概就知道该选什么了。我个人建议,除非你有特别充分的理由,否则直接选 eMMC。省下来的开发时间,够你优化好几轮分区表了。

2.7 小结

最后总结几句:

  • 裸 NAND Flash:成本最低,但开发成本最高。适合百万级量产且有 Flash 专家团队的公司
  • eMMC:工业数据采集设备的黄金标准。可靠性、性能、易用性最均衡
  • SD 卡:灵活方便,但可靠性是短板。只建议用在原型验证或低要求场景