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

全志平台_SPI_NAND_NOR_量产排查

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

全志平台 · SPI NAND / SPI NOR 量产排查

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

XTX 芯天下 · FAE 现场技术文档 | Allwinner 平台外挂 SPI NAND / SPI NOR 量产排查 (BROM → boot0 → U-Boot → kernel)| 2026-09 版

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

寄存器位、boot pins 状态、sys_config.fex 字段、分区偏移以具体平台 SDK 与对应手册为准;本文仅展示排查机制与常见值。

  • 本文讨论的是全志平台外挂 SPI NAND / SPI NOR 的量产启动失败,与「烧录器找不到型号」是两件事:烧录器能绿勾但板子起不来,看本文;烧录器选不到型号,请查《烧录器找不到型号_替代烧录总表》。
  • 命令码(如 SPI NOR 9Fh 读 ID、SPI NAND 9Fh/0x9F、eGON 头、SPL 头)与寄存器位是常见写法,并非所有平台/版本一致,动手前逐条核对 SDK 源码与 datasheet。
  • 涉及签名、烧断 fuse、改写 boot0 的操作在多数平台不可逆或会让板子变砖,见对应章节的危险操作提示,量产务必先在样品上验证。
  • 所有未给出具体数值的参数(分频系数、偏移、容量 ID),一律以具体平台手册与 SDK 源码为准,本文只回答「要查哪一类、去哪里查」。
8 类
量产失败根因归类
介质识别 · FEL · 签名 · 头校验 · 介质切换 · 驱动表 · 分区 · env
4 级
启动链路关卡
BROM → boot0(SPL) → U-Boot → kernel,逐级断点定位
XT25F08B
XTX 常见 SPI NOR 料号
另有 XT25Q08D / XT26G01B 等,ID 以 datasheet 为准
PhoenixSuit
全志烧录 / 量产工具
另含 sunxi-fel / LiveSuit / 全志量产工具
装板实跑
唯一有效的验收动作
烧录绿勾不证明能启动,以上电跑通为准

一句话结论:全志平台 SPI NAND / SPI NOR 量产失败, 99% 发生在启动链路的前两级(BROM 介质识别、boot0/SPL 加载)——而不是烧录器本身。 判别顺序是:先确认 BROM 有没有选对介质、有没有误进 FEL;再看 boot0 镜像头与签名过没过; 最后才是 SPL 的驱动表与分区表。烧录器绿勾只证明「镜像写进去了」,不证明「BROM 认它、boot0 能加载它」。

这份文档解决什么

解决的是全志(Allwinner)系列 SoC 外挂 SPI NAND / SPI NOR 时,量产阶段烧录绿勾却启动失败、 或上电即卡在极早期这一类问题的定位与根治。覆盖 F1C100s / F1C200s / T113 / T113-S3 / R328 / R329 / V851 / V833 / A40i / T507 / H616 等平台,启动链 BROM → boot0(spl) → u-boot → kernel (Linux / Tina / Melis / OpenWrt),烧录工具 PhoenixSuit / LiveSuit / sunxi-fel / 全志量产工具。 全文按「现象 → 机制 → 类目 → 立即动作 → 根治动作」组织,第 9 章是可直接翻查的速查表,第 10 章是防复发清单。

