目录
- eMMC、SDMMC、Micro-SD Card 有何区别
- Micro SD Card 内部是否有控制器
- 贴片 SD NAND 与 eMMC 的本质区别、成本与可靠性
- SD NAND 为何更便宜:同容量成本对比
- SD NAND 与 eMMC 控制器主要差异列表
- RPMB 详解
- eMMC Sudden Power Loss(SPL)实现原理
- 选型决策速查表
1. eMMC、SDMMC、Micro-SD Card 有何区别
1.1 核心区分
SDMMC 是主机控制器接口(IP/总线);eMMC、Micro-SD 是存储设备。
- SDMMC:SoC 上的控制器,同时兼容 MMC/eMMC、SD/microSD 卡协议
- eMMC:焊在主板的 BGA 嵌入式存储芯片(8bit 并行 MMC 总线)
- Micro-SD(TF 卡):可插拔外置存储卡(SD 协议,1/4bit)
1.2 详细对比表
| 项目 | SDMMC | eMMC | Micro-SD(TF 卡) |
|---|---|---|---|
| 本质 | SoC 内部主机控制器 IP(硬件外设) | BGA 封装存储芯片(NAND+主控) | 可插拔存储卡 |
| 物理形态 | 无独立器件,集成在 SoC | BGA(BGA153 为主),SMT 焊死在 PCB | 独立卡片,卡座插接,可随意拔插 |
| 总线协议 | 同时支持 MMC、SD、SPI | MMC 5.x 协议,8bit 并行总线 | SD 协议,4bit/1bit,兼容 SPI |
| 数据位宽 | 由配置决定 | 固定 8bit | 1bit 或 4bit(UHS-I) |
| 最高速率 | 取决于控制器版本 | HS400:400 MB/s | UHS-I:104 MB/s;UHS-II:312 MB/s |
| 引脚/信号 | CLK、CMD、D[0:7]、RST 等 | CLK、CMD、D[0:7]、RST(8 位数据) | CLK、CMD、D[0:3](4 位,无 RST) |
| 典型用途 | 嵌入式平台读写 eMMC / MicroSD | 平板、机顶盒、工控板主存储(放系统) | 相机、开发板扩容、日志存储,外部扩展 |
| 可更换 | —— | 不可更换(拆焊) | 用户直接插拔更换 |
| 可靠性 | 控制器本身 | 工业级可选,焊死抗震动;但有 NAND 擦写寿命 | 插拔易接触不良,震动场景稳定性弱于 eMMC |
| 特殊功能 | host 侧,无存储功能 | RPMB 安全分区、boot 分区、硬件掉电保护 | 支持 SD 版权保护,一般无 RPMB |
1.3 容易混淆的关键点
SDMMC 不是存储:很多 MCU/SoC 手册里叫
SDMMC外设,就是 MMC/SD 二合一控制器,软件可以配置成两种模式:- 接 eMMC → MMC 模式,8bit
- 接 MicroSD 卡座 → SD 模式,4bit
总线不直接互通:控制器可以切换协议,但 eMMC 芯片不能直接插到 MicroSD 卡座,物理引脚、协议时序不同。
性能差异根源:eMMC 用 8bit 并行,理论带宽更高;MicroSD 受卡座、4bit 总线限制,UHS-I 上限只有 104 MB/s,且插拔接触阻抗会影响稳定性。
硬件设计差异:
- eMMC 布线:8 根数据线+CMD+CLK+RST,高速需要严格等长、阻抗控制
- MicroSD:4 根数据线,走线短,一般要求宽松,但卡座 ESD、机械可靠性是重点
2. Micro SD Card 内部是否有控制器
2.1 结论
Micro-SD 内部自带控制器(卡内主控)。
和 eMMC 逻辑几乎一样:eMMC / MicroSD 都属于带内置主控的 NAND 存储;而 SDMMC 是 SoC 端的 Host 主机控制器。
2.2 MicroSD 卡内主控的工作
卡内部 =SD 主控芯片 + 一片/多片堆叠 NAND Flash + 少量阻容
主控负责:
- 与 SoC 的 SDMMC Host 交互,解析 SD 协议 CMD
- NAND 底层管理:磨损均衡 WL、坏块管理、ECC 纠错
- 掉电保护、SD 协议安全功能(CPRM)
- 内部地址翻译(LBA ↔ NAND 物理页)
外部 SDMMC Host 只管发 SD 协议命令,不需要 Host 去操作原始 NAND,这点和 eMMC 完全相同。
2.3 eMMC vs MicroSD 主控差异
| 项目 | eMMC 内置主控 | MicroSD 内置主控 |
|---|---|---|
| 封装 | BGA,焊死在 PCB | 塑封卡片,可插拔 |
| 对外协议 | MMC 协议,8bit 并行 | SD 协议,最多 4bit(UHS-I) |
| 硬件信号 | 带 RST 复位引脚 | 无 RST 引脚 |
| 安全分区 | RPMB 分区是标配 | 一般不支持 RPMB |
| 固件能力 | 更强大,工业级掉电保护更强 | 简化版,成本更低 |
2.4 最容易踩坑的一句话区分
- SDMMC(SoC 外设):Host 主机,发命令
- eMMC:板载存储,自带 MMC 协议卡内主控
- MicroSD:可插拔存储,自带 SD 协议卡内主控
误区澄清:不是"MicroSD 没有控制器",MicroSD 的控制器在卡片内部;SDMMC 是主机侧控制器,两者不是同一东西。
2.5 延伸:SD NAND(贴片 TF)
市面上还有SD NAND,本质就是把 MicroSD 卡做成 BGA 贴片,内部同样保留 SD 主控,只是去掉塑料卡壳,直接焊 PCB,对外依然走 SD 协议,复用 SDMMC 控制器。
3. 贴片 SD NAND 与 eMMC 的本质区别、成本与可靠性
3.1 一句话本质区别
SD NAND = 把 MicroSD 卡去掉塑料壳,做成 LGA 贴片,对外仍然是 SD 协议(最多 4bit);eMMC 是 JEDEC MMC 协议,8bit 并行总线。
两者都内置 NAND+主控,但是协议、总线位宽、硬件信号集、固件能力完全不同,不能直接互换。
3.2 本质差异详表
| 项目 | SD NAND(贴片 SD NAND) | eMMC |
|---|---|---|
| 协议 | SD 2.0/3.0(SDIO) | JEDEC eMMC(MMC5.x) |
| 总线 | 最多 4bit 数据线,无硬件 RST 引脚;半双工 | 8bit 并行数据线 + CMD/CLK + 硬件 RST;独立复位信号 |
| 封装 | LGA-8(8pin),焊接简单,返修容易 | BGA153 为主,BGA 球,焊接难度高 |
| 容量区间 | 128MB~32GB,小容量为主 | 2GB~1TB,大容量为主 |
| 性能 | 顺序读写:十几 MB/s 级别,随机 IO 低;控制器缓存小、GC 能力弱 | eMMC5.1 HS400 最高 400 MB/s;大缓存、命令队列、多 Die 并行,随机性能强 |
| 安全分区 | 无 RPMB,无 Boot 分区 | 标配 Boot0/Boot1 系统启动分区 + RPMB 安全加密分区 |
| NAND 颗粒(市面主流) | 工业款多用 SLC/pSLC,P/E:5~10 万次 | 消费级 TLC 为主,P/E:500~3000 次;工业 eMMC 可选 SLC/MLC |
| PCB 布线 | 2 层板可做,走线要求宽松 | 高速模式需要 4~6 层板,等长、阻抗控制严格 |
底层架构共同点:都内置 FTL、坏块管理、ECC、磨损均衡、掉电保护。只是 eMMC 主控规格更强、功能更全。
3.3 成本对比
小容量 SD NAND 便宜很多。
同容量物料成本:SD NAND 更便宜,小容量差距巨大
- 4GB/8GB 区间,SD NAND 通常比 eMMC 便宜 30%~50%
- eMMC 在小容量段不经济,原厂产能优先做大容量 eMMC,小容量 eMMC 溢价很高
硬件配套成本
- SD NAND:LGA8,PCB 2 层即可,布线简单,SMT 良率高
- eMMC:BGA153,4 层起,高速走线等长、阻抗,PCB 和 SMT 成本显著增加
软件成本
- SD NAND:直接复用 MicroSD 驱动(SDIO),很多 MCU 自带 SD 驱动,几乎零开发
- eMMC:需要 SoC SDMMC 控制器支持 MMC 模式,Boot 分区、RPMB、HS200/HS400 调试工作量更大
反过来:64GB 及以上,eMMC 单 GB 成本反而更优,SD NAND 不适合大容量系统存储。
3.4 可靠性对比
可靠性分两个维度:NAND 擦写寿命vs协议/硬件安全特性。
3.4.1 擦写寿命(看颗粒类型,不是器件名字)
- 工业 SD NAND(SLC/pSLC):P/E 5 万~10 万次,高频日志、循环写入场景优势巨大
- 普通消费 eMMC(TLC):仅 500~3000 次,频繁写容易磨损报废
注意:不是所有 SD NAND 都是 SLC,也有 TLC SD NAND;eMMC 也有工业 SLC 型号,只是很贵。
3.4.2 协议/硬件安全、掉电保护、数据稳定性(eMMC 更强)
- eMMC 有硬件复位 RST 引脚,异常掉电恢复机制更完善,规范内有 Sudden Power Loss 掉电保护标准;SD NAND 没有硬件复位,依赖 SD 协议软件复位。
- eMMC 支持 RPMB 安全分区、独立 Boot 分区,适合安全启动、密钥存储;SD NAND 没有 RPMB,不适合安全加密场景。
- eMMC 主控缓存更大、后台 GC、全局磨损均衡、Auto Refresh(读扰动保护)固件能力更强,长时间静态数据保存更稳。
- 物理连接:两者都是贴片焊接,都没有卡座接触不良问题,抗震一样远好于可插拔 MicroSD 卡。
3.4.3 一句话可靠性总结
- 高频循环写、小容量、普通日志存储 → SLC SD NAND 更可靠(寿命长)
- 跑操作系统、安全启动、密钥、大容量、长期静态数据保存 → eMMC 更可靠
3.5 选型速记
- SD NAND:小容量(128MB~8GB)、MCU 平台、不想改 PCB、频繁写日志、成本敏感;无安全密钥需求,不跑大系统
- eMMC:Linux/Android 系统盘、大容量、需要安全启动/RPMB、高带宽读写
3.6 容易踩坑误区
- ❌ SD NAND 是简化 eMMC:不是,协议栈完全两套,只是共用 SoC 的 SDMMC 硬件 IP。
- ❌ SD NAND 一定比 eMMC 可靠:要看颗粒,TLC SD NAND 寿命不如 SLC 工业 eMMC。
- ❌ 驱动完全一模一样:Linux 下都走 mmc 子系统,但是 SD 模式 vs MMC 模式,设备树配置不一样,RPMB/Boot 分区 SD NAND 不存在。
4. SD NAND 为何更便宜:同容量成本对比
4.1 SD NAND 更便宜的四个核心原因
原因一:主控 IP 更简单
SD NAND 主控就是 MicroSD 卡主控,只实现 SD 协议(4bit,无 RPMB、Boot 分区硬件机制、无硬件 RST 链路),固件算法精简,不需要 eMMC 全套安全、掉电保护、Auto Refresh、命令队列等复杂功能,主控芯片面积更小、流片成本更低。
eMMC 主控要支持 MMC 8bit、HS200/HS400、RPMB、Boot 分区、硬件复位链路、更完善的 Sudden Power Loss 机制,主控复杂度高很多。
原因二:封装成本差距巨大
- SD NAND:LGA-8,仅 8 个焊盘,基板简单,塑封、测试良率高,SMT 简单,热风枪就能返修。
- eMMC:BGA153,153 颗焊球,超薄基板、植球工艺,测试成本高;BGA 返修台、良率损耗、植球都会增加成本。
原因三:NAND 晶圆+产能结构(最关键)
国际大厂(三星/铠侠/美光)的 3D NAND 都是优先做大容量 Die(32GB+);4GB/8GB 这类小容量 eMMC,要么用老旧 2D NAND(停产、库存稀缺,溢价高),要么把大 Die 降容使用,浪费晶圆面积,单位 GB 成本飙升。
SD NAND 国内厂商专门瞄准 128MB~8GB 小容量 IoT 市场,用 2D SLC/pSLC 晶圆做,专门服务小容量需求,没有产能浪费。
原因四:整机配套隐性成本
- SD NAND:2 层 PCB 即可,走线宽松,不用严格等长、阻抗控制
- eMMC 跑 HS200/HS400,PCB 一般 4 层起,需要阻抗控制、数据线等长,PCB、硬件调试成本增加
一句话:SD NAND 本质是去掉塑料外壳的 TF 卡,复用成熟低价 SD 卡主控方案;eMMC 是面向手机/平板大容量系统盘的高性能 BGA 存储,硬件/协议/安全功能全套拉满,小容量规格天生不经济。
4.2 同容量成本对比
同样容量(比如 4GB / 8GB),SD NAND 物料单价显著更便宜,一般低 30%~50%,容量越小差价越大。
| 容量 | 成本趋势 | 说明 |
|---|---|---|
| 4GB | 差价最大 | 小容量 eMMC 属于非主流规格,缺货溢价严重,SD NAND 优势极强 |
| 8GB | SD NAND 依然便宜 | —— |
| 32GB | 差距缩小 | —— |
| ≥64GB | 形势反转 | eMMC 单 GB 成本更低,SD NAND 不再划算 |
重要前提:颗粒等级对齐。如果拿工业 SLC SD NAND 对比普通消费 TLC eMMC:SD NAND 物料更贵,但擦写寿命强很多。市场默认对比:同等级(消费 vs 消费、工业 vs 工业),小容量 SD NAND 便宜。
4.3 同容量场景下的可靠性再对比
擦写寿命:看 NAND 颗粒类型,不是器件名字
- SLC SD NAND:P/E 5~10 万次,循环写日志、高频写入更稳
- 普通 TLC eMMC:P/E 仅几百~3000 次,频繁写容易磨损
协议/掉电/安全能力:eMMC 更强
eMMC 有硬件 RST、RPMB、独立 Boot 分区,掉电恢复机制、后台 GC、数据保存(Auto Refresh)固件能力更强;SD NAND 没有硬件复位、无 RPMB,掉电保护算法更简化。物理焊接可靠性
两者都是贴片焊接,都没有卡座接触问题,抗震能力都远好于可插拔 TF 卡;只是 BGA153 焊接不良风险高于 LGA8。
4.4 选型一句话总结
- 128MB ~ 8GB,不需要 RPMB 安全分区,高频写日志、成本敏感 → SD NAND
- ≥32GB,需要安全启动/RPMB,跑 Linux/Android 系统盘,高顺序带宽 → eMMC
- 不要被名字迷惑:eMMC 贵不是因为容量,是小容量 eMMC 属于"非主流规格+复杂主控+BGA 封装"三重溢价。
5. SD NAND 与 eMMC 控制器主要差异列表
前提:SD NAND = 贴片 TF,内部是 SD 协议控制器;eMMC 是 MMC 协议控制器,均为存储端内置主控,不是 SoC 的 SDMMC Host。
| 对比项 | SD NAND 控制器 | eMMC 控制器 |
|---|---|---|
| 对外协议 | SD 3.0(SD 模式),不支持 MMC 原生协议 | JEDEC eMMC(MMC5.x),原生 MMC 协议 |
| 数据位宽 | 最大 4bit 并行,半双工 | 最大 8bit 并行,半双工 |
| 硬件复位信号 | 无硬件 RST 引脚;只能靠 SD 软件复位 | 带硬件 RST 复位引脚,硬件复位能力强 |
| 专用分区 | 仅 User Area 用户区;无 Boot0/Boot1,无 RPMB | User Area + Boot0/Boot1 + RPMB 安全分区 |
| RPMB 安全能力 | 不支持 RPMB,无 HMAC 写计数器防重放 | 原生支持 RPMB,HMAC+Write Counter 鉴权防重放 |
| 启动支持 | 不能做独立硬件 Boot 分区,无法直接从 SD NAND 启动(Host 需要先加载 SD 驱动) | Boot 分区支持,SoC 可直接从 eMMC Boot 分区启动 |
| 高速模式 | SD UHS-I,上限 104 MB/s;无 HS200/HS400 | HS200 / HS400,最高 400 MB/s |
| 命令队列 | 无原生命令队列,单命令串行执行 | 支持命令队列(CMDQ),多命令并行处理,随机 IO 更强 |
| Sudden Power Loss(SPL) | 简化版掉电保护,固件策略简单,无标准强制规范 | JEDEC 标准强制的掉电保护规范,断电事务可回滚 |
| Auto Refresh | 一般不支持或简化实现 | 支持 Auto Refresh,抵抗长时间静置的数据读扰动 |
| 内部缓存 | 缓存容量偏小,后台 GC 能力弱 | 更大片上缓存,GC、磨损均衡算法更完善 |
| FTL/磨损均衡 | 面向小容量 IoT,算法简化 | 完整企业级 FTL,全局磨损均衡,支持大 Die 管理 |
| OTP 一次性可编程区 | 少量 OTP,一般不用于安全密钥配对 | OTP 区,用于 RPMB 安全密钥烧录绑定 |
| 写计数机制 | 普通 LBA 写,无 RPMB 递增计数器 | RPMB 独立递增 Write Counter(不可清零) |
| 主控复杂度&面积 | 逻辑少,面积小,流片成本低 | 逻辑庞大,安全模块+高速 PHY,面积更大 |
| 错误管理 | 基础 ECC,有限坏块管理 | 更强 ECC、后台坏块扫描、Data Retention 管理 |
| 固件升级 | SD 标准命令升级,功能简单 | eMMC 标准 FW 更新,支持更多调试/维护指令 |
5.1 核心一句话总结
SD NAND 控制器本质就是 TF 卡主控的裸片版本,砍掉安全分区、硬件复位、高速 8bit PHY、命令队列;eMMC 控制器是一套面向系统启动盘的高性能+安全增强型 MMC 主控。
5.2 补充工程关键点
- 不是 NAND 颗粒差异,是主控硬件模块、协议能力不同;颗粒可以同为 SLC/pSLC/TLC。
- Linux 驱动:SD NAND 走
sd驱动,eMMC 走mmc驱动,都复用内核 mmc 子系统,但能力集不一样。 - 掉电风险:SD NAND 主控断电保护策略简化,高频随机写场景下,断电丢数据概率高于 eMMC。
6. RPMB 详解
6.1 定义
RPMB = Replay Protected Memory Block,防重放保护存储块。
一句话:eMMC/UFS 内部一块独立、带 HMAC 鉴权的安全分区,专门用来存密钥、证书、指纹模板等敏感数据;普通 SD/SD NAND(SD9.0 之前)没有 RPMB。
6.2 核心原理
RPMB 的安全机制建立在两个核心要素之上:
要素一:共享密钥 Secure Key(256bit)
产线烧录:在安全产线,同一个密钥一次性写入 eMMC 的 OTP + SoC 端 TEE 安全世界,芯片和主机配对绑定;密钥不会暴露给普通 Linux/Android 普通系统。
所有访问 RPMB 的命令,都要用这个密钥做HMAC-SHA256 签名校验。签名不对,拒绝写入。
要素二:Write Counter(写计数器),防重放攻击
eMMC 内部维护一个只增不减的计数器,每成功写一次 RPMB 就 +1,不可清零。
重放攻击(Replay Attack):黑客抓包合法写命令,之后重复发送这条旧报文篡改数据。
因为 Counter 已经变大,旧报文里的 Counter 和芯片当前值不匹配,直接拒绝,旧的签名报文无法复用。
读操作的完整性校验
读操作时:Host 发随机数,eMMC 返回数据+HMAC 签名;Host 校验签名,确认数据没有被中间人篡改。
6.3 关键特性
- 独立分区,容量很小,典型 4MB/8MB,不是用来存系统、日志;只放少量安全敏感信息
- 属于 eMMC 标准分区之一,和 Boot0/Boot1、UserArea 并列
- 写入强鉴权;读取需要校验完整性
- 密钥绑定 SoC+eMMC 一对;eMMC 拆下来换到另一块主板,RPMB 直接打不开,防止拆件盗取密钥
6.4 典型用途
- 设备唯一密钥、加密根密钥
- 安全启动相关证书、OTA 校验密钥
- 指纹/人脸支付模板、DRM 版权密钥
- 工控/车载设备安全参数、防篡改固件校验信息
6.5 与 SD NAND / MicroSD 的对比
- eMMC:标配 RPMB(eMMC4.4 及以上)
- 传统 MicroSD / SD NAND:无 RPMB(SD9.0 才新增可选 RPMB,市面上几乎见不到)
- UFS:同样支持 RPMB,机制一致
6.6 工程上的痛点
- 产线必须有安全烧录工位,密钥注入是生产环节,普通烧录器做不了
- 软件必须依赖 TEE(可信执行环境),普通 Linux 内核无法直接访问 RPMB
- 一旦 Secure Key 烧写完成,不可擦除修改;密钥丢失,RPMB 永久失效
- 有写入次数上限(Write Counter 最大值),所以 RPMB 不适合高频循环写
6.7 一句话选型判断
产品需要安全启动、密钥防篡改、防拆件盗密钥 → 必须 eMMC(RPMB);普通日志存储,不需要密钥保护 → SD NAND 足够,省成本。
7. eMMC Sudden Power Loss(SPL)实现原理
7.1 核心定义
eMMC SPL 不是片内大电容(SSD 那种 PLP),是以控制器固件+原子写+元数据日志+上电恢复为核心的事务保护机制;配合 JEDEC 标准 PON 断电通知命令、硬件 RST,降低异常断电后的元数据/FTL 损坏概率。
重点区分:SPL ≠ 掉电电容备份;普通消费 eMMC 内部没有储能电容;工业 eMMC 可选外部后备电容配合 PON。
7.2 底层核心思想:事务化写入 + FTL 元数据日志
NAND 页编程需要 us~ms 级时间,如果写到一半断电,该页会变成半编程、ECC 不可纠正的坏页,同时 FTL 映射表(LBA→物理块)一旦半截写入,整个文件系统直接挂。
eMMC 主控的 SPL 思路:
- 先写日志元数据(journal)到独立系统块(System Block,SLC 模式保存,可靠性更高),标记本次写操作:待更新的 LBA、旧物理页、新物理页
- 再执行 NAND 页编程
- 编程成功后,再提交(commit)FTL 映射表
这是原子事务:要么完整成功,要么回退到断电前的有效状态,不会出现映射表半截更新。
7.3 三个关键硬件/固件模块
模块一:System Block(系统块,SLC 模式存储 FTL/日志)
eMMC 会预留一部分 NAND 块,强制跑 SLC 模式,专门放 FTL 映射表、掉电日志、坏块信息。SLC 的编程稳定性、抗断电能力远强于 TLC。
断电瞬间如果正在更新映射表,日志会记录事务断点。上电重启后主控固件自动扫描 System Block 日志:
- 事务标记=已完成:正常
- 事务标记=未提交:回滚到事务开始前旧映射,丢弃本次不完整写入
模块二:Reliable Write(可靠写,eMMC5.1 标准)
专门针对单 LBA 的原子更新:旧地址数据保持有效,直到新页完全编程成功。
断电发生在编程中途:旧数据完好,不会出现一半新一半旧的撕裂数据。适合写关键配置、参数。
模块三:上电自动恢复流程(Power Loss Recovery)
上电后 eMMC 固件自动执行,不需要 Host 干预:
- 读取 System Block 内的 SPL 事务日志
- 检测是否存在未完成事务
- 若存在半截事务:回滚 FTL 映射,废弃半截编程的物理页,标记该块
- ECC 扫描,识别 UECC(不可纠正 ECC)页面
- 将该无效页丢弃,把该块内其余有效数据迁移到新健康块
- 恢复完成,再进入正常 Idle 状态,响应 Host 命令
7.4 JEDEC 标准的 PON(Power Off Notification,断电通知)
属于 SPL 配套主动防护(不是被动断电恢复):
Host 侧电源检测到电压跌落,提前发送 PON 命令(短 PON / 长 PON)通知 eMMC,eMMC 收到后:
- 停止接收新写入
- 将 SRAM 缓存里的 FTL 元数据、关键日志刷入 NAND System Block
- 完成当前正在执行的 NAND 编程
- 进入安全断电状态
系统设计要点:Host 需要后备电容,维持足够供电时间让 eMMC 跑完 PON 流程;SD NAND 没有 PON 标准命令。
7.5 Hardware RST_n 硬件复位的辅助作用(eMMC 独有)
- 异常断电后上电,Host 可以拉低 RST_n 复位 eMMC
- 复位信号强制 eMMC 控制器复位,终止卡住的 NAND 编程状态,安全进入上电恢复流程
- SD NAND 没有硬件 RST 引脚,只能依靠 SD 软件复位,遇到写操作卡死场景恢复能力弱
7.6 SPL 能力边界(非常重要,很多人误解)
不能保证缓存里还没写入 NAND 的普通业务数据不丢
普通 Cache Write 模式下,Host 写入到 eMMC 片上 SRAM 缓存,主控会异步后台刷 NAND;如果断电太快,缓存内未刷入 NAND 的数据直接丢失。SPL 保护的是 FTL 映射、元数据不崩溃,不是用户业务数据。
想保护业务数据:Host 发 Flush 命令,或者使用 PON,或者 Reliable Write。
SPL 只能保证 eMMC 设备本身不卡死、FTL 不损毁,上电还能正常识别,不代表上层文件系统(ext4/fat)一定完好;文件系统本身也要日志(ext4-journal)配合。
片内无大容量储能电容;SSD 的 PLP 电容是另外一套方案,不要混淆。
7.7 和 SD NAND 掉电机制对比
SD NAND 主控只有简化的掉电处理:没有 System Block 日志事务、无 Reliable Write、无 PON 命令,断电中途写操作容易直接破坏映射表;上电缺少标准化的自动事务回滚流程,更容易出现卡盘、LBA 映射损坏。
7.8 精简原理流程
Host 写命令 ↓ eMMC 主控:写事务日志(System Block) ↓ 执行 NAND Page 编程 ↓ 成功后更新 FTL 映射 ↓ ┌─ 正常:日志标记提交完成 └─ ⚡ 突然断电:事务停在中间 ↓ 上电 → eMMC 固件扫描日志 ↓ 检测未完成事务 → 回滚 FTL,废弃半截页 ↓ 恢复到有效状态8. 选型决策速查表
8.1 按容量选型
| 容量范围 | 推荐方案 | 理由 |
|---|---|---|
| 128MB ~ 8GB | SD NAND | 小容量 eMMC 溢价严重,SD NAND 成本低 30%~50% |
| 8GB ~ 32GB | 视需求而定 | 成本差距缩小,看安全/性能需求 |
| ≥64GB | eMMC | eMMC 单 GB 成本更优,SD NAND 不适合大容量 |
8.2 按功能需求选型
| 需求 | SD NAND | eMMC |
|---|---|---|
| 安全启动 / RPMB 密钥存储 | ❌ 不支持 | ✅ 标配 |
| 硬件复位 RST | ❌ 无 | ✅ 有 |
| 独立 Boot 分区 | ❌ 无 | ✅ Boot0/Boot1 |
| 高速读写(>104 MB/s) | ❌ UHS-I 上限 | ✅ HS400 达 400 MB/s |
| 命令队列 CMDQ | ❌ 无 | ✅ 支持 |
| 标准化掉电保护 SPL | ⚠️ 简化版 | ✅ JEDEC 标准 |
| Auto Refresh 读扰动保护 | ⚠️ 一般不支持 | ✅ 支持 |
| PON 断电通知 | ❌ 无 | ✅ 支持 |
8.3 按使用场景选型
| 场景 | 推荐方案 | 关键理由 |
|---|---|---|
| MCU 平台、小容量日志存储 | SD NAND(SLC) | 驱动简单、成本低、擦写寿命长 |
| 高频循环写入(日志/数据采集) | SD NAND(SLC/pSLC) | P/E 5~10 万次,远高于 TLC eMMC |
| Linux/Android 系统盘 | eMMC | Boot 分区、高带宽、完整 FTL |
| 安全启动 / 加密设备 | eMMC | RPMB 安全分区是刚需 |
| 工业/车载高可靠场景 | eMMC(工业级 SLC) | SPL+RST+Auto Refresh 全套保护 |
| 成本极度敏感的 IoT 产品 | SD NAND | 物料+PCB+SMT 全链路成本低 |
| 大容量媒体存储 | eMMC | ≥64GB 时单 GB 成本更优 |
8.4 最终决策树
是否需要安全启动/RPMB/密钥存储? ├── 是 → eMMC(唯一选择) └── 否 → 容量是否 ≥64GB? ├── 是 → eMMC(单GB成本更优) └── 否 → 是否高频循环写入? ├── 是 → SD NAND(SLC/pSLC,寿命优势) └── 否 → 是否成本极度敏感? ├── 是 → SD NAND └── 否 → 视性能/可靠性需求而定附录:术语对照表
| 术语 | 全称 | 说明 |
|---|---|---|
| eMMC | embedded MultiMediaCard | 嵌入式多媒体卡,BGA 封装的 MMC 存储 |
| SDMMC | SD / MMC Host Controller | SoC 上的 SD/MMC 二合一主机控制器 |
| MicroSD / TF | Micro Secure Digital / TransFlash | 可插拔微型 SD 存储卡 |
| SD NAND | —— | 贴片式 SD 协议 NAND 存储,去掉外壳的 TF 卡 |
| RPMB | Replay Protected Memory Block | 防重放保护存储块,eMMC 安全分区 |
| SPL | Sudden Power Loss | 突然掉电保护机制 |
| PON | Power Off Notification | 断电通知命令,JEDEC 标准 |
| FTL | Flash Translation Layer | 闪存转换层,LBA 到物理地址映射 |
| WL | Wear Leveling | 磨损均衡 |
| ECC | Error Correction Code | 纠错码 |
| GC | Garbage Collection | 垃圾回收 |
| CMDQ | Command Queue | 命令队列 |
| TEE | Trusted Execution Environment | 可信执行环境 |
| OTP | One-Time Programmable | 一次性可编程存储区 |
| UECC | Uncorrectable ECC | 不可纠正 ECC 错误 |
| HMAC | Hash-based Message Authentication Code | 基于哈希的消息认证码 |
| P/E | Program/Erase | 编程/擦除次数,NAND 寿命指标 |
| SLC | Single-Level Cell | 单阶存储单元,1bit/cell |
| MLC | Multi-Level Cell | 多阶存储单元,2bit/cell |
| TLC | Triple-Level Cell | 三阶存储单元,3bit/cell |
| pSLC | pseudo SLC | 伪 SLC 模式,用 TLC 颗粒模拟 SLC |