一、存储选型全景:Flash vs eMMC vs NAND,嵌入式存储介质对比与选型原则

大家好,我是你们的讲师。今天咱们来聊聊嵌入式存储选型这个事儿。说实话,我见过太多项目因为存储介质选错,最后搞得焦头烂额。有的产品量产了才发现寿命不够,有的跑着跑着数据就丢了。嗯,这节课我就把这些年踩过的坑、总结的经验,一次性讲清楚。

1.1 三大存储介质的本质区别

先问个问题:你手头的开发板,用的是哪种存储?SD卡?eMMC?还是直接焊了个NAND Flash?

其实这三种东西,底层都是NAND Flash颗粒。但封装方式、接口协议、管理策略完全不同。我打个比方:

  • Raw NAND 就像一堆散装的乐高积木,你得自己拼、自己管。
  • eMMC 是别人帮你拼好的模型,你直接拿来玩就行。
  • SPI NOR Flash 则是另一种积木,块小、速度快,但容量也小。

说白了,选哪个不是看心情,而是看你的产品到底需要什么。

1.2 三种介质的核心参数对比

我整理了一张表,这是我在项目里反复验证过的数据,你直接拿去用:

参数项 SPI NOR Flash Raw NAND Flash eMMC
容量范围 1MB ~ 256MB 128MB ~ 8GB 4GB ~ 256GB
接口 SPI (4线/QSPI) 8位并行/ONFI eMMC 5.1 (8位)
读速度 ~50MB/s (QSPI) ~30MB/s ~300MB/s
写速度 ~5MB/s ~10MB/s ~150MB/s
擦除寿命 10万次 1万~10万次 3千~5千次
坏块管理 无(出厂无坏块) 需软件处理 内置
ECC纠错 不需要 需要(BCH/LDPC) 内置
磨损均衡 不需要 需软件实现 内置
典型应用 Bootloader、配置参数 文件系统、日志 系统盘、大容量存储
核心结论: 没有最好的存储,只有最合适的。NOR适合存代码,NAND适合存数据,eMMC适合当系统盘。

1.3 选型原则:我总结的「三步法」

每次做新项目,我都会按这三步走,基本没出过问题:

  1. 第一步:算容量 —— 系统镜像多大?日志要存多久?OTA升级包需要几份?
  2. 第二步:看寿命 —— 产品生命周期几年?每天写多少次?
  3. 第三步:定接口 —— 主控支持什么?PCB面积够不够?成本预算多少?

举个例子。我之前做过一个工业数据采集器,要求7x24小时运行,每天写日志约10MB。我算了一下:

  • 产品寿命5年,总写入量约18GB
  • 如果用eMMC,按3000次擦除寿命算,需要至少6GB容量
  • 但eMMC成本高,最后选了4GB的Raw NAND + 软件磨损均衡

结果呢?跑了3年多,一点问题没有。选型对了,后面省心很多。

1.4 避坑指南:我踩过的三个大坑

坑一: 我曾经在一个消费类产品里用了Raw NAND,结果量产3个月后批量返修。原因?软件层的坏块管理没做好,写到坏块上数据全丢了。后来全部换成eMMC,虽然贵了2块钱,但再也没出过问题。
坑二: 有次为了省成本,选了小容量的SPI NOR存Bootloader。结果固件升级一次,容量就不够了。你想想看,Bootloader才多大?但加上双备份、恢复分区,256MB的NOR愣是不够用。最后只能重新layout,工期拖了一个月。
坑三: 还有个项目用了eMMC,但没注意eMMC的版本。主控只支持eMMC 4.5,我买了eMMC 5.1的片子。结果呢?虽然能兼容,但速度跑不满,而且有些高级命令用不了。所以选型时一定要看主控的eMMC版本支持列表。

1.5 实际项目中的选型建议

根据我这些年做过的项目,给你几个直接可用的建议:

  • 做IoT小设备(智能灯、传感器):SPI NOR + 外部EEPROM,成本低、代码简单。
  • 做Linux开发板(路由器、摄像头):eMMC是首选,省心、稳定、速度快。
  • 做工业设备(PLC、数据采集):Raw NAND + 完善的FTL层,或者直接上SLC NAND。
  • 做消费电子(平板、机顶盒):eMMC没得选,别折腾。
个人小技巧: 我习惯在项目初期就做一次「存储压力测试」。用fio或者dd工具,连续写72小时,看看有没有坏块、掉速、数据错误。这一步能帮你提前发现90%的存储问题。

1.6 总结:一句话记住

好了,这一章的内容就这些。最后送你一句话:

NOR存代码,NAND存数据,eMMC当系统盘。选型先算容量再看寿命,最后定接口。

下一章,我会带你深入Buildroot,看看怎么给不同的存储介质配置文件系统。到时候咱们再聊。


公众号:蓝海资料掘金营,微信 deep3321