类目 1
BROM 无法识别外挂介质
boot pins 配错、SPI 控制器引脚复用错,BROM 拿着错误的介质设定去读,第一级就走偏。表现为串口一行不出、或反复进 FEL。先查 boot 电阻与 pinmux,再谈驱动。
高发动作:改板后没复核 boot 电阻 / pinctrl
类目 2
FEL 模式被误触发
用户按住了 FEL 键、或 boot0 校验失败回退到 FEL,PC 端被识别成「USB 设备」而非正常启动。常被误判成「芯片坏了」,其实是启动链主动放弃了。
高发动作:把 FEL 当故障,反复换芯片
类目 3·8
boot0 签名失败 / eGON·SPL 头校验错
烧录器签名工具与 u-boot 不匹配、eGON 头部或 SPL 头部 CRC 算错,BROM 直接拒绝加载。镜像能烧进去,但 BROM 不认,日志停在极早期。
高发动作:升级 u-boot 忘了同步签名工具
类目 4
NAND/NOR 介质切换 boot0 未同步
同一板在 SPI NAND 与 SPI NOR 之间切换物料时,只改了 sys_config 没改 boot0 的介质分支,或反之,导致 BROM 读到的头与实际介质不符。
高发动作:换介质只改一处配置
类目 5
SPL 加载 U-Boot 时 ID 未识别
boot0/SPL 阶段的 SPI NOR/NAND 驱动表没有收录新料号,读回 ID 后无表项可命中,或读命令与器件参数不匹配。U-Boot 起不来,卡在 SPL。
高发动作:换料号没同步改 SPL 驱动表
类目 6·7
分区表不一致 / env 未烧入
sys_partition.fex 或 dts 的分区偏移、大小与烧录镜像对不上;env 环境变量未烧入或校验失败,U-Boot 用默认 env 找不到内核。表现为能进 U-Boot 但起不了系统。
高发动作:镜像更新了分区表没跟着改

怎么用这份文档

  1. 先抓完整串口 LOG:从上电第一行到最后一行全量保存,确定卡在 BROM / boot0 / U-Boot / kernel 哪一级。
  2. 按 8 类根因归档:把现象归到第 3~8 章对应类目,不要一上来就换芯片或重烧。
  3. 用 4 级断点法收敛:BROM 介质选择 → boot0 头/签名 → SPL 驱动表 → 分区/env,逐级确认。
  4. 建立「已知好板」基线:把能启动那块板的 LOG、boot pins 电阻、sys_config.fex、分区表、SDK 版本各存一份。
  5. 一次只改一个变量:boot 电阻、pinmux、签名工具、驱动表、分区表每次只动一处,改完重新上电抓 LOG。
  6. 用装板实跑闭环:任何改动以「上电跑通完整启动 + 关键功能 + 一次断电重启」为最终判定。

1. 问题本质:全志启动链路与 SPI 控制器

「全志板子起不来」这句话在现场被用得太泛。它可能是 BROM 压根没选对外挂介质, 可能是 boot0 镜像头校验没过被直接丢弃,可能是 SPL 里没有新料号的驱动表, 也可能是 U-Boot 起来了却读不到正确的 env 或分区。本章先把现象还原成机制: 讲清全志的启动链路每一级在干什么、SPI 控制器是怎么把命令送到 XTX 器件的, 然后把本文的排查对象与「烧录器找不到型号」严格切开。

1.1 全志启动链路全景

全志 SoC 上电后,执行顺序是固定的四段:BROM(掩膜 ROM)→ boot0 / SPL → U-Boot → kernel。 每一段都依赖前一段成功地把下一阶段从外挂介质里读出来并校验通过。 任一段失败,系统都会停住或回退(典型是回 FEL 或反复重启)。

