一、存储选型全景: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 选型原则:我总结的「三步法」
每次做新项目,我都会按这三步走,基本没出过问题:
- 第一步:算容量 —— 系统镜像多大?日志要存多久?OTA升级包需要几份?
- 第二步:看寿命 —— 产品生命周期几年?每天写多少次?
- 第三步:定接口 —— 主控支持什么?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