只读分享解决方案文档调试&解决方案📅 2026-09-21🔖 Rev 1.0⏳ 29天有效(至 2026-10-31)
🔧解决方案&应用市场分析 -> 调试&解决方案 -> 存储_量产问题排查 -> 瑞芯微平台_SPI_NAND_eMMC_量产排查

瑞芯微平台_SPI_NAND_eMMC_量产排查

生成时间 2026-09-28 13:34:55 有效期至 2026-10-31 23:59:59(29天有效(至 2026-10-31))
同系列 · 调试&解决方案

瑞芯微平台 · SPI NAND / eMMC 量产排查

编制日期 2026-09-21 | 版本号 Rev 1.0

XTX 芯天下 · FAE 现场技术文档 | 瑞芯微(Rockchip)系列 SoC 外挂 SPI NAND 与 eMMC 的烧录与启动失败定位 (RK3308 / RK3328 / PX30 / RK3566 / RK3568 / RV1126 / RV1109 / RK3399 等)| 2026-09 版

技术事实核查纪律(执行前必读)

eMMC 命令码、EXT_CSD 字段位、寄存器位、Loader 签名算法以 JEDEC eMMC 规范、瑞芯微具体 SDK 文档与 SoC 用户手册为准;本文仅展示排查机制。

  • 本文讨论的是瑞芯微主控侧外挂存储的启动 / 烧录失败,与「烧录器找不到型号」是两件事。判别要点:烧录器能正常建工程、能烧、能校验通过,但板子起不来,就是本文范围;烧录器根本选不到型号,请查《烧录找不到型号》系列文档。
  • 命令码(CMD0 / CMD1 / CMD2 / CMD3 / CMD7 / CMD8、CMD6 切换 EXT_CSD 等)是 SD/MMC 协议常见写法,并非所有平台与所有器件都一致,动手前逐条核对规范与手册。
  • EXT_CSD 的字节偏移、字段位、合法取值、Boot 分区机制、RPMB 鉴权流程全部以 JEDEC JESD84 与平台 TRM 为准,本文只回答「要查哪一类、去哪里查」。
  • 涉及RPMB 鉴权写入、Boot 分区使能、安全擦除的操作在多数平台上不可逆或风险极高,见第 8 章与 RPMB 专篇的危险操作提示。
8 类
量产失败的八类根因
烧录入口 · 工程配置 · eMMC 专项 · SPI NAND ID · 签名 · 分区 · RPMB
4 段
启动链路必过的阶段
MaskROM → Loader → U-Boot → Kernel,按段收敛
XT128A
XTX 在册 eMMC 料号系列
料号与配置以 XTX 数据手册与平台 SDK 为准
Rockusb
MaskROM 下载模式入口
连不上下载模式,故障在更上游
装板实跑
唯一有效的验收动作
烧录器校验通过不能替代主控侧启动成功

一句话结论:瑞芯微平台上「烧录绿勾但起不来 / 卡在 MaskROM / 报分区或签名错」, 本质是八类根因之一:要么烧录进不去(MaskROM / 下载模式 / 签名)、 要么工程配置对不上(parameter / GPT / 分区)、要么器件状态异常 (eMMC Boot 分区 / EXT_CSD / RPMB / SPI NAND ID)。 烧录器能烧、能校验通过只证明器件是好的、数据是对的, 不证明主控的启动链路能把它认起来——这两者之间隔着整整八类根因。

这份文档解决什么

解决的是瑞芯微 SoC 外挂 SPI NAND 或 eMMC 后,烧录通过但启动失败、卡在 MaskROM、" 报分区 / 签名 / 识别类错误这一类问题的定位与根治方法。全文按 「现象 → 启动链路机制 → 类目 → 立即动作 → 根治动作」组织, 第 9 章是可直接翻查的速查表,第 11 章是可带进车间的核查清单与 FAE 结案栏。