全志启动链路:BROM → boot0(SPL) → U-Boot → kernel(阶段命名与顺序以 SDK 为准)BROM掩膜 ROM读 boot pins / 进 FEL选定启动介质boot0 / SPL初始化 DRAM把 U-Boot 搬到 DRAM常见名 boot0 / splU-Boot读 env 环境变量加载内核 / 设备树kernel / OSTina / LinuxMelis / OpenWrtFEL 模式(USB)boot 失败 / 按住 FEL 键→ BROM 转 USB FELSPI 控制器与存储器件硬件视图(寄存器位 / 引脚复用以平台手册为准)SoC 内部CCUSPIx_CLK 分频SPI 控制器主从 / 模式SPIx_CCR 时钟分频SPIx_TCR 控制 / 片选TX / RX FIFOpinmuxCS / SCLKIO0 / IO1IO2 / IO3复用错 → 全无波形板级外挂(XTX)XT25F08BSPI NOR 8Mbit常见值 ID 0x0B4014XT26G01BSPI NAND 1Gbit常见值 ID 0x0B21同一板二选一,由 boot0 与 sys_config 决定关键点:CCU 给出的 SPI 时钟经 SPIx_CCR 分频后决定能否在低速下被器件识别;BROM 与 boot0 用的是同一组物理引脚(复用必须一致);介质选错会让整条链路在第一级就走偏。全文命令码、寄存器位、boot pins 取值、sys_config.fex 字段、分区偏移均以具体平台 SDK 与对应手册为准;未给出具体值的,请逐条查证后再动板。
图 1 · 全志启动链路与 SPI 控制器 / 存储器件硬件视图
四段的排查权重

统计上,前两段(BROM、boot0/SPL)承担了绝大多数量产启动失败, 因为这两段发生在 DRAM 还没起来的极早期,能用的工具最少、信息也最少。 第三段(U-Boot)和第四段(kernel)失败通常已有串口输出,定位反而容易。 所以本文把 8 类根因里的 6 类都压在前两段,后两段只占 2 类。

1.2 各平台与介质支持概览

全志不同 SoC 的 BROM 对 SPI NAND / SPI NOR 的支持程度、启动介质选择方式都不一样。 下表是常见平台与介质倾向,具体以该平台 SDK 的 sys_config.fex / 设备树与 BROM 支持列表为准。

平台典型启动介质OS / 固件栈备注(以 SDK 为准)
F1C100s / F1C200sSPI NOR 为主Linux / Melis / 裸机老架构,boot0 与 U-Boot 一体,介质选择较固定
T113 / T113-S3SPI NAND / SPI NORTina Linux / LinuxS3 常配 SPI NAND,sys_config 与 dts 双轨
R328 / R329SPI NAND / eMMCTina Linux / RTOSRISC-V 协处理器平台,启动链较复杂
V851 / V833SPI NAND 为主Tina Linux / RTOS视觉类 SoC,常用 SPI NAND 做大容量
A40iSPI NOR / eMMC / NANDLinux车规,启动源多选,boot pins 关键
T507SPI NAND / eMMCLinux / Ubuntu工业/车载,分区表偏复杂
H616SPI NOR / eMMCLinux / AndroidTV 盒子,常见 SPI NOR 启动

1.3 SPI 控制器是怎么把命令送到 XTX 器件的

全志的 SPI 控制器是启动链路里「BROM → 器件」这段的物理通道。 CCU 时钟控制单元先给 SPI 模块提供总线时钟,再经 SPIx_CCR 时钟分频寄存器 得到最终 SCLK;SPIx_TCR 控制主从、模式、片选;数据经 TX/RX FIFO 收发。 引脚必须经过 pinmux 切到 SPI 功能(CS / SCLK / IO0..IO3)才能对外通信。

硬件环节控制器 / 寄存器(常见名)它决定什么配错的表现
时钟来源CCU:SPI 总线时钟门控与分频SPI 模块有没有时钟、频率档BROM 阶段无波形 / 读不到 ID
最终时钟SPIx_CCR 时钟分频寄存器SCLK 实际频率高频读错、低频正常
工作模式SPIx_TCR 控制寄存器主从 / 单线·双线·四线 / 片选模式不匹配 → 数据错位
数据传输SPIx_TX / RX FIFO命令与数据收发FIFO 溢出 / 丢字节
引脚复用pinmux(pinctrl / sys_config)引脚是否真的在 SPI 功能SCLK 上零波形
片选CS# 引脚 + 上拉帧定界CS# 浮空 → 概率性失败

