做嵌入式硬件设计,存储选型是绕不开的话题。
但很多人对各种存储的认知是模糊的:DDR和Flash有什么区别?NOR和NAND哪个好?eMMC和UFS差在哪?SPI NAND能不能替代eMMC?为什么有的产品用DDR+eMMC,有的用DDR+SPI NAND,还有的直接用MCU内置Flash?
这篇文章把嵌入式系统里常见的存储类型全部梳理一遍,从原理、参数、成本、适用场景四个维度讲清楚,最后给出选型决策方法。
一、先搞清楚:易失性 vs 非易失性
所有存储可以分成两大类,这是最基本的分类:
易失性存储(Volatile Memory): 断电数据就没了,速度快,用来做运行内存。代表是DRAM(DDR/LPDDR)。
非易失性存储(Non-Volatile Memory): 断电数据还在,速度相对慢,用来做代码和数据存储。
代表是Flash(NOR/NAND/eMMC/UFS)。
一个典型的嵌入式系统,两者都要有:
DRAM:程序运行时的内存,变量、栈、堆都在这里
Flash:程序代码、文件系统、用户数据存在这里
很多新手会问:能不能不用DRAM,直接在Flash上跑程序?答案是:可以,但只有NOR Flash支持XIP(Execute In Place,就地执行),NAND Flash和eMMC都不支持,必须把代码读到DRAM里才能运行。这也是为什么NOR Flash在某些低功耗、小容量场景下仍然不可替代。
二、DRAM:运行内存的选择
DRAM就是我们常说的"内存",嵌入式系统里常见的有这几种:
2.1 DDR3/DDR4:标准DIMM或颗粒
DDR3和DDR4是台式机/笔记本用的标准内存,嵌入式系统里也会用,尤其是x86架构的工业计算机。
DDR3:最高速率1600Mbps,电压1.5V(DDR3L是1.35V),目前主流是DDR3L
DDR4:最高速率3200Mbps,电压1.2V,比DDR3功耗低、速度快
适用场景:x86工业PC、高端边缘计算、需要大内存(8GB以上)的场景
封装:可以用DIMM插槽(方便更换),也可以直接焊颗粒(BOM成本低、更可靠)
2.2 LPDDR3/LPDDR4X/LPDDR5:低功耗移动内存
LPDDR是Low Power DDR,专为移动设备和嵌入式系统设计,功耗比标准DDR低很多。
LPDDR3:最高速率1600Mbps,电压1.2V,目前基本被淘汰
LPDDR4X:最高速率4266Mbps,电压0.6V(VDDQ),目前的主流选择
LPDDR5/5X:最高速率6400Mbps(LPDDR5X可达8533Mbps),电压0.5V,新一代产品
适用场景:ARM架构嵌入式设备、工业网关、边缘计算、手持设备、汽车电子
封装:FBGA封装,直接焊在PCB上,不能更换
2.3 怎么选DRAM?
选型原则:
x86平台:优先DDR4,兼容性好、成本低、容量大
ARM平台(瑞芯微、全志、NXP等):优先LPDDR4X,成熟稳定、性价比高
高端AI/视频处理:考虑LPDDR5,带宽更高,但要确认SoC是否支持
不要盲目追新:LPDDR5虽然快,但很多SoC还不支持,而且成本高、供货不稳定
三、Flash:代码和数据存储的选择
Flash是非易失性存储,嵌入式系统里用来存代码、文件系统、用户数据。常见的Flash类型很多,逐个讲。
3.1 NOR Flash:小容量、XIP、高可靠性
NOR Flash是最早的Flash类型,特点是:
XIP支持:可以直接在Flash上执行代码,不需要读到DRAM
随机读快:读延迟低,适合存代码
擦写慢:按块擦除,擦除时间长(几十毫秒到几百毫秒)
容量小:常见1MB~256MB,很少有1GB以上的
成本高:每GB成本比NAND高很多
寿命长:擦写次数10万次以上(SLC NOR)
适用场景:
MCU的代码存储(SPI NOR,几MB到几十MB)
低功耗设备,需要快速启动、不需要大内存
高可靠性场景,代码不能出错
存储启动代码(Bootloader),即使NAND坏了也能启动
常见型号: W25Q系列(华邦)、MX25系列(旺宏)、GD25系列(兆易创新),都是SPI接口的NOR Flash。
3.2 NAND Flash:大容量、低成本、需要控制器
NAND Flash是目前大容量存储的主流,特点是:
不支持XIP:必须把代码读到DRAM才能运行
顺序读快:连续读取速度快,随机读慢
擦写快:按块擦除,比NOR快
容量大:常见1GB~256GB,甚至更大
成本低:每GB成本远低于NOR
有坏块:出厂就有坏块,使用过程中也会产生坏块,需要坏块管理
需要ECC:必须做错误校验和纠正,否则数据会出错
NAND Flash按存储单元类型分:
SLC:1bit/cell,寿命长(10万次)、速度快、可靠性高、成本高
MLC:2bit/cell,寿命中等(3000~1万次)、成本中等
TLC:3bit/cell,寿命较短(1000~3000次)、成本低、目前主流
QLC:4bit/cell,寿命短(100~1000次)、成本最低、大容量产品用
适用场景:
大容量数据存储(文件系统、用户数据、固件)
配合DRAM使用,代码从NAND读到DRAM运行
消费电子、工业设备、汽车电子的主存储
注意: 原始NAND Flash颗粒不能直接用,必须配合控制器(做ECC、坏块管理、磨损均衡),或者用集成了控制器的eMMC/UFS。直接用原始NAND的门槛很高,一般只有大厂才做。
3.3 eMMC:NAND+控制器,标准化接口
eMMC(embedded MultiMediaCard)是把NAND Flash颗粒和控制器封装在一颗芯片里,提供标准化的MMC接口。
集成控制器:内置ECC、坏块管理、磨损均衡,用户不用管
标准化接口:MMC接口,8位数据总线,最高速率HS400(400MB/s)
容量:常见4GB~256GB
成本:比原始NAND高,但比自己做控制器划算
可靠性:比原始NAND高,因为控制器做了管理
供货:标准化产品,多家供应商可选
适用场景:
中高端嵌入式设备的主存储
运行Linux/Android系统,需要文件系统
不想自己做NAND控制器的团队
常见型号: 三星、金士顿、西部数据、江波龙、佰维等都有eMMC产品。工业级eMMC会用SLC或pSLC模式,寿命更长、温度范围更宽。
3.4 UFS:eMMC的升级版,高速串行
UFS(Universal Flash Storage)是eMMC的替代标准,用高速串行接口,性能比eMMC高很多。
高速串行接口:UFS 2.1最高1166MB/s,UFS 3.1最高2332MB/s,UFS 4.0更高
全双工:读写可以同时进行,eMMC是半双工
命令队列:支持多个命令排队,随机性能好
容量:常见16GB~512GB
成本:比eMMC高
功耗:比eMMC低(高速串行,电压低)
适用场景:
高端手机、平板(目前主流)
高端嵌入式设备、汽车电子(正在普及)
需要高随机读写性能的场景(数据库、AI推理)
注意: UFS需要SoC支持UFS接口,很多中低端SoC还不支持。而且UFS的PCB Layout要求更高(高速串行信号),设计难度比eMMC大。
3.5 SPI NAND:SPI接口的NAND,低成本方案
SPI NAND是用SPI接口的NAND Flash,介于SPI NOR和eMMC之间。
SPI接口:和SPI NOR一样的接口,引脚少、布线简单
容量大:常见128MB~4GB,比SPI NOR大很多
成本低:比同容量SPI NOR便宜很多
需要ECC:部分SPI NAND内置ECC,部分需要SoC做ECC
有坏块:需要坏块管理,比NOR麻烦
速度慢:SPI接口速度有限,比eMMC慢
适用场景:
成本敏感的中低端设备
容量需求比SPI NOR大,但不需要eMMC那么大
简单的文件系统或数据存储
配合小容量DRAM使用
常见型号: 兆易创新GD5F系列、华邦W25N系列、旺宏MX35系列。
3.6 各种Flash对比
四、典型组合方案
实际产品中,DRAM和Flash是组合使用的。几种典型的组合:
方案1:MCU内置Flash + 外置SPI NOR
DRAM:MCU内置SRAM(几十KB到几MB)
Flash:MCU内置Flash + 外置SPI NOR(扩展存储)
适用:简单MCU应用,不需要跑操作系统
成本:最低
例子:STM32 + W25Q128(16MB SPI NOR)
方案2:小容量DRAM + SPI NAND
DRAM:LPDDR3或DDR3,64MB~256MB
Flash:SPI NAND,128MB~2GB
适用:成本敏感的中低端设备,跑简单Linux
成本:低
例子:全志F1C100S(内置DDR)+ GD5F1GQ4(128MB SPI NAND)
方案3:LPDDR4X + eMMC(最主流)
DRAM:LPDDR4X,1GB~8GB
Flash:eMMC,8GB~128GB
适用:中高端嵌入式设备,跑Linux/Android
成本:中
例子:瑞芯微RK3568 + LPDDR4X 4GB + eMMC 32GB
方案4:LPDDR5 + UFS(高端)
DRAM:LPDDR5,4GB~16GB
Flash:UFS 3.1,64GB~256GB
适用:高端边缘计算、AI推理、汽车电子
成本:高
例子:瑞芯微RK3588 + LPDDR5 8GB + UFS 3.1 128GB
方案5:DDR4 + SATA SSD/NVMe(x86)
DRAM:DDR4,4GB~32GB
Flash:SATA SSD或NVMe SSD,128GB~1TB
适用:x86工业PC、高端边缘计算
成本:中高
例子:Intel/AMD x86 + DDR4 8GB + SATA SSD 256GB
五、选型决策方法
面对具体项目,怎么选存储?按这个步骤来:
第一步:确定系统架构
x86还是ARM?→ x86优先DDR4+SSD,ARM优先LPDDR+eMMC/UFS
用什么SoC?→ 看SoC支持哪些存储接口,不要选SoC不支持的
第二步:确定容量需求
DRAM:跑什么系统?Linux最小64MB,Android最小1GB,AI推理建议4GB以上
Flash:固件多大?用户数据多少?系统镜像一般2~8GB,用户数据按需
第三步:确定性能需求
启动时间要求?→ 要求快启动选UFS或eMMC,不要求可以选SPI NAND
随机读写性能?→ 数据库、AI推理选UFS,顺序读写eMMC够用
带宽需求?→ 视频处理、AI选LPDDR5,一般应用LPDDR4X够用
第四步:确定可靠性和温度要求
工业级(-40~85℃)?→ 选工业级颗粒,eMMC选pSLC模式,不要用消费级
车规级(-40~105℃)?→ 选AEC-Q100认证的颗粒,UFS优先
7×24小时运行?→ 选高寿命颗粒(SLC/pSLC),做好磨损均衡
第五步:确定成本预算
成本敏感?→ SPI NAND + 小容量DRAM,或者用内置Flash的MCU
成本不敏感、追求性能?→ LPDDR5 + UFS
性价比最优?→ LPDDR4X + eMMC,目前最均衡的组合
六、常见误区
误区1:容量越大越好
错。DRAM和Flash的容量要匹配需求,太大浪费成本,太小影响性能。比如跑简单Linux,1GB DRAM足够,没必要上4GB。存储也是,固件只有200MB,没必要选64GB eMMC。
误区2:速度越快越好
错。速度越快,成本越高、设计难度越大、功耗越高。如果应用就是个简单的工业网关,eMMC完全够用,没必要上UFS。UFS的高速串行信号对PCB Layout要求很高,设计不好反而出问题。
误区3:NOR Flash过时了
错。NOR Flash在小容量、XIP、高可靠性场景下仍然不可替代。很多产品的Bootloader还是存在SPI NOR里,即使主存储是eMMC。因为NOR Flash的可靠性高,即使eMMC坏了,Bootloader还能运行,可以做恢复。
误区4:eMMC和UFS可以随便换
错。eMMC是并行接口,UFS是串行接口,引脚定义完全不同,不能Pin-to-Pin替换。设计的时候要选好,后期想换就要改PCB。而且UFS需要SoC支持,很多中低端SoC只有eMMC接口,没有UFS。
误区5:工业级就是温度范围宽
不全对。工业级存储不只是温度范围宽,还包括:更严格的筛选、更长的寿命(pSLC模式)、更稳定的供货、更详细的测试报告。只看温度范围是不够的,还要看擦写寿命、数据保持时间、失效率等指标。
七、总结
嵌入式存储选型,核心就三句话:
1. DRAM看架构和带宽:x86用DDR4,ARM用LPDDR4X,高端AI用LPDDR5
2. Flash看容量和成本:小容量代码用SPI NOR,大容量数据用eMMC,高端用UFS,成本敏感用SPI NAND
3. 组合看场景:MCU用内置Flash+SPI NOR,中低端用小DRAM+SPI NAND,主流用LPDDR4X+eMMC,高端用LPDDR5+UFS
存储选型没有"最好",只有"最合适"。根据项目的需求、预算、可靠性要求,选最合适的组合,才是正确的做法。
有存储选型相关的问题,欢迎评论区交流!