第 1 类
MaskROM 下 Loader 加载失败
下载模式连不上、idbloader 下不进去。故障在启动最上游,常表现为串口一行不出或卡在 Rockusb 握手。高发动作:换线、改供电、重装驱动前没确认下载模式本身是否通。
高发动作:在下载模式之前先怀疑供电与线序
第 2 类
parameter 文件版本错误
parameter.txt 的容量 / 分区与镜像不匹配,Loader 解析即报错或分区错位。高发于换料号、换容量、升级 SDK 后沿用旧工程。
高发动作:沿用旧 parameter 不改容量字段
第 3 类
eMMC Boot 分区烧写错位
BOOT0 / BOOT1 写到了 USER 区,或镜像偏移与分区块对不上,板子起不来但器件本身正常。高发动作:手工指定烧录地址时填错块。
高发动作:手工填偏移地址时块号算错
第 4 类
EXT_CSD 状态被错误修改
HS_TIMING / BUS_WIDTH 等字段被错误配置,总线速率或位宽协商失败,识别到却跑不起来。高发动作:照抄别家平台的 EXT_CSD 配置。
高发动作:照抄别平台的 EXT_CSD 写入脚本
第 5 类
SPI NAND ID 未收录
读回 ID 但 U-Boot / 内核驱动表里没有这一项,报 unknown id。器件正常、烧录器能烧。高发动作:换了料号没同步改驱动表。
高发动作:换料号忘了改驱动 ID 表
第 6 类
Loader 签名与固件不匹配
签名校验失败导致 Loader / 固件被拒绝加载。密钥、哈希、版本任一错位都会触发。高发动作:只更新了一侧镜像。
高发动作:只更新固件没同步更新签名
第 7 类
GPT 表损坏 / 备份头位置错
主 GPT 或备份 GPT 越界或写坏,U-Boot 找不到正确分区表,挂载失败。高发动作:磁盘镜像整体 dd 时尺寸不对。
高发动作:整盘镜像大小与介质不匹配
第 8 类
RPMB 写入失败或被锁
RPMB 鉴权 / 写失败,或被安全策略锁死;与 RPMB 专篇交叉。高发动作:量产没按 RPMB 写流程做鉴权。
高发动作:跳过 RPMB 鉴权直接写

怎么用这份文档

  1. 先分是烧录进不去还是启动起不来:看串口——连下载模式(Rockusb)都进不去,先查第 1 类;" 能进下载模式但烧完起不来,按第 2~8 类顺位查。
  2. 抓一份「已知好板」基线:把能正常启动那块板的完整启动日志、parameter.txt、GPT 导出、" EXT_CSD 读值、驱动 ID 表各存一份,后面所有对比都拿它当基准。
  3. 用启动链四段收敛:MaskROM(下载模式)→ Loader → U-Boot(parameter/GPT)→ Kernel," 故障落在哪一段就翻对应类目,不要跳段。
  4. 一次只改一个变量:parameter、GPT、EXT_CSD、驱动 ID 表、签名密钥每次只动一处," 改完重新烧录抓日志。
  5. 用装板实跑闭环:任何改动的最终判定,以「装板跑通完整启动 + 关键功能 + 一次断电重启」为准。

1. 问题本质:瑞芯微启动链路与 MaskROM/Loader 机制

「瑞芯微板子起不来」这句话在现场被用得太泛。它可能下不进 Loader、可能 parameter 报错、 可能 Boot 分区写错、也可能 RPMB 拒写。本章先把现象还原成启动链路: 讲清瑞芯微上电后谁在控制存储、认出器件要满足哪些条件,然后把本文的排查对象与 「烧录器找不到型号」严格切开——这两件事在产线上被混淆的概率极高。

1.1 八类失败沿启动链路定位

现场接到「板子起不来、卡在下载模式、报分区或签名错」,第一件事是按图 1 把问题归到八类之一, 确定断在启动链的哪一段,不要一上来就换料号或重烧。八类对应的是同一条启动链在不同环节断掉的八种暴露方式, 归档的价值在于它直接决定从 s3 到 s8 先翻哪一章。