关键认知:BROM 与 boot0 用的是同一组物理 SPI 引脚。 这意味着如果 pinmux 在第一级就配错,后一级连重新配置的机会都没有—— 这正是「类目 1」最隐蔽的地方。另外,BROM 阶段可用的时钟分频档位有限, 低速下器件才容易识别,所以新料号若对时钟敏感,往往卡在最早期。

1.4 常用工具与命令(常见值)

下面是全志量产排查常用的工具与命令,命令与参数均为常见写法,以实际版本为准。

工具 / 命令用途常见值 / 说明
PhoenixSuitWindows 下固件烧录(IMG 包)认到设备后烧整包,常见失败在头校验/分区
LiveSuit老版本固件烧录工具部分老平台仍用,逻辑同 PhoenixSuit
sunxi-felFEL 模式下的命令行烧录/调试常见:sunxi-fel ver / spl / write / exec
全志量产工具产线批量烧录与校准含签名、分区、SN 写入等子流程
uboot 命令U-Boot 内读 ID / 查分区常见:sf probe / mtd / mmc / printenv
串口 LOG唯一能看启动链各阶段的窗口波特率以平台默认为准(常见 115200)
一句话机制

把启动失败拆成四个可证伪的命题:① BROM 选对介质了吗(第 3 章)、 ② boot0 镜像头/签名过吗(第 4 章)、③ SPL 认得新料号吗(第 5、6 章)、 ④ U-Boot 找得到分区与 env 吗(第 7、8 章)。任何一例现场问题,都必须先回答这四问再动手。

2. 方案总览:失败类别分流

全志平台 SPI NAND / SPI NOR 量产失败看似千奇百怪,但归根结底都能按 「串口 LOG 卡在启动链哪一级」归到 8 个类目、收敛到 4 个排查关卡。 本章先给一张分流图,再给一张介质/平台对比表,后面 6 章的所有动作都是在这张图里选一条往下钻。

2.1 失败类别分流图

拿到一块起不来的板,第一件事是接串口、上电、把从第一行到最后一行全量保存, 然后按下面这张图确定卡在哪一级。绝大多数现场争论(「是芯片坏了还是板子坏了」) 在看到 LOG 第一句之后就消失了。

失败类别分流:先按串口 LOG 卡在哪一级归类(类目编号见目录)① 抓串口 LOG确定卡在哪一级BROM 级无输出 / 进 FELboot0 级签名 / 头校验失败SPL 级读 ID / 介质错U-Boot 级分区 / env 错→ 第 3 章 类目 1·2→ 第 4 章 类目 3·8→ 第 5·6 章 类目 4·5→ 第 7·8 章 类目 6·7判读:BROM 级失败常表现为「一行不出」或「反复进 FEL」;boot0 级失败停在极早期且日志极少;SPL 级能看到 SPL 打印但读 ID 失败;U-Boot 级已进命令行但起不了系统。
图 2 · 失败类别分流:先按串口 LOG 卡在哪一级归类

2.2 介质 / 平台对比:SPI NOR 与 SPI NAND 的启动差异

同一块全志板,挂 SPI NOR 和挂 SPI NAND 的启动路径差异很大: NOR 通常直接从固定偏移读 U-Boot;NAND 要处理坏块跳过与ECC, boot0 必须带坏块表。换介质时最容易漏的就是这一点(见第 5 章类目 4)。

维度SPI NOR 启动(常见)SPI NAND 启动(常见)
BROM 读法固定偏移直接读 U-Boot带坏块跳过、按页读,需 ECC
boot0 介质分支走 spinor 分支走 spinand 分支(坏块表)
容量 / 偏移偏移固定,容量小(常见 ≤ 256Mbit)偏移随坏块浮动,容量大(≥ 1Gbit)
驱动表位置U-Boot/Linux SPI NOR 表U-Boot/Linux SPI NAND 表(另列)
典型失败QE/4B 模式错、ID 未收录坏块门禁、ECC 配错、ID 未收录
sys_config 字段storage_type / spinor 相关storage_type / spinand 相关
分流时最容易踩的坑

