存储介质选型分析: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 图,是我自己总结的选型决策流程。每次做新项目,我都会走一遍这个逻辑。
走完这个流程,你大概就知道该选什么了。我个人建议,除非你有特别充分的理由,否则直接选 eMMC。省下来的开发时间,够你优化好几轮分区表了。
2.7 小结
最后总结几句:
- 裸 NAND Flash:成本最低,但开发成本最高。适合百万级量产且有 Flash 专家团队的公司
- eMMC:工业数据采集设备的黄金标准。可靠性、性能、易用性最均衡
- SD 卡:灵活方便,但可靠性是短板。只建议用在原型验证或低要求场景