瑞芯微平台外挂 SPI NAND / eMMC 量产失败的八类根因(按启动链路顺位)① MaskROMRockusb 下载模式采样 boot 引脚 / 选介质② idbloaderLoader / miniloader初始化 DRAM / 加载 U-Boot③ U-Boot读取 parameter / GPT加载内核与 dtb④ KernelLinux / Android挂载根文件系统八类失败分布在 ①~④ 之间;下图按「先动哪一类」排序,编号与正文 s3~s8 对应类目 1 · MaskROM 下 Loader 加载失败下载模式连不上、idbloader 下不进去USB 握手 / 供电 / 线序 / 驱动最早期 · 烧录入口类目 2 · parameter 文件版本错误容量 / 分区与镜像不匹配Loader 解析 parameter 即报错工程配置 · U-Boot 前类目 3 · eMMC Boot 分区烧写错位BOOT0 / BOOT1 写到了 USER 区镜像偏移与分区块对不上eMMC 烧录 · ②类目 4 · EXT_CSD 被错误修改HS_TIMING / BUS_WIDTH 错配总线速率 / 位宽协商失败eMMC 配置 · ③类目 5 · SPI NAND ID 未收录读回 ID 但驱动表无此项U-Boot / 内核报 unknown id识别 · ②③类目 6 · Loader 签名与固件不匹配签名校验失败,拒绝加载密钥 / 哈希 / 版本错位签名 · ②类目 7 · GPT 表损坏 / 备份头位置错主 GPT 或备份 GPT 越界U-Boot 找不到正确分区分区 · ③类目 8 · RPMB 写入失败或被锁RPMB 鉴权 / 写失败与 RPMB 专篇交叉安全区 · ④定位逻辑:先确认烧录器能否正常烧写(排除器件本体),再沿启动链按 ①②③④ 顺序收敛到具体类目。
图 1 · 瑞芯微外挂存储量产失败的八类根因 · 沿启动链路定位
归档时的两个提醒

提醒一:先确认「烧录进得去」还是「启动起不来」。串口若连 Rockusb 下载模式的提示都看不到, 优先第 1 类(下载模式 / 供电 / 线序);若下载模式正常、烧录绿勾,但烧完不能启动,再顺位查第 2~8 类。

提醒二:同一块板可能同时命中多个类目。例如 boot 引脚配错会先让 MaskROM 选错介质, 随后 U-Boot 解析 parameter 也跟着错。类目定的是先查哪一章,不是只查哪一章。

1.2 与「烧录器找不到型号」的分工

这是本文档最重要的一张表。产线上这两件事经常被当成同一件事处理: 「型号不对,让原厂支持一下」。但它们的发生位置、判定主体、根因集合、解决路径完全不同。 判别方法只有一句话:烧录器能不能正常把活干完。

维度主控侧 / 启动链路问题(本文)烧录器找不到型号(另册)
谁在读SoC 的 MaskROM / Loader / U-Boot / Kernel编程器的算法库与器件支持列表
发生时机板子上电、烧录后启动、U-Boot 解析阶段烧录工装建工程、选型号时
典型现象卡 Rockusb、Loader 失败、parameter 报错、unknown id、分区挂载失败烧录软件报「未找到型号」「不支持该 ID」
判别要点烧录器能正常烧录并校验通过烧录器建不了工程
根因集合下载模式、parameter、Boot 分区、EXT_CSD、ID 表、签名、GPT、RPMB算法库版本、器件支持列表、料号选型
解决方向改工程 / 改 EXT_CSD / 补 ID 表 / 改签名 / 修 GPT升级算法库、申请新型号支持、核对选型
负责方瑞芯微平台方 + 器件原厂 FAE 一起定位编程器厂商 + 器件原厂 FAE
一句话判别

烧录器能烧、能校验通过,板子起不来 → 主控侧 / 启动链路问题,看本文。
烧录器建不了工程、选不到型号 → 烧录器侧问题,看《烧录找不到型号》系列。

两者唯一的交叉点:当烧录工具与启动镜像共用同一份「ID → 参数」映射(例如同一 SDK 的器件表被两边引用), 改一侧要连带确认另一侧。