不要把「进 FEL」当成「芯片坏了」。进 FEL 是 BROM 的主动行为: 要么你按着 FEL 键上电,要么它确实没找到能启动的介质 / boot0 校验失败。 先按第 3 章类目 2 把 FEL 来源查清楚,再决定是否动芯片。

2.3 四关断点法

与第 1 章的机制对应,量产排查把四关串起来:每一关只回答一个是非题。

关卡要回答的问题判据(通过)不通过去哪章
关卡1 BROM 介质BROM 选对启动介质了吗?boot pins 电平与手册启动表一致,未误进 FEL第 3 章 类目1·2
关卡2 boot0 头/签名boot0 镜像头与签名过吗?eGON/SPL 头校验通过,BROM 正常加载第 4 章 类目3·8
关卡3 SPL 驱动表SPL 认得新料号吗?回读 ID 命中驱动表,U-Boot 正常加载第 5·6 章 类目4·5
关卡4 分区 / envU-Boot 找得到分区与 env 吗?分区表与镜像一致,env 生效第 7·8 章 类目6·7

3. 类目 1·2:BROM 介质识别失败 / FEL 误触发

这两类都发生在启动链最早期(BROM 阶段),是信息最少、工具最少、却最高发的类。 它们的共同表现是「串口几乎一行不出」,区别是:类目 1 是 BROM 选错了介质(boot pins / pinmux 错), 类目 2 是 BROM 主动放弃、转进 FEL。先分清这两类,后面才不会在错误的方向上耗时间。

3.1 类目1:BROM 无法识别外挂介质

BROM 是掩膜在 SoC 里的第一段代码,它上电后先采样 boot pins, 根据电平决定去哪个介质找启动代码,再通过 SPI 控制器把 boot0 读进来。 这条链路上有两处最常断:

  • boot pins 配错:上下拉电阻焊错、被其它电路拉偏,导致 BROM 选成 SPI NOR 去读 SPI NAND(或反之)。
  • SPI 引脚复用错:pinctrl / sys_config 里这几个引脚没切到 SPI 功能, BROM 阶段就发不出波形(因为 BROM 用的也是这组物理引脚,没机会在后面修正)。
类目1:BROM 无法识别外挂介质(boot pins 配错 / SPI 引脚复用错)① boot pins 配错(复位释放瞬间被锁存)boot 配置引脚BOOT_SEL0▽上下拉决定电平BOOT_SEL1▽上下拉决定电平BOOT_SEL2▽上下拉决定电平BOOT_SEL3▽上下拉决定电平常见值映射(以手册为准):0000 → SPI NOR(常见)0001 → SPI NAND(常见)1111 → USB FEL(常见)其它 → 由 eFUSE / 镜像头决定② SPI 引脚复用错(BROM 阶段就错)SoCXTX器件CS#SCLKIO0IO1IO2IO3复用错 → SCLK 零波形判据· 万用表量复位期间各 boot pin 电平· 逻辑分析仪看 SCLK 上有无方波· 核对电平与平台启动模式表逐位对动作· 按手册改 boot 电阻上下拉· 改 pinctrl / sys_config 引脚复用· 重烧后冷/热机各抓一次 LOG注意:boot pins 决定 BROM 去哪个介质找启动代码,介质是 SPI NAND 却被配成 SPI 启动,BROM 会用 SPI 的读法读 NAND,ID 自然对不上——这会让类目1伪装成类目5。
图 3 · 类目1:BROM 无法识别外挂介质(boot pins 配错 / SPI 复用错)
检查项要求(以手册为准)怎么确认不合规后果
boot pins 电平复位期间各引脚电平与启动模式表一致万用表量复位瞬间电平选错启动介质,ID 对不上
上下拉电阻阻值与原理图、手册建议一致断电量阻值并查 net 连接电平漂移到临界,温度相关失效
SPI 引脚复用BROM 阶段引脚已切到 SPI 功能dump 复用寄存器 / 看波形SCLK 零波形,全无应答
CS# 上拉复位期间稳定为高,避免误触发复位期间单次触发抓 CS#随机命令,概率性失败
FEL 键 GPIO未被意外拉低(默认上拉)量 FEL 键引脚电平每次上电都进 FEL
电源域SPI IO 域电压与器件 VCC 一致量实际电压幅度超标,完全不响应

