1. 从一次选型翻车说起:为什么小容量存储反而更难选
前阵子帮一个做工业数据采集的朋友看方案,他的板子要跑一个轻量级文件系统,用来循环记录传感器日志,容量需求算下来 512MB 到 2GB 之间就够了。他一开始想都没想就选了 eMMC,理由很简单——"eMMC 是标准方案,资料多,供货稳"。结果打样回来发现两个问题:一是 BGA 封装在四层板上布线太吃空间,二是这颗 eMMC 的待机功耗比他预期高了一截,而他的设备是靠电池供电、要求待机几个月的那种。
后来换成 SD NAND,LGA 封装直接贴片,走线简单,功耗也降下来了,问题才算解决。这件事让我意识到一个很普遍的现象:大家讨论存储选型时,注意力几乎都放在大容量、高性能场景,反而把"小容量到底选谁"这个高频问题给忽略了。而恰恰是小容量场景,SD NAND 和 eMMC 的差异才会被放大到影响成败的程度。
这篇内容就是想把这件事讲透。我会从两者的物理本质讲起,拆开封装、接口、控制器、功耗、寿命、成本这几个维度,重点分析在 512MB 到 8GB 这个区间里,什么情况下该选 SD NAND,什么情况下 eMMC 更合适,以及选型时那些文档里不会写、但实际会踩的坑。不管你是刚接触嵌入式存储的新手,还是做过几轮方案的老手,应该都能从里面找到对自己有用的判断依据。
需要先说明一点:SD NAND 和 eMMC 在底层其实同源,都脱胎于 NAND Flash 加控制器的架构,所以很多特性是相通的。但正因为同源,差异才更隐蔽,更容易被"差不多"三个字糊弄过去。下面我们一层层剥开看。
2. 先搞清楚两者到底是什么:同源不同命的存储方案
2.1 从 NAND Flash 到"带控制器的存储颗粒"
要理解 SD NAND 和 eMMC 的区别,得先回到它们的共同祖先——裸 NAND Flash。裸 NAND 就是一片纯粹的存储阵列,读写擦除全靠主控去管,坏块管理、ECC 纠错、磨损均衡这些活都得自己写代码实现。早年间做嵌入式的人应该都有印象,直接挂一片 NAND 到主控上,光是移植一个能稳定跑的 FTL(闪存转换层)就够折腾好几周,而且不同厂家的颗粒特性还不一样,换料就得重调。
后来行业想通了:与其让每个主控厂商重复造轮子,不如把控制器和 NAND 颗粒封装在一起,对外提供一个标准接口。这个思路催生了两个产物——eMMC 和 SD NAND。它们内部结构高度相似:一颗 NAND 存储阵列 + 一颗控制器 + 标准接口协议。控制器负责坏块管理、ECC、磨损均衡、垃圾回收这些脏活累活,主控只需要通过标准命令读写就行。
那它们到底差在哪?核心差异在接口协议和封装形态上。eMMC 用的是 MMC 协议,引脚多、带宽高,标准 BGA 封装,焊球在芯片底部;SD NAND 用的是 SD 协议(兼容 SPI 模式),引脚少、封装小,常见 LGA 封装,焊盘在芯片边缘或底部但间距更大。这个差异看起来只是"接口不同",但它像多米诺骨牌一样,一路影响到了布线难度、功耗、成本、供货周期。
2.2 一张表看清物理层面的硬差异
我把两者在小容量场景下最关键的物理差异整理成表,方便对照:
| 对比维度 | SD NAND | eMMC |
|---|---|---|
| 接口协议 | SD 2.0/3.0,兼容 SPI | MMC 4.4/5.0/5.1 |
| 典型封装 | LGA-8 / LGA-16,焊盘间距大 | BGA-153 / BGA-169,球间距 0.5mm |
| 引脚数量 | 8 到 16 个 | 153 个以上 |
| 数据位宽 | 1bit / 4bit | 1bit / 4bit / 8bit |
| 典型容量区间 | 128MB 到 8GB | 4GB 到 128GB |
| 布线层数要求 | 2 层板可搞定 | 通常需 4 层以上 |
| 焊接方式 | 普通回流焊,易返修 | BGA 需专业返修台 |
| 工作电压 | 3.3V(部分 1.8V) | 3.3V + 1.8V/1.2V 多路 |
这张表里最值得琢磨的是封装和引脚数。eMMC 的 BGA-153 意味着 153 个焊球密密麻麻排在芯片底部,0.5mm 的球间距对 PCB 布线是实打实的挑战。四层板起步,走线要控阻抗,过孔要精心安排,稍不注意就是信号完整性问题。而 SD NAND 的 LGA 封装,焊盘间距通常在 0.5mm 到 1.0mm 之间,引脚又少,两层板就能布通,对成本敏感、空间紧张的产品来说,这个优势是决定性的。
2.3 为什么小容量场景差异会被放大
有人可能会问:大容量场景不也是这些差异吗,为什么单说小容量?原因在于规模效应。大容量场景下,eMMC 的 BGA 封装、多路电源、高带宽这些"重"特性是必要的,因为你要传大量数据,要跑高速,这些成本花得值。但小容量场景,比如只存几百兆日志、跑个轻量文件系统,你根本用不上 8bit 位宽和 400MB/s 的带宽,这时候 eMMC 的"重"就变成了纯粹的负担——多花的布线成本、多占的板面积、多出的功耗,全是浪费。
反过来,SD NAND 在小容量区间是"刚刚好"的形态:容量够用、接口够用、封装够小、功耗够低。这就是为什么在可穿戴、小型传感器、工业采集模块这类产品里,SD NAND 出现的频率越来越高。它不是"低配版 eMMC",而是针对小容量场景专门优化的另一条技术路线。
3. 接口与协议:SPI 兼容性带来的隐藏红利
3.1 SD 协议和 MMC 协议的本质区别
SD NAND 走的是 SD 协议,eMMC 走的是 MMC 协议。这两个协议在命令集层面有大量重叠,毕竟 SD 协议本身就是从 MMC 协议演化来的,但它们在初始化流程、命令格式、时钟管理上有明显不同。
对开发者来说,最直观的差异是初始化复杂度。eMMC 上电后要走一套完整的 MMC 初始化流程:发送 CMD0 复位、CMD1 查询电压、CMD2 获取 CID、CMD3 分配 RCA,然后切换到高速模式还要配置总线宽度和时序。这套流程在主控的 eMMC 控制器里通常是硬件实现的,你只要调库就行,但前提是你的主控得带 eMMC 控制器。
SD NAND 的初始化走 SD 协议流程,CMD0、CMD8、ACMD41、CMD2、CMD3 这一套。看起来也差不多,但关键在于——SD 协议支持 SPI 模式。这是 SD NAND 相对 eMMC 最大的隐藏红利。
3.2 SPI 模式:没有专用控制器的救命稻草
很多低成本 MCU 根本没有 SD 控制器,更没有 eMMC 控制器,但几乎每一颗 MCU 都带 SPI 接口。SD NAND 支持 SPI 模式,意味着你可以用最普通的 SPI 外设去驱动它,四根线(CS、CLK、MOSI、MISO)就能读写数据。
我实测过一个场景:用一颗国产 Cortex-M0 的 MCU,主频 48MHz,没有 SDIO 外设,只有两个 SPI。挂一片 SD NAND 上去,SPI 跑到 20MHz,顺序读速度能到 2MB/s 左右,顺序写 1MB/s 出头。这个速度用来记日志、存配置、做数据缓存完全够用。如果换成 eMMC,这颗 MCU 直接就没法驱动,因为 eMMC 不支持 SPI 模式,必须要有 MMC 控制器。
提示:SPI 模式下 SD NAND 的速度受限于 SPI 时钟和协议开销,实际带宽通常只有 SD 4bit 模式的五分之一到三分之一。如果你的应用对写入速度有要求,比如要连续存音频或图像,SPI 模式可能不够,得评估清楚。
3.3 4bit SD 模式下的性能表现
如果主控带 SDIO 外设,SD NAND 可以跑 4bit SD 模式,性能会好很多。以常见的 SD 3.0 标准、SDR50 模式为例,理论带宽 50MB/s,实测顺序读能到 20 到 30MB/s,顺序写 10 到 15MB/s。这个水平已经能满足大部分中小容量嵌入式应用了。
eMMC 在 8bit HS400 模式下理论带宽能到 400MB/s,实测顺序读 200MB/s 以上。但问题是,小容量场景真的需要这个速度吗?如果你只是存日志、放固件、做参数存储,10MB/s 和 200MB/s 对你来说没有区别,因为数据量本身就小,瓶颈不在带宽上。这时候为了 eMMC 的高带宽去增加布线层数、增加电源设计,性价比就很低了。
3.4 协议选择对软件栈的影响
从软件角度看,SD NAND 和 eMMC 在操作系统层面的支持都很成熟。Linux 内核里,SD NAND 走 mmc 子系统的 SD 分支,eMMC 走 mmc 分支,驱动框架是同一套。裸机开发的话,SD NAND 因为支持 SPI,可以用最简单的字节收发函数封装出读写逻辑,移植成本极低。
这里有个经验:如果你的项目用的是 RTOS 或者裸机,且主控没有 SD/MMC 控制器,SD NAND 几乎是唯一选择。如果主控有 SDIO,两者都能用,这时候再结合容量、功耗、成本去权衡。如果跑 Linux,两者驱动都现成,选型更多看硬件约束。
4. 封装与硬件设计:BGA 和 LGA 的工程账
4.1 BGA-153 的布线噩梦
eMMC 标准封装是 BGA-153,153 个焊球按 0.5mm 间距排列。这个间距意味着 PCB 上焊盘之间的走线通道极窄,普通工艺下两个焊盘之间最多走一根线,而且线宽线距都要压到 4mil 以下。对于四层板来说,通常需要专门规划一层做信号扇出,一层做电源,剩下两层走其他信号。
更麻烦的是电源。eMMC 一般需要三路电源:VCC(NAND 阵列,3.3V)、VCCQ(IO,1.8V 或 3.3V)、VCCQ2(部分器件需要 1.2V)。三路电源意味着三组去耦电容、三组电源平面分割,PCB 面积和层数都上去了。我见过一个项目,为了塞下一颗 eMMC 和它的电源网络,板子从两层被迫改成四层,单板成本直接涨了将近一倍。
4.2 LGA-8 的"贴片级"友好
SD NAND 常见的 LGA-8 封装,只有 8 个焊盘,间距通常在 0.5mm 到 1.0mm。这个规格对 PCB 工艺非常友好,两层板轻松布通,不需要阻抗控制,不需要盲埋孔。电源也简单,通常只需要一路 3.3V,加几个去耦电容就行。
我做过一个对比:同样一个功能模块,用 eMMC 方案 PCB 面积约 15mm x 15mm,四层板;换成 SD NAND,面积缩到 8mm x 6mm,两层板。对于空间受限的产品,比如小型传感器节点、穿戴设备,这个面积差异是能不能塞进去的问题。
4.3 返修与生产良率的现实考量
BGA 封装的另一个痛点是返修。BGA 焊点藏在芯片底部,肉眼看不见,虚焊、冷焊很难发现,出了问题基本只能靠 X 光检测。返修需要专业返修台,拆下来还得重新植球,产线良率受影响。
LGA 封装虽然也是底部焊盘,但焊盘在边缘可见,焊接质量目视可查,返修用普通热风枪就能搞定。对于中小批量生产、或者研发阶段需要反复调试的项目,这个差异能省下大量时间和成本。我认识一个做工业模块的团队,他们早期用 eMMC,每次改板都要重新评估焊接工艺,后来换 SD NAND,打样周期直接缩短了三分之一。
4.4 硬件设计中的常见坑
这里分享几个实际踩过的坑。第一,SD NAND 的 LGA 焊盘虽然好焊,但对焊盘平整度有要求,如果 PCB 焊盘有氧化或者不平,容易出现单边虚焊,表现为时好时坏。第二,SPI 模式下 CS 信号的上拉电阻不能省,否则上电瞬间可能误触发。第三,eMMC 的 VCCQ 电压必须和主控 IO 电压匹配,如果主控是 3.3V IO 而 eMMC 配了 1.8V VCCQ,通信直接失败,这个坑我在早期项目里踩过,排查了大半天才定位到。
5. 功耗与寿命:电池设备和小容量场景的胜负手
5.1 待机功耗的差距
对于电池供电的设备,待机功耗是生死线。eMMC 因为接口复杂、内部控制器规模大,待机电流通常在几百微安级别,部分型号甚至到 1mA。SD NAND 的控制器相对精简,待机电流可以做到几十微安,好的型号能到 10μA 以下。
这个差距在需要长期待机的场景里会被放大。假设设备用 1000mAh 电池,eMMC 待机 500μA,理论待机 2000 小时,约 83 天;SD NAND 待机 50μA,理论待机 20000 小时,约 833 天。差了整整十倍。对于要部署在野外、半年换一次电池的传感器,这个差异直接决定方案可行性。
5.2 读写功耗与峰值电流
读写功耗方面,eMMC 因为带宽高、并行位宽大,峰值电流也高,写入时瞬态电流可能到 100mA 以上。SD NAND 在 SPI 或 4bit 模式下,写入峰值电流通常在 30 到 50mA。如果你的电源设计余量紧张,比如用纽扣电池或者能量采集供电,SD NAND 的低峰值电流更容易满足。
注意:峰值电流不仅影响电源选型,还影响电源纹波。eMMC 的高瞬态电流如果去耦没做好,会导致电源跌落,进而引发写入失败甚至器件复位。小容量场景下,SD NAND 在这方面的设计压力小很多。
5.3 擦写寿命与磨损均衡
两者内部都带磨损均衡,但策略和效果有差异。eMMC 通常有更复杂的 FTL,支持动态和静态磨损均衡,寿命管理更精细。SD NAND 的控制器相对简单,磨损均衡能力弱一些,但对于小容量、低写入频率的场景,这个差异影响不大。
关键要看写入放大。如果你频繁改写小文件,比如每秒写一次日志,磨损均衡做得好的器件能把写入分散到整个存储阵列,寿命更长。实际选型时,不要只看标称的 P/E 次数(通常 3000 到 10000 次),要结合你的写入模式估算。我的经验是:小容量场景下,只要不是高频写入,两者寿命都够用;如果是高频写入,优先选磨损均衡算法更成熟的型号,而不是纠结 SD NAND 还是 eMMC。
5.4 数据保持能力
数据保持能力方面,两者都依赖 NAND 的电荷保持特性,在常温下通常能保证 10 年以上。但高温会加速电荷流失,工业级产品如果工作在 85℃ 环境,数据保持年限会大幅缩短。这时候要选工业级温度范围的器件,SD NAND 和 eMMC 都有工业级型号,选型时看清楚温度等级就行。
6. 成本与供货:小批量项目的现实约束
6.1 单颗价格与整体 BOM 成本
单看颗粒价格,同容量下 eMMC 通常比 SD NAND 便宜,因为 eMMC 出货量大、规模效应明显。但整体 BOM 成本不能只看颗粒。eMMC 需要四层板、多路电源、更多去耦电容,这些加起来可能比颗粒本身的差价还高。SD NAND 用两层板、单路电源,整体成本反而可能更低。
我算过一笔账:一个 2GB 存储需求的项目,eMMC 颗粒 8 元,但 PCB 从两层升四层增加 3 元,电源器件增加 2 元,合计 13 元;SD NAND 颗粒 12 元,PCB 两层不变,电源器件 0.5 元,合计 12.5 元。单看总成本差不多,但 SD NAND 方案省了布线工时和调试时间,综合成本更低。
6.2 最小起订量与供货周期
eMMC 主流型号通常有最小起订量要求,小批量采购可能拿不到好价格,甚至拿不到货。SD NAND 因为面向中小客户,起订量通常更灵活,样品和小批量采购更容易。对于研发阶段和小批量生产,这个差异很实际。
供货周期方面,两者都受 NAND 晶圆产能影响,但 eMMC 因为需求集中在大客户,小客户排产优先级低,交期波动可能更大。SD NAND 的供应链相对分散,交期通常更稳定。当然这也不是绝对的,具体要看型号和时期。
6.3 长期供货与停产风险
嵌入式产品生命周期长,存储器件的长期供货很关键。eMMC 因为迭代快,大容量型号更新频繁,小容量型号反而容易被停产。SD NAND 专注小容量区间,型号生命周期通常更长。选型时要问清楚厂家的长期供货承诺,最好选有明确停产通知周期的型号。
6.4 国产替代的现状
这几年国产存储器件进步很快,SD NAND 和 eMMC 都有不少国产型号可选。国产 SD NAND 在兼容性上做得不错,基本能 pin-to-pin 替代主流型号,价格也有优势。选型时可以优先考虑有国产替代方案的型号,供应链安全性更高。不过要注意,替代型号的时序参数可能有细微差异,换料时要重新验证。
7. 选型决策:什么场景选谁,一张清单说清楚
7.1 优先选 SD NAND 的场景
根据我的经验,以下场景优先考虑 SD NAND:
- 主控没有 SD/MMC 控制器,只有 SPI:这是硬约束,eMMC 直接出局。
- PCB 空间紧张,只能用两层板:LGA 封装和少引脚是决定性优势。
- 电池供电,要求低待机功耗:SD NAND 待机电流低一个数量级。
- 容量需求在 8GB 以下:这个区间 SD NAND 覆盖完整,性价比高。
- 中小批量生产,需要灵活供货:起订量低,交期稳定。
- 研发阶段需要反复调试:LGA 易返修,省时间。
7.2 优先选 eMMC 的场景
以下场景 eMMC 更合适:
- 容量需求超过 8GB:eMMC 在大容量区间选择更多、价格更好。
- 需要高顺序读写带宽:比如视频录制、大数据缓存,eMMC 的 8bit 高速模式优势明显。
- 主控带原生 MMC 控制器:硬件支持现成,用 eMMC 更顺手。
- 对磨损均衡和寿命管理要求极高:eMMC 的 FTL 更成熟。
- 大批量生产,成本敏感:eMMC 规模效应下颗粒单价更低。
7.3 决策流程图(文字版)
如果你还是拿不定主意,按这个顺序判断:
- 主控有没有 SD/MMC 控制器?没有 → SD NAND(SPI 模式)。
- 容量需求是否超过 8GB?是 → eMMC。
- 是否电池供电且要求长待机?是 → SD NAND。
- PCB 是否只能两层板?是 → SD NAND。
- 是否需要高速连续读写?是 → eMMC。
- 以上都不明确 → 按成本和供货情况,小容量优先 SD NAND。
7.4 混合方案的可行性
有些项目会考虑两者混用,比如用 eMMC 存大文件,用 SD NAND 存配置和日志。这种方案技术上可行,但会增加硬件复杂度和软件管理成本。除非有明确的性能分层需求,否则小容量场景不建议混用,选一种用透更省心。
8. 实操避坑:从打样到量产的经验沉淀
8.1 打样阶段的验证要点
打样时不要只验证"能不能读写",要重点验证边界条件。第一,全容量写入再读出校验,确认没有坏块导致的静默错误。第二,反复上下电测试,确认初始化稳定,特别是 SPI 模式下 CS 时序。第三,高温和低温测试,确认在温度极限下读写正常。第四,频繁写入测试,模拟实际写入模式跑一段时间,观察是否出现写入失败。
我见过一个案例,打样时读写都正常,量产时发现一批板子偶发写入失败,最后定位到是 SPI 时钟在高温下裕量不足。如果打样阶段做了高低温测试,这个问题就能提前发现。
8.2 软件层面的优化技巧
软件上有几个技巧能提升稳定性。第一,写入时加超时重试,SD NAND 和 eMMC 在内部垃圾回收时可能短暂不响应,重试能避免误判失败。第二,定期做健康检查,读取器件的状态寄存器,监控坏块和寿命。第三,文件系统选型要匹配,小容量场景用 LittleFS、SPIFFS 这类轻量文件系统比 FAT 更合适,磨损均衡和掉电保护更好。
8.3 量产中的一致性控制
量产时要注意批次一致性。不同批次的 NAND 颗粒特性可能有差异,换批次时最好重新跑一遍验证。另外,焊接工艺要固化,LGA 封装虽然好焊,但回流焊曲线不当也会导致虚焊。建议和代工厂确认焊接参数,并做首件 X 光检查。
8.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方向 |
|---|---|---|
| 初始化失败 | 电源不稳、时序不对 | 查电源纹波、SPI 时钟 |
| 读写偶发错误 | 信号完整性、去耦不足 | 查走线、加去耦电容 |
| 写入速度慢 | SPI 时钟低、模式不对 | 提高时钟、确认 4bit 模式 |
| 高温下失效 | 时序裕量不足 | 降时钟、选工业级型号 |
| 待机功耗高 | 未进休眠、上拉电阻漏电 | 查休眠命令、上拉阻值 |
9. 我个人的选型心得
做了这么多项目,我现在的习惯是:先看主控和板子约束,再看容量和功耗,最后才比价格。因为前两项是硬约束,选错了直接方案不成立;价格是软约束,可以通过方案优化去平衡。
小容量存储这个领域,SD NAND 和 eMMC 不是谁替代谁的关系,而是各自有最适合的战场。eMMC 在大容量、高性能场景是标准答案,SD NAND 在小容量、低功耗、空间受限场景是更聪明的选择。很多选型失误,根源在于用大容量场景的思维去套小容量需求,结果背上了不必要的复杂度。
最后分享一个小技巧:如果你拿不准,先买两种方案的样品板各做一版,实际跑一遍你的业务负载,用数据说话。存储选型这件事,纸面参数永远代替不了实测。我靠这个方法避开了好几次潜在的翻车,虽然多花了一点打样费,但比量产后再改板划算太多。