1.3 瑞芯微启动链:MaskROM → Loader → U-Boot → Kernel

瑞芯微 SoC 上电后,真正控制外部存储的实体随时间切换:最早是芯片内部掩膜的 MaskROM(也叫 BootROM),它采样 boot 引脚、按固定顺序尝试各启动介质,并负责把 Loader(idbloader / miniloader)从介质搬进内部 SRAM / DRAM;Loader 初始化内存后加载 U-Boot;U-Boot 解析 parameter.txt 与 GPT 定位分区、加载内核与设备树; 最终进入 Kernel。理解「每一段谁在控制存储」,是定位八类失败的前提。

瑞芯微启动链路:MaskROM → Loader → U-Boot → Kernel(阶段编号与顺序以具体平台手册为准)① MaskROM(Rockusb)↓ 向下传递控制权采样 boot 引脚,按固定顺序尝试 eMMC / SPI NAND / SD;都失败则进 USB 下载模式(Rockusb)。易错:boot 引脚配错 → 介质选错易错:下载模式连不上 → 类目 1② idbloader / Loader↓ 向下传递控制权先跑 miniloader 初始化 DRAM,再加载完整 idbloader;随后加载 U-Boot。易错:Loader 加载失败 → 类目 1易错:parameter 版本错 → 类目 2③ U-Boot↓ 向下传递控制权解析 parameter.txt / GPT,定位各分区,加载内核与设备树 dtb。易错:GPT 损坏 / 备份头错 → 类目 7易错:Boot 分区错位 → 类目 3④ Kernel(Linux / Android)↓ 向下传递控制权挂载根文件系统,初始化存储控制器;SPI NAND 走 MTD / UBI,eMMC 走 MMC 子系统。易错:EXT_CSD 错配 → 类目 4易错:RPMB 失败 → 类目 8关键认知:MaskROM 阶段烧不进 Loader,后面一切免谈;U-Boot 之前的根因基本都属于「烧录 / 工程配置」,进 kernel 之后才轮到驱动与器件状态。下载模式(Rockusb)是诊断的「逃生舱」:连不上下载模式,说明故障已在更上游(供电 / 线序 / 引脚)。
图 2 · 瑞芯微启动链路:MaskROM → Loader → U-Boot → Kernel 与易错点
一句话机制

把「瑞芯微起不来」拆成三个可证伪的命题,逐个排除: ① 烧录进得去吗(第 1 类:下载模式 / Loader 加载)、 ② 工程配置对得上吗(第 2、3、4、7 类:parameter / Boot 分区 / EXT_CSD / GPT)、 ③ 器件被认起来了吗(第 5、6、8 类:SPI NAND ID / 签名 / RPMB)。 任何一例现场问题,都必须先回答这三个问题再动手。

2. 方案总览:SPI NAND 与 eMMC 排查流程

瑞芯微平台上 SPI NAND 与 eMMC 虽然都是「外挂存储」,但排查套路并不完全相同: eMMC 是一条标准 SD/MMC 命令链 + 分区 / Boot 区 / EXT_CSD 的配置世界, SPI NAND 则是「ID 识别 + MTD/UBI + 坏块 / ECC / OOB」的另一套逻辑。 本章先给一张四关收敛图把八类失败框住,再给两张对照表 (介质差异、烧录 / 调试工具),后面六章的所有动作都在某一关内做细分。

2.1 四关收敛:先定关,再翻章

拿到一块起不来的板,不要从第一章顺着读下去,而是先用四关收敛把范围砍小。 每一关只回答一个是非题,判据来源也不同:第一关靠烧录器、第二关靠下载模式握手与 Loader 日志、 第三关靠 U-Boot 报错、第四关靠内核挂载日志。