3.2 类目2:FEL 模式被误触发

FEL 是全志的 USB 下载模式。正常量产不应该进 FEL——它只在两种情况下出现: 用户按住了 FEL 键(特定 GPIO 被拉低),或者 BROM 找不到有效启动介质 / boot0 校验失败而主动回退。 现场常把「进 FEL」误判成「芯片坏了」,反复换料,其实板子一直在等你插 USB。

类目2:FEL 模式被误触发(按住 FEL 键 / boot0 校验失败回退)用户按住 FEL 键(特定 GPIO 被拉低,常见值)BROM 找不到介质或 boot0 校验失败回退USB FEL 模式BROM 转 USB 下载PC 识别为 USB 设备PhoenixSuit 无反应判据:串口零输出 + 设备管理器出现新 USB 设备动作:拔掉 FEL 键 / 修 boot0 后重新上电
图 4 · 类目2:FEL 模式被误触发(按住 FEL 键 / boot0 校验失败回退)
怎么确认是不是 FEL
  1. 看串口:进 FEL 时串口通常只有极少数字符或干脆没有;
  2. 看 PC 设备管理器:会出现一个新的 USB 设备(常见为全志 USB 或大容量设备);
  3. 用 sunxi-fel 探一下:sunxi-fel ver 能返回 SoC 信息即确认在 FEL 模式;
  4. 区分来源:拔掉 FEL 键重新上电还进 FEL,说明是 boot0 / 介质问题(转第 4 章),不是按键。

3.3 立即动作与根治动作

动作类型具体动作验收标准
立即动作量复位期间 boot pins 电平,与手册启动表逐位比对电平组合落在目标介质档
立即动作逻辑分析仪挂 SCLK,确认上电后有没有方波能看到干净的命令帧
立即动作拔掉 FEL 键重新上电,确认是否还进 FEL正常启动则原因为 FEL 键
立即动作dump SPI 引脚复用寄存器,确认在 SPI 功能功能编码与手册一致
根治动作boot 电阻上下拉纳入原理图评审清单评审记录有时序/电平核对项
根治动作FEL 键引脚在试产首件中固定测量并存档首件报告附电平结论
根治动作pinctrl / sys_config 复用随 SDK 版本评审复用表可追溯
危险操作

不要用「短接 FEL 键引脚试试」来定位:带电短接可能损伤 GPIO 或电源域。 确认 FEL 键对应的 GPIO 与上下拉电阻后,用断开/恢复上拉的方式在断电状态下验证。 涉及 boot pins 的修改要断电后改电阻,改完先量电平再上电。

4. 类目 3·8:boot0 签名失败 / eGON 与 SPL 头校验失败

这两类都发生在 BROM 加载 boot0 的那一步,表现高度相似:烧录器绿勾(镜像写进去了), 但 BROM 就是不加载,串口停在极早期。区别是:类目 3 是「签名工具与 u-boot 不匹配」让签名校验过不了; 类目 8 是「eGON 头部或 SPL 头部本身算错」让头校验过不了。两者都属于「镜像文件问题」,不是器件问题。

4.1 类目3:boot0 镜像签名失败或校验错

量产固件通常带签名:BROM 在加载 boot0 前会用内置公钥做签名校验(常见 RSA / ECDSA,以 SDK 为准)。 签名工具、u-boot 版本、公钥必须三者配套。现场最常见的错法是: 升级了 u-boot,却沿用了旧签名工具,或换了一套不匹配的密钥,于是 BROM 校验直接失败。

