1. 存储系统全景:嵌入式存储的演进、主流存储介质对比与性能指标解读
大家好,我是你们的老朋友。今天咱们正式开课,第一讲先聊聊嵌入式存储的“前世今生”。
说实话,我入行那会儿,嵌入式存储还是个“小透明”。那时候大家更关心CPU主频、内存大小,存储嘛——能存数据就行。但这些年下来,我越来越觉得,存储才是整个系统的“隐形瓶颈”。你想想看,CPU再快,数据喂不进去,不也是白搭?
1.1 嵌入式存储的演进:从“能用”到“好用”
嵌入式存储的发展,说白了就是一场“速度与容量”的竞赛。
- 早期阶段(2000年前后):Nor Flash 和 NAND Flash 刚冒头。Nor Flash 能直接运行代码,但容量小、写入慢。NAND Flash 容量大,但坏块多、管理复杂。我记得当时做第一个嵌入式项目,用的是 Nor Flash 存代码,外加一片小容量 NAND 存数据,调试起来那叫一个痛苦。
- eMMC 时代(2010年左右):eMMC 把 NAND Flash 和控制器封装在一起,对外提供标准接口。开发者不用再操心坏块管理、ECC 纠错这些破事儿了。嗯,这确实是个里程碑。我有个项目,从裸 NAND 切到 eMMC,开发周期直接缩短了两个月。
- UFS 时代(2015年至今):UFS 采用全双工串行接口,读写可以同时进行。说白了,就是“一边吃一边拿”,效率翻倍。现在旗舰手机、高端嵌入式设备,基本都标配 UFS 了。
- NVMe 时代(2020年至今):NVMe 最初是为 PC 设计的,但现在嵌入式领域也开始用了。它走 PCIe 通道,延迟极低,带宽极高。我最近在做一个边缘计算盒子,用的就是 NVMe SSD,性能确实猛。
核心观点:嵌入式存储的演进,本质上是“接口标准化”和“性能解耦”的过程。从裸 NAND 到 eMMC,再到 UFS、NVMe,每一代都在降低开发者的心智负担。
1.2 主流存储介质对比:谁是你的菜?
咱们直接上干货,看看这几种介质到底有啥区别。
| 介质 | 接口 | 典型带宽 | 延迟 | 典型应用 |
|---|---|---|---|---|
| NAND Flash | ONFI/Toggle | ~400 MB/s | ~50μs | 低端嵌入式、工控 |
| eMMC | MMC 5.1 | ~400 MB/s | ~100μs | 消费电子、入门级 |
| UFS 2.1 | M-PHY | ~1.2 GB/s | ~30μs | 中高端手机、平板 |
| UFS 3.1 | M-PHY | ~2.9 GB/s | ~20μs | 旗舰手机、车载 |
| NVMe | PCIe 3.0/4.0 | ~3.5 GB/s+ | ~10μs | 边缘计算、服务器 |
看到这个表,你可能会问:为什么 eMMC 的延迟反而比 NAND 高?
原因很简单:eMMC 内部多了一层控制器和协议转换。我当年调试一个 eMMC 设备,发现写操作要等几百微秒,后来一查,是控制器在做垃圾回收。说白了,eMMC 虽然方便,但性能上是有“中间商赚差价”的。
避坑指南:我曾经在一个项目中,为了省成本选了 eMMC,结果发现连续写入时性能掉得厉害。后来换成 UFS,问题迎刃而解。所以,如果你的应用有大量连续写入场景,建议直接上 UFS 或 NVMe。
1.3 性能指标解读:别被“纸面数据”骗了
很多同学看存储芯片的 datasheet,只盯着“顺序读写”和“随机读写”两个数字。其实,这里面门道多着呢。
- 顺序读写:说白了就是“大块数据搬家”。比如拷贝一个电影文件,顺序读写快就爽。但嵌入式场景里,这种操作其实不多。
- 随机读写:这才是嵌入式系统的“日常”。比如数据库写入、日志记录、文件系统元数据更新,都是随机小数据块操作。我见过一个项目,顺序读写能到 500 MB/s,但随机 4K 写入只有 5 MB/s,结果系统卡成狗。
- IOPS(每秒输入输出操作数):这个指标比带宽更关键。尤其是随机 IOPS,直接决定了系统的响应速度。举个例子,UFS 3.1 的随机读取 IOPS 能到 50万,而 eMMC 只有 1万左右,差距一目了然。
- 延迟:延迟是“隐形杀手”。你想想看,每次读写都要等几十微秒,累积起来就是灾难。我有个朋友做车载导航,用的 eMMC,结果地图加载慢得被客户投诉。后来换了 UFS,延迟从 100μs 降到 20μs,体验瞬间提升。
注意:不要只看峰值性能。很多存储芯片在“稳态”下性能会大幅下降。比如 NAND Flash 在写入一段时间后,因为垃圾回收和磨损均衡,性能可能掉到峰值的 1/10。所以,选型时一定要看“稳态性能”和“最差情况延迟”。
1.4 我的选型建议
说了这么多,到底该怎么选?我个人习惯按以下优先级来:
- 看场景:如果是低功耗、低成本设备,eMMC 够用。如果是高性能计算、实时系统,直接上 UFS 或 NVMe。
- 看接口:你的主控支持什么接口?有些老芯片只支持 eMMC,强行上 UFS 还得加桥接芯片,得不偿失。
- 看寿命:NAND Flash 有写入寿命限制。如果你的设备需要频繁写入,建议选 3D TLC 或 SLC 模式的介质。
- 看生态:eMMC 和 UFS 的驱动、文件系统支持比较成熟。NVMe 在嵌入式领域还比较新,驱动和工具链可能不够完善。
嗯,第一讲就到这里。下一讲咱们聊聊“存储性能的测量方法”,到时候我会分享一些实战中踩过的坑。咱们下期见!