eMMC Boot 分区配置错误 · 量产排查
编制日期 2026-09-21 | 版本号 Rev 1.0
XTX 芯天下 · FAE 现场技术文档 | eMMC Boot1/Boot2/RPMB/UDA 多分区架构下的量产不开机 / 启动异常排查 | 2026-09 版
eMMC EXT_CSD 各字段含义、HS200/HS400 时序参数以具体厂商 / 容量版本 datasheet(建议 JEDEC eMMC 5.0 / 5.1 / 7.x 规范交叉核对)为准;本文仅展示识别与应对机制。
- EXT_CSD 是 256 字节的寄存器而非内存:操作前必须先
read再write,切忌盲写覆盖厂商保留位。 - RPMB key 一旦烧错,整盘永久不可恢复:写 key 前必须预先备份 key,并确认与主控期望一致。
- Boot 分区操作不会改 UDA,但 UDA 操作不当会破坏 Boot 分区:擦除 / 改写 UDA 前要确认未波及 Boot 区。
- 各厂商(Samsung / SK Hynix / Micron / Kioxia / Phison / Kingston)对 EXT_CSD 实现存在差异:以具体器件 datasheet 为准。
- 这是 eMMC 专属问题,不发生在 SPI NOR / SPI NAND / SD NAND。
一句话结论:eMMC 量产不开机 / 启动到一半,根因几乎都在多分区架构下的 Boot 配置错位—— Boot 分区默认大小 = 0、PARTITION_CONFIG 切换 / 使能位 / 总线宽度 / RPMB key / HS200-HS400 协商 / EXT_CSD 版本任一不对,主控就读不到或读错 bootloader。 排查按「架构 → 4 大分区 → EXT_CSD 字段 → 6 类错位 → 速查 → 防复发」逐层定位。
这份文档解决什么
解决的是 eMMC 因 Boot 分区配置错误导致量产不开机或启动到一半这一类问题的定位与根治方法。覆盖 eMMC 4 大物理分区架构、EXT_CSD 关键字段、6 类 Boot 配置错误的机制与处置、HS200/HS400 协商、RPMB key 顺序、烧录器版本兼容、速查表与防复发 SOP。全文按「机制 → 字段 → 分类 → 速查 → 防复发 → 附录」组织,第 10 章是可直接翻查的速查表,第 12 章是可落地的核查清单。
1. 问题本质:eMMC 分区体系的 6 种典型报错
eMMC 区别于 SPI NOR / SPI NAND / SD NAND 的核心,是它内部被器件控制器划分为多个独立可寻址物理分区,且每个分区有独立的写保护、使能位与大小配置。烧录时这些配置任一出错,就会表现为「烧了却不开机 / 启动到一半」。
来源:按量产症状归类,具体报错码以器件 datasheet 与主控返回状态为准
6 类报错与对应章节
| 序号 | 典型报错 | 根因 | 对应章节 |
|---|---|---|---|
| 1 | BOOT_SIZE_MULT 越界 | Boot 分区大小超 1..255 或步长非 128KB 对齐 | 第 4 章 |
| 2 | PARTITION_CONFIG 拒绝 | 切分区位非法,或写后未切回 User Area | 第 5 章 |
| 3 | RPMB 鉴权失败 | key 未装 / 装错 / MAC 校验不过 | 第 7 章 |
| 4 | HS200 协商失败 | 时序 / tuning 不过,降档才认 | 第 8 章 |
| 5 | Boot Mode 启动失败 | acknowledge / bus width 错,复位不进 Boot Mode | 第 6 章 |
| 6 | 扩展 EXT_CSD 拒绝 | 烧录器版本旧,字段不存在被拒 | 第 9 章 |
SPI NOR / SPI NAND / SD NAND 通常只有一块用户存储区,烧录器把镜像写到固定偏移即可;eMMC 有 Boot1、Boot2、RPMB、UDA 等逻辑分区,且各分区有独立的写保护、使能位与大小配置。烧录器若在「裸片视角」烧 Boot 分区,而主控按「启动配置位」去读,两者错位就会不开机。这是 eMMC 专属问题。
2. eMMC 4 大物理分区总览
eMMC 上电后由内部控制器把 NAND 阵列划分为 4 大独立寻址的物理分区:Boot1、Boot2、RPMB、UDA(User Data Area)。四者地址空间互不重叠、各自带写保护 / 使能位,烧录器必须按物理分区分别寻址。
来源:地址为示意,具体偏移与容量以器件 datasheet 为准
| 分区 | 用途 | 关键特性(以 datasheet 为准) |
|---|---|---|
| Boot1 | 启动分区,上电由主控拉 RST_n 触发启动 | 默认大小 = 0(BOOT_SIZE_MULT=0);可扩至 1/2/4 MB;支持写保护 |
| Boot2 | 启动分区备份,冗余启动 | 与 Boot1 同规格;可配置为双 Boot 或备份 |
| RPMB | replay-protected 安全区,存 key / 安全计数器 | key 一次性写入(OTP);无 key 访问受限;必须先装 key |
| UDA | User Data Area,主存储(内核 / 文件系统 / 用户数据) | 可切出 GPP;承载系统主体;容量最大 |
Boot 分区(Boot1/Boot2/RPMB)的读写不会改动 UDA;但反过来,对 UDA 的擦除 / 改写 / 坏块管理若配置不当,可能波及 Boot 分区,导致原本正常的 Boot 被清掉。量产擦除 UDA 前,务必确认烧录器只针对 UDA 命名空间操作,且 Boot 分区写保护已正确设置。
3. EXT_CSD 关键字段速查表
EXT_CSD 是 eMMC 内部一块 256 字节的寄存器(不是内存),存放所有分区与模式配置。烧录 / 启动相关的绝大多数错位都能在这里找到对应字段。操作前必须先 read 再 write,切勿整块盲写覆盖厂商保留位。
来源:字节地址与字段语义以具体器件 datasheet / JEDEC eMMC 规范为准
| 字节地址 | 字段 | 含义(以 datasheet 为准) | 烧录关注点 |
|---|---|---|---|
| 162 | ERASE_GROUP_DEF | 擦除单位选择:512B 或整擦除组 | 擦除 UDA 前确认单位,避免误擦 Boot 区 |
| 177 | BOOT_BUS_WIDTH | Boot 模式总线宽度 / acknowledge / 复位后总线条件 | 与主控期望的 boot 总线宽度对齐 |
| 178 | BOOT_CONFIG | Boot 配置保护位 | 受写保护时改 Boot 配置会被拒 |
| 179 | PARTITION_CONFIG | 启动分区使能位 + 当前访问分区选择 | 切 Boot/UDA/RPMB 的核心寄存器 |
| 183 | BUS_WIDTH | 普通模式(非 Boot)总线宽度 | HS 模式下的 1/4/8-bit 设置 |
| 185 | HS_TIMING | 速率模式选择:legacy / HS200 / HS400 | 切 HS200/HS400 必须配,旧烧录器可能无此字段 |
| 226 | BOOT_SIZE_MULT | Boot 分区大小 = MULT × 128KB,N=1..255 | 默认 0 = 禁用,启动前必须扩展 |
EXT_CSD 是寄存器而非内存:写某字段用 CMD6 按 索引 + 值 改单个字节,CMD6 切分区 / 改时序会返回 R1b(带 busy),必须等 busy 结束。不要整块覆盖式写入,否则会破坏厂商预留的校准 / 坏块管理信息。
4. 第 1 类:BOOT_SIZE_MULT 配置错
Boot 分区大小由 EXT_CSD[226] BOOT_SIZE_MULT 决定,公式为 Boot 分区大小 = BOOT_SIZE_MULT × 128KB,步长 128KB,有效范围 N = 1..255。出厂默认 BOOT_SIZE_MULT = 0,即 Boot 分区大小 = 0,分区不使能。
来源:数值与步长以器件 datasheet 为准,示例取常见 1/2/4 MB
BOOT_SIZE_MULT 默认 = 0,Boot 分区大小 = 0。如果烧录器 / 工程只在 Boot 分区写镜像,却没先把 BOOT_SIZE_MULT 扩到与目标匹配的大小(常见 1MB / 2MB / 4MB),主控启动时该分区为空或过小,直接表现为完全不开机或卡在 bootloader。数值以 datasheet 为准。
典型错位与表现
| 配置 | 现象 | 机理(以 datasheet 为准) |
|---|---|---|
| MULT = 0 | 完全不开机,串口无输出 | Boot 分区不使能,主控读不到 bootloader |
| MULT 偏小 | 卡在 bootloader / 校验失败 | 镜像被截断,只写进部分 Boot 分区 |
| MULT 偏大 | 启动正常但浪费空间 | 大小超过主控预期,一般不致命但需对齐 |
| 非 128KB 对齐 | 配置被器件拒绝 / 取整 | 写值未按 128KB 步长,实际生效值与预期不符 |
| N > 255 | 写被拒绝 / 回读异常 | 超出 1..255 合法范围 |
立即动作
- 用
CMD8+CMD6先 read EXT_CSD[226] 确认 BOOT_SIZE_MULT 实际值;若 = 0 即为根因。 - 将 BOOT_SIZE_MULT 设为目标值(如 2MB 对应 MULT=16),
CMD6写后等待 R1b busy 结束。 - 重新烧录 Boot 镜像并读回校验;首件装板确认能进 bootloader。