2. 存储介质基础
嵌入式系统的分区设计,本质上是在“介质特性”这张底图上做规划。同一套分区表,放在 NOR Flash 上可以 XIP 直接执行,放在 NAND Flash 上就必须先拷贝到 RAM;放在 eMMC 上可以按块随意读写,放在裸 NAND 上却要先擦除再写、还要处理坏块。因此,理解各类存储介质的物理结构、访问方式与寿命特性,是分区设计的第一块基石。
一、核心原理:从“能不能随机写”到“能不能原地执行”
嵌入式存储介质可以按三个维度快速定位:是否支持字节级随机访问、是否支持原地执行(XIP)、是否有内置控制器管理坏块与磨损。NOR Flash 的存储单元并联接入,支持字节寻址,读速度快、可 XIP,但写入前必须擦除整个扇区,容量小、成本高;NAND Flash 的存储单元串联,按页读写、按块擦除,容量大、单位成本低,但存在坏块、需要 ECC 与磨损均衡;eMMC 与 UFS 则在 NAND 裸片之外封装了控制器,对外呈现标准块设备接口,屏蔽了擦除、坏块、ECC 等细节;SD 卡与 eMMC 同源,但可插拔、协议更简单;EEPROM 则是字节可擦写、寿命长但容量极小,适合保存少量配置参数。
二、方法流程:介质选型的四步判断法
面对一个具体项目,可以按以下顺序收敛介质选择:
- 确定启动方式:SoC 是否支持从该介质直接启动?是否要求 XIP?若要求 XIP,NOR Flash 几乎是唯一选择。
- 估算容量与寿命:系统镜像、文件系统、日志、参数各占多少?日均写入量多大?据此计算擦写次数是否在介质寿命内。
- 确认接口与协议:SPI、并行 NOR、ONFI、eMMC 5.1、UFS 3.1、SD 3.0,接口决定了驱动复杂度与吞吐上限。
- 评估成本与供货:单位 GB 成本、封装尺寸、工业级温度范围、长期供货承诺。
关键参数速查:NOR Flash 擦除块通常 4KB~64KB,擦写寿命约 10 万次;NAND Flash 擦除块 128KB~数 MB,SLC 约 10 万次、MLC 约 3 千次、TLC 约 1 千次;eMMC 内部已做磨损均衡,对外按 512B 扇区访问;EEPROM 擦写寿命可达 100 万次以上,但容量通常仅 KB 级。
三、案例场景:三种典型产品的介质组合
场景一:工业控制器。要求上电 200ms 内启动并执行控制逻辑,选用 16MB SPI NOR Flash 存放 Bootloader 与 RTOS 镜像,实现 XIP;另挂一片 2Kb EEPROM 保存校准参数与设备序列号,避免频繁擦写 Flash。
场景二:智能音箱。需要存放 Linux 系统、语音模型与用户数据,容量需求 8GB 以上,选用 eMMC 5.1。分区上划分 boot、rootfs、userdata、log 四个区,其中 log 区单独挂载并限制写入频率,防止日志写爆整片寿命。
场景三:车载记录仪。需要持续写入高清视频流,对顺序写吞吐和寿命要求高,选用 UFS 2.1 或高耐久 eMMC,并配合循环覆盖策略。若采用裸 NAND,则必须在驱动层实现坏块管理与 ECC,分区时还要预留坏块替换区。
# 典型 eMMC 分区规划示例(GPT)
mmcblk0p1 boot 16MB raw # Bootloader
mmcblk0p2 env 4MB raw # 环境变量
mmcblk0p3 rootfs 2GB ext4 # 只读根文件系统
mmcblk0p4 userdata 4GB ext4 # 可读写用户数据
mmcblk0p5 log 512MB f2fs # 日志,限制写入
四、误区与复盘
误区一:把 NAND 当 NOR 用。直接在裸 NAND 上按字节写配置,忽略“先擦后写”和坏块,导致数据静默损坏。正确做法是使用带 MTD 与 UBI 的文件系统,或改用 eMMC。
误区二:忽视 eMMC 的寿命管理。eMMC 虽有控制器,但若日志区不做写入合并与限流,仍会提前耗尽寿命。建议日志使用 f2fs 或带磨损均衡的只读+追加模式。
误区三:SD 卡用于工业长期运行。消费级 SD 卡在高温与频繁写入下失效率高,工业场景应选工业级 SD 或直接板载 eMMC。
| 介质 | 访问方式 | 典型容量 | 擦写寿命 | XIP | 典型用途 |
|---|---|---|---|---|---|
| NOR Flash | 字节随机读,扇区擦写 | 1MB~256MB | 约 10 万次 | 支持 | Bootloader、RTOS |
| NAND Flash | 页读写,块擦除 | 128MB~数 GB | SLC 10 万 / TLC 1 千 | 不支持 | 大容量数据、文件系统 |
| eMMC | 块设备,512B 扇区 | 4GB~128GB | 控制器管理 | 不支持 | Linux 系统、用户数据 |
| UFS | 高速串行块设备 | 32GB~512GB | 控制器管理 | 不支持 | 车载、高端移动设备 |
| SD 卡 | 块设备,可插拔 | 1GB~1TB | 控制器管理 | 不支持 | 可移动存储、数据导出 |
| EEPROM | 字节随机读写 | 1Kb~1Mb | 约 100 万次 | 支持 | 参数、序列号、校准值 |
复盘来看,介质选型不是“越新越好”,而是“匹配启动方式、容量需求、写入寿命与成本约束”。分区设计者应在项目早期就把介质特性写入设计约束文档,明确哪些分区可写、哪些只读、哪些需要磨损均衡,这样才能在后续分区表落地时避免返工。