排查收敛四关:从烧录入口到内核挂载,每过一关砍掉一批类目① 烧录器能烧且校验通过?否 → 不在本文,见烧录找不到型号另册是 → 进入下一关② 下载模式能进 / Loader 能加载?否 → 类目 1(供电 / 线序 / 引脚)签名错 → 类目 6(Loader 拒加载)是 → 进入下一关③ U-Boot 解析 parameter / GPT 正常?否 → 类目 2(parameter)/ 类目 7(GPT)是 → 进入下一关④ Kernel 挂载存储正常?SPI NAND 异常 → 类目 5(ID / 坏块)eMMC 异常 → 类目 3 / 4 / 8是 → 启动成功归类提示:类目 6(签名不匹配)与类目 1 一样落在第 ② 关——Loader 加载阶段;类目 3 / 4 / 8(Boot 分区 / EXT_CSD / RPMB)与类目 5(SPI NAND ID)都落在第 ④ 关之后;类目 2 / 7(parameter / GPT)落在第 ③ 关。先定关,再翻对应章节。用法:把板子接到串口,从上电第一条打印开始抓,然后顺着 ①②③④ 逐关回答「是 / 否」,第一关答「否」就把范围砍到 1~2 个类目。不要一上来就逐章读——先定关。四关都过而系统仍起不来,问题已在本文八类之外,转对应专项文档。各阶段判定依据(下载模式握手、Loader 加载日志、U-Boot 报错、内核挂载日志)以具体平台 SDK 为准。
图 3 · 排查收敛四关:自烧录入口向内核挂载逐关砍类目
最容易漏掉的归并

类目 6(签名不匹配)与类目 1(Loader 加载失败)同属第 ② 关。 签名校验失败的表现就是 Loader 加载不下去,日志可能只报「load loader failed」而不明说签名。 如果第 ② 关答「否」,要同时怀疑这两类,而不是只查供电线序。

2.2 SPI NAND 与 eMMC 的差异对照

「存储」这个词在两类介质上指的不是同一个东西。SPI NAND 的「识别」是一次 SPI 读 ID + 参数页, 坏了靠坏块表与 ECC;eMMC 的「识别」是一整套 CMD 交互 + EXT_CSD,坏了靠 Boot 分区与分区表。 因此「烧错」「认不出」「挂不上」在两类介质上的实现与处置完全不同,不要互相套用。

维度SPI NANDeMMC
识别方式SPI 读 ID(9Fh 等)+ 参数页 / 内部表SD/MMC CMD 序列 + CID / CSD / EXT_CSD
关键配置坏块表、ECC 能力、OOB 布局、页 / 块大小Boot 分区、EXT_CSD、总线位宽、速率模式
分区概念无硬件分区,靠文件系统 / 逻辑卷管理BOOT0 / BOOT1 / USER 硬件分区 + GPT
烧录入口SPI 接口,经 Loader 初始化后写MMC 控制器,经 Loader 初始化后写
高发失败ID 未收录、坏块、ECC 不可纠、OOB 错配Boot 分区错位、EXT_CSD 错配、GPT 损坏、RPMB 锁
调试命令sf probe / mtd / ubinfo / nand 类mmc dev / mmc extcsd read / mmc part
代表料号XTX SPI NAND 系列(以数据手册为准)XT128A 等 XTX eMMC 系列(以数据手册为准)

2.3 烧录与调试工具

瑞芯微生态下的工具链相对固定,定位时它们各管一段。注意 upgrade_tool 与 AndroidTool 是不同代的工具, 老平台多用 upgrade_tool,新平台(RK356x / RV1126 等)多用 AndroidTool / RKDevInfo; rkImageMaker 负责把镜像拼成可烧写的整体包。工具版本与平台要对应,否则会假绿。

工具用途对应阶段备注
upgrade_tool命令行烧录 / 进入 Rockusb 下载模式MaskROM → Loader老平台常用,命令以所用版本为准
AndroidTool图形化烧录与分区管理MaskROM → Loader → U-BootRK356x / RV1126 等新平台常用
RKDevInfo / rkdevinfo读取设备信息与分区状态Loader → U-Boot用于确认介质与分区是否识别
rkImageMaker拼接 / 拆分可烧写整体镜像镜像打包parameter 与镜像需版本匹配
串口终端抓 Rockusb 握手与启动全过程日志全阶段判定「卡在哪一段」的第一手依据
逻辑分析仪 / 示波器量 boot 引脚、供电、eMMC 信号硬件层下载模式都进不去时必用
基线的最小可用集