类目3·8:boot0 镜像头与签名校验(阶段命名与算法以 SDK 为准)① 从介质读 boot0固定偏移读出镜像② eGON.BT0 头magic/长度/平台③ SPL 头校验CRC / 长度④ 签名校验常见 RSA/ECDSA✓ 加载到 SRAM交权给 boot0✗ 任一环节失败丢弃镜像 / 回 FEL判读:类目3 是「签名工具与 u-boot 不匹配」导致 ④ 失败;类目8 是「eGON/SPL 头本身算错」导致 ②/③ 失败。两者都卡在 BROM 阶段,串口几乎无输出,且烧录器显示绿勾(镜像已写进去)。命令码、头结构、签名算法与公钥位置均为常见值,具体以所用 SDK 的打包/签名工具源码为准。
图 5 · 类目3·8:boot0 镜像头与签名校验(BROM 视角)
检查项要求(以 SDK 为准)怎么确认不匹配后果
签名工具版本与 u-boot / boot0 同源同版本比对打包脚本与 SDK 版本号公钥校验失败,丢弃镜像
密钥 / 证书公钥与签名私钥配套确认所用 key 与烧录公钥一致签名验证不通过
u-boot 版本与签名时的 u-boot 一致查版本字符串 / git 提交内容变了,签名对不上
secure boot 开关开启/关闭状态与镜像预期一致查 eFUSE / OTP 配置开了却没签名 → 必挂
打包流程走平台官方打包,不手工改头用官方 pack 工具重新生成手工改头易算错 CRC

4.2 类目8:eGON 头部与 SPL 头部校验失败

全志镜像有固定的头部结构:外层是 eGON.BT0 头(含 magic、长度、平台标识等), 内层是 SPL 头(含 CRC、长度等)。BROM 先校验 eGON 头,再校验 SPL 头, 任何一处算错(长度填错、CRC 算错、平台标识不对)都会被判为非法镜像被丢弃。

头部关键字段(常见)算错的表现怎么确认
eGON.BT0magic / 总长度 / 平台标识BROM 读头即判非法用工具 dump 头部逐字段比对
SPL 头CRC / 数据长度 / 入口CRC 不符 → 丢弃重新算 CRC 与镜像比对
长度字段必须与实际镜像字节数一致长度不符 → 截断/拒绝量实际文件大小
平台标识必须匹配目标 SoC标识错 → 不加载查镜像头平台码
判别类目3 还是类目8

两者都卡在 BROM 读 boot0 那一步,但失败环节不同: 类目 8 往往在「头校验」阶段就挂(eGON/SPL 头本身坏), 类目 3 是头没问题、签名那一步挂(公钥/密钥/工具不匹配)。 能用打包工具重新生成一份「头+签名都自洽」的镜像来区分——重新生成后好了就是类目 3, 仍然失败则偏向类目 8 或镜像打包本身有误。

4.3 立即动作与根治动作

动作类型具体动作验收标准
立即动作用同版本打包工具重新生成 boot0 镜像并比对头新镜像头字段自洽
立即动作确认签名工具、u-boot、公钥三者版本一致签名校验通过
立即动作dump 坏镜像的 eGON/SPL 头,逐字段比对好镜像定位是哪个字段算错
立即动作单板用 sunxi-fel 直接灌一份已知好 boot0 验证链路能加载说明是镜像问题
根治动作把打包/签名工具与 SDK 版本绑定管理升级有迹可循
根治动作量产包来源做哈希校验,防传输损坏每包可验证完整性
根治动作secure boot 方案保留可回退密钥异常可恢复
危险操作

不要为了「能启动」而关闭签名校验或烧断安全 fuse。 关闭校验会让板子暴露在被刷恶意镜像的风险里;烧断 fuse(如启用 secure boot 后)往往不可逆, 会让该芯片再也无法用旧方式启动。量产务必先在样品上验证,并保留可回退的密钥方案。