如果时间只够抓三样,抓这三个:完整启动日志(含 Rockusb 握手与 Loader 加载)、 parameter.txt 与 GPT 导出、好板同位置的 EXT_CSD / eMMC 寄存器读值。 这三样能覆盖第 2~8 章里绝大部分的对比需求。

3. 第 1 类:MaskROM 下 Loader 加载失败 / parameter 版本错误

这一类发生在启动链最上游,比「不认芯片」更早: 串口可能连 Rockusb 下载模式的提示都看不到,或进了下载模式但 Loader 下不去。 它包含两个容易被混淆的子类——Loader 物理上加载失败 (下载模式 / 供电 / 线序 / 镜像损坏)与工程配置对不上 (parameter 版本错)。前者卡在第 ② 关之前,后者卡在第 ③ 关。

① MaskROM / Rockusb 下载模式:Loader 加载链路(步骤与命令以平台 SDK 为准)PC 端工具upgrade_tool / AndroidToolSoC MaskROM采样 boot 引脚后等待USB(Rockusb)① 枚举 USB 设备设备未出现则上游有问题↓② 加载 USB 驱动驱动缺失则连不上↓③ 发送 Loader损坏则加载失败↓④ 初始化 DRAMminiloader 阶段↓⑤ 跳转执行签名错则拒跳↓第 ①~② 步失败 → 类目 1 上游(驱动 / 线序 / 供电 / boot 引脚);第 ③~⑤ 步失败 → 类目 1(Loader 损坏)或类目 6(签名不匹配)② parameter.txt 版本错误:容量 / 分区与镜像不匹配(字段名以平台为准)parameter.txt(旧 / 错)FIRMWARE_VER: 8.1(旧平台)MACHINE: rk33xxCMDLINE: ...分区: uboot @0x00002000 len 0x00002000分区: rootfs @0x00004000 len 0x00300000实际镜像(新料号 / 新容量)rootfs 实际更大(新容量)分区边界已越过声明长度容量字段未同步更新Loader 解析即报 size mismatch或分区越界写坏相邻区≠后果:Loader 解析 parameter 即报长度不匹配,或分区被写到错误偏移;板子表现成「下载模式能进、Loader 也能下,但启动卡死」。
图 4 · Loader 加载失败与 parameter 版本错误两类机制

3.1 下载模式(Rockusb)都进不去

瑞芯微板子上电后,若所有启动介质都失败,MaskROM 会进入 USB 下载模式等待主机连接。 主机端工具(upgrade_tool / AndroidTool)连不上是最常见的第一道坎。 此时还没到「认不认芯片」,纯粹是「主机到 SoC 的通道」没建立。

  • 驱动 / 线序:USB 驱动未装或装错、用的是充电线而非数据线、USB 口供电不足。
  • 供电:板子 VCC / VCCQ 不稳,MaskROM 自己还没起来。
  • boot 引脚:被强制拉到「不从 USB 启动」的模式,MaskROM 跳过下载模式。
  • eMMC / SPI NAND 总线短路:某条信号线对地短路,MaskROM 初始化时被拖死。
先确认「通道」还是「内容」

工具连不上 → 查通道(驱动 / 线序 / 供电 / 引脚);工具连上了但 Loader 下不去 → 查内容(Loader 镜像 / 签名)。 这两者的处置完全不同,不要一上来就换 Loader 镜像。

3.2 Loader / miniloader 加载失败

通道通了之后,主机把 Loader(idbloader / miniloader) 下载进 SRAM, 由 miniloader 完成 DRAM 初始化,再加载完整 idbloader 并跳转。失败的常见根因:

  • Loader 镜像损坏或版本错:与当前 SDK / 平台不匹配,下载即校验失败。
  • DRAM 初始化失败:miniloader 里的 DDR 参数与板子内存颗粒不匹配,卡在初始化。
  • 签名不匹配(类目 6):开启了安全启动,Loader 哈希 / 密钥不对,拒绝跳转执行。
现象可能根因怎么确认处置
工具连不上下载模式驱动 / 线序 / 供电 / boot 引脚换线、重装驱动、量供电、量 boot 引脚先恢复通道再谈加载
Loader 下载即失败镜像损坏或版本错比对 SDK 版本与平台型号换对应版本的 Loader
卡在 DRAM 初始化DDR 参数与颗粒不匹配看 miniloader 日志 / 用官方参考参数修正 DDR 初始化参数
下载成功但拒跳转签名不匹配(见类目 6)查安全启动开关与密钥对齐签名或关闭安全启动

3.3 parameter.txt 版本错误

Loader 起来后会解析 parameter.txt 拿到分区布局与容量声明, 再据此搬运各分区镜像。换料号、换容量、升级 SDK 后若沿用旧 parameter, 就会出现「声明容量 / 分区与实际镜像不匹配」:Loader 解析即报长度错,或把镜像写到错误偏移。

parameter 易错的三处
  • 容量字段:新料号容量更大却没改,rootfs 分区边界越界。
  • 分区偏移 / 长度:镜像实际尺寸变了,parameter 里的 len 没同步。
  • FIRMWARE_VER / MACHINE:与镜像头里的版本标记不一致,校验阶段被拒。
检查项正确做法怎么确认常见错法
容量字段与介质实际容量一致量实际容量并与 parameter 核对换大容量料号没改容量
分区偏移与镜像实际布局对应导出 GPT / 分区表比对旧偏移套新镜像
分区长度len 不越界、不重叠逐分区算首尾地址rootfs 越界写坏邻区
FIRMWARE_VER与镜像头版本标记一致读镜像头比对沿用旧版本字符串
MACHINE与平台型号一致查平台定义改板后没更新

3.4 立即动作与根治动作

动作类型具体动作验收标准
立即动作换数据线、重装 USB 驱动,确认工具能枚举到设备设备出现在工具设备列表
立即动作对比 Loader 版本与当前 SDK / 平台,重下对应 LoaderLoader 下载并跳转成功
立即动作导出好板的 parameter.txt,与坏板逐字段比对容量 / 分区 / 版本全部一致
立即动作核对 rootfs 实际大小是否超出 parameter 声明长度无越界、无重叠
根治动作把 parameter 纳入版本管理,随 SDK / 料号变更评审每次变更有可追溯记录
根治动作建立「换料号必更新 parameter」的强校验(构建期检查)参数与镜像不匹配时构建报错
根治动作量产工装固定使用「按分区烧写」而非整盘偏移杜绝 Boot 区错位类事故

4. 第 2 类:eMMC Boot 分区烧写错位

eMMC 内部有硬件分区:BOOT0、BOOT1、USER、RPMB。 启动代码必须落在 BOOT0 / BOOT1 区,系统镜像落在 USER 区。 这一类失败的典型特征是下载模式正常、烧录绿勾,但板子启动卡在 MaskROM—— 因为 boot 镜像被错误地写到了 USER 区起点,BOOT 区是空的,SoC 从 Boot 区读不到启动头。 根因几乎都是烧录时用了错误的线性偏移。

eMMC 硬件分区与 Boot 区烧写错位(分区布局以器件手册为准)eMMC 内部BOOT0BOOT1USERRPMB启动代码应落在 BOOT0 / BOOT1;USER 装系统镜像正确:用 Boot 分区专用命令写 BOOT0Loader 通过切换 Boot 分区命令,把 boot 镜像写入 BOOT0 区板子复位后从 BOOT0 正确取到启动头 → 正常启动✓错误:误用 USER 线性偏移写 BOOT0 镜像手工填了 USER 区地址,boot 镜像落到了 USER 区起点BOOT0 区为空 → 板子从 Boot 区读不到启动头表现:下载模式正常、烧录绿勾,但启动卡在 MaskROM✗判别要点:用 rkdevinfo / mmc 工具读 Boot 分区使能与内容,确认 BOOT0 / BOOT1 非空且偏移正确烧录工具选「按分区烧写」而非「整盘线性偏移」,可规避绝大多数错位Boot 分区的使能、大小、写保护以 EXT_CSD 的 PARTITION_CONFIG / BOOT_SIZE_MULT 等字段为准,具体取值见 JEDEC JESD84 与平台 TRM。
图 5 · eMMC 硬件分区与 Boot 区烧写错位

4.1 eMMC 硬件分区与启动区

eMMC 上电后,SoC 通过 EXT_CSD 的 PARTITION_CONFIG 字段决定从哪个分区启动 (BOOT0 / BOOT1 / USER)。Boot 分区有独立的大小(BOOT_SIZE_MULT), 且写入 Boot 区要走专用切换命令,不能当作 USER 区的线性地址直接写。 理解这一点是避免错位的前提。

分区用途烧写方式启动相关
BOOT0第一启动代码(idbloader / U-Boot)Boot 分区专用切换命令是,默认首选
BOOT1备份启动代码Boot 分区专用切换命令是,PARTITION_CONFIG 可切
USER系统镜像 / 根文件系统 / 数据线性地址写可作启动介质(需配置)
RPMB安全存储(密钥 / 计数)鉴权写入,不可随意访问否,但见第 8 章

4.2 错位是怎么发生的

错位几乎都来自「整盘线性偏移」思维:有人拿 USER 区的起始地址当 boot 镜像的烧写地址, 于是 boot 镜像被写到 USER 区开头,而 BOOT0 区始终是空的。 烧录工具显示「烧录成功」,是因为它确实把数据写到了指定地址——只是那个地址不是 Boot 区。

危险操作

不要用「先擦整盘再按固定偏移写」的方式烧 eMMC 启动区。 这种方式极易把 boot 镜像写进 USER 区,且会连带清掉 RPMB 与用户数据。 正确做法是使用烧录工具的「按分区烧写」功能, 让工具自己处理 Boot 区的切换命令与偏移。涉及 RPMB 的清空见第 8 章。

4.3 怎么确认是不是错位

用 rkdevinfo 或 mmc 命令读 Boot 分区使能与内容:

# 进入 U-Boot 或 Loader 命令行后(命令名以所用版本为准)
mmc dev 0                      # 选中 eMMC
mmc partconf 0                # 读 PARTITION_CONFIG,确认启动分区
mmc read ${addr} 0x0 0x10     # 读 USER 区起点,看是否误写了 boot 头
# 用专用命令读取 BOOT0 区并确认非空、且偏移与镜像一致
检查项正确做法怎么确认错位表现
Boot 区使能PARTITION_CONFIG 指向正确 Boot 区读 PARTITION_CONFIG 字段指向 USER 或空 Boot 区
Boot 区非空BOOT0 / BOOT1 写入有效启动头读 Boot 区内容比对Boot 区全 0 / 全 FF
烧写方式使用「按分区烧写」查烧录工具工程配置用了整盘线性偏移
镜像偏移偏移与分区表一致比对 parameter / GPTboot 头出现在 USER 起点
启动顺序Boot 区优先于 USER查平台启动顺序从 USER 读不到启动头

4.4 立即动作与根治动作

动作类型具体动作验收标准
立即动作用 rkdevinfo / mmc 读 PARTITION_CONFIG 与 Boot 区内容确认 Boot 区非空且偏移正确
立即动作改用烧录工具的「按分区烧写」重烧 BOOT0 / BOOT1Boot 区写入有效启动头
立即动作对比好板与坏板的 Boot 区前若干扇区内容一致(除版本差异)
立即动作复位后确认从 Boot 区取到启动头启动不再卡在 MaskROM
根治动作量产工程固定「按分区烧写」,禁用裸偏移脚本工程模板不含线性偏移烧写
根治动作把 Boot 区校验加入首件 SOP(读使能 + 读内容)首件报告含 Boot 区比对
根治动作换料号 / 换容量时复核 Boot 区大小与偏移变更有评审记录