只读分享解决方案文档调试&解决方案📅 2026-09-21🔖 Rev 1.0⏳ 29天有效(至 2026-10-31)
🔧解决方案&应用市场分析 -> 调试&解决方案 -> 存储_量产问题排查 -> 烧录成功但不开机_SPI_NOR_量产排查

烧录成功但不开机_SPI_NOR_量产排查

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

烧录成功但不开机 · SPI NOR 量产排查手册

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

XTX 芯天下 · FAE 现场技术文档 | 覆盖 SPI NOR / Quad SPI NOR / QPI NOR 作为启动介质的量产场景 | 2026-09 版

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

命令码、寄存器位、dummy cycle 数值以器件 datasheet 与平台手册为准;本图仅展示机制,不代替 datasheet。

  • SPI NOR 没有统一的强制标准:状态寄存器数量与位定义、QE 位位置、4 字节地址的进入方式、dummy cycle 默认值、QPI 的进出命令都由各厂自定,同名位在不同厂、甚至同厂不同系列上含义都可能不同。
  • 本文出现的所有命令码(如读、写状态寄存器、进入/退出 4 字节地址、QE 相关命令)均为常见写法示例,不是通用常量,必须逐颗核对该料号的正式 datasheet。
  • 主机侧规则(SPI 控制器模式、dummy cycle 数、读命令选择)以目标平台的驱动源码与设备树为准,不以烧录器默认值或经验为准。
  • 凡本文标注「以 datasheet 为准」的条目,现场必须打开对应料号的正式 datasheet 复核后再动手。
6 类
不开机根因归类
地址模式 / QE / 状态寄存器 / 复位时序 / 接口协议 / 启动链路
16 MB
3 字节地址的寻址上限
超过必须切 4 字节地址或 EAR 分段(以 datasheet 为准)
Verify PASS
只证明写进去的字节与源镜像一致
不证明目标 SoC 按同样的规则读得出来
2 处
配置生效必须确认的点
烧录器侧一次、贴板上电后一次,缺一不可
一次性
SRP 永久锁定档 / LB 锁定位
写入不可撤销,误写只能换片

一句话结论:烧录器的 Verify PASS 只证明 「写进去的字节和源镜像一致」,不证明「目标 SoC 用同样的地址长度、 同样的读命令、同样的 dummy cycle 读得出来」。 SPI NOR 的校验是「数据搬运正确」,不是「读取语义正确」—— 地址模式、QE 位、状态寄存器、复位时序、接口协议、镜像布局这六件事只要有一件与板上规则不一致, 校验就会 100% 通过而系统 0% 起来。

这份文档解决什么

解决的是裸片烧录校验 100% 通过、贴板却不开机这一类问题的定位与根治方法。 全文按「现象 → 机制 → 类目 → 立即动作 → 根治动作」组织:第 1 章把现象还原成机制, 第 2 章给出决策树定类目,第 3~8 章是六个类目的逐一排查,第 9 章是可直接翻查的速查表, 第 10 章是把结论固化到产线的 SOP。

第 1 类
4 字节地址模式漏开 / 漏关
3 字节地址只能寻址到 16 MB。容量更大的器件若没切到 4 字节地址(或没用 EAR 分段),超出部分会回卷到低地址——低地址的 SPL 能起来,高地址的 kernel 却是错的。
高发动作:换大容量料号不重配工程
第 2 类
QE 位未生效
QE 位的物理位置各厂不同(SR1 / SR2 / 专用配置寄存器都有可能),且有易失与非易失两种。烧录器烧录时设的 QE,断电、擦除或复位之后可能已经不在了。
高发动作:只改烧录器不改系统侧
第 3 类
状态寄存器非易失位误写
SRP / BP / TB / CMP / LB 都是非易失位。工程里沿用上一份配置,可能把启动区写成只读、把保护范围反转,甚至把配置永久锁死。
高发动作:复制上一份烧录工程
第 4 类
复位与启动时序
HOLD# / RESET# / WP# 复用脚在上电瞬间处于什么状态,决定器件是「就绪」还是「挂起」。VCC 稳定到第一个 CS# 的等待不足,会让 BootROM 读到无效数据。
高发动作:只验冷启动不验热重启
第 5 类
接口协议错位
SPI 模式 0/3、dummy cycle 数、QPI 是否退出、是否留在连续读模式——任一项单边生效,读出来的字节流就整体错位,而命令时序看起来完全正常。
高发动作:只换器件不改驱动
第 6 类
镜像与启动链路错位
BootROM 认的是带平台头的启动镜像,不是裸的 u-boot.bin。偏移、冗余份数、压缩解压、参数区保护,每一环对错都会停在不同的启动阶段。
高发动作:整包镜像直接铺进 0x0

怎么用这份文档

  1. 先按串口输出归类:把「不开机」按第 1 章的六个画像定位到启动阶段,不要一上来就换芯片。
  2. 用第 2 章的决策树定主干:先判断错位落在哪条主干(地址与配置 / 模式与读保护 / 电源与时序 / 接口协议 / 启动链路),再进对应章节。
  3. 拿「已知好板」做基线:找一块能正常启动的板,把它贴板上电后读到的状态寄存器值、SPI 波形、镜像读回数据各存一份。
  4. 每次只改一个变量:地址模式、QE、状态寄存器、dummy cycle 每次只改一处,改完重新烧录并装板实跑。
  5. 以装板实跑闭环:任何配置变更的最终判定,都是「冷启动 + 热重启 + 关键功能 + 一次掉电」四件事全过。

1. 问题本质:烧录通过 ≠ 系统启动

烧录器报 Verify PASS、CRC 完全一致,芯片贴板后却黑屏、卡 BootROM 或 kernel panic—— 这通常不是芯片坏了,而是「写进去的字节」与「读它时使用的读取规则」之间错位了。 SPI NOR 没有坏块、没有 spare 区、字节可寻址,所以问题几乎不发生在数据本身, 而发生在地址长度、读命令、读模式这三层「读取语义」上。本章先把现象还原成机制。

1.1 六个数据画像

现场接到「烧好了但不开机」时,先按串口输出把现象归到下面六类之一。 六类现象对应的是同一批机制在不同启动阶段的暴露,不是六种独立故障。 每张卡片右下角给出了该现象最可能对应的类目编号(详见第 3~8 章)。

完全黑屏 · 串口无输出上电电流正常,串口一行都不出BootROM 没读到有效启动头或器件根本没响应读命令高概率:类目 5 / 4卡 BootROM · 有 ROM 打印ROM 输出版本后报找不到启动头或报读 ID / 读状态失败器件响应了但内容不被认可高概率:类目 6 / 5卡 bootloader · 打印中止SPL 起来,加载 U-Boot 时停或 U-Boot 报 CRC / magic 错环境变量区读出全 FF高概率:类目 6 / 1Kernel panic · 文件系统挂不上kernel 起得来,mount 失败或解压时报 CRC / 长度错根设备找不到高概率:类目 1 / 6启动但功能异常能进系统,MAC / 校准参数乱码某外设不工作,日志报校验错参数区被整包镜像覆盖高概率:类目 6偶发不开机冷启动 OK、热重启失败(或反之)睡眠唤醒后起不来只在某几块板 / 某批次出现高概率:类目 4 / 2六种现象不是六类故障,而是同一批机制在不同启动阶段的暴露:写进去的字节是对的,但读它的一方解释错了。排查起点不是「芯片有没有坏」,而是「谁在读、按什么命令和什么模式读、这些规则由谁设定」。
图 1 · SPI NOR 烧录通过但贴板不开机的六种数据画像

来源:命令码、寄存器位、dummy cycle 数值以器件 datasheet 与平台手册为准;本图仅展示机制,不代替 datasheet。

1.2 校验通过,到底证明了什么

这是全文最关键的一张表。烧录器的校验(Verify)本质是把写进去的内容读回来与源镜像逐字节比对, 它检验的是「数据搬运」这一件事;而系统能否跑起来,取决于目标 SoC 侧的「读取语义」。 关键在于:烧录器读回数据时用的是它自己的命令与模式,这套规则未必等于 SoC 用的那套。

校验通过能证明校验通过不能证明由谁决定
烧录器缓冲区里的数据与源镜像逐字节一致目标 SoC 能读懂这些字节目标驱动 / BootROM
在烧录器设定的读模式下读回正确在SoC 用的读模式下也读得正确器件 QE / QPI / 连续读状态
用烧录器选择的地址长度能访问到对应单元SoC 的地址长度能访问到同一个单元3 字节 / 4 字节地址模式
在当前 dummy cycle 配置下读对在平台配的 dummy 数下也读对器件配置寄存器 + 驱动
写入时器件处于可编程状态状态寄存器的非易失位没被误写烧录工程的配置项
这一颗芯片在烧录座上能跑这颗芯片贴板后能跑、且能反复启动装板实跑 + 冷热重启

1.3 一句话机制:三方规则必须对齐

一颗 SPI NOR 从被烧录到被 SoC 读出来,中间要经过三方规则的叠加:

  • 烧录器侧规则:用几字节地址、发哪条读命令、是否进 QPI、dummy cycle 取多少、状态寄存器配成什么、结束后是否复位。
  • 器件侧状态:上电默认是什么地址模式、QE 位当前是 0 还是 1、状态寄存器的非易失位被写成了什么、处于哪种读模式。
  • 目标平台侧规则:BootROM 发的是标准 SPI 还是 Quad 命令、SPI 控制器配的 dummy 数、设备树里声明的读命令与模式、驱动是否会重新配置 QE。

这三层里任意一层与另外两层不一致,校验都会通过,系统都不会起来。 更麻烦的是:烧录器在校验阶段用的是它自己刚设好的那套规则, 所以它能读对;而 SoC 上电时用的是器件掉电复位后的默认状态 + 平台自己的规则,这两者往往不是同一套。

贯穿全文的一条纪律

「烧录通过 ≠ 贴板能跑」,而在 NOR 上更精确的说法是:「烧录器读得对 ≠ SoC 读得对」。

只要现象是「校验 100% 通过但系统不起来」,就不要把时间花在怀疑芯片质量上——先查三层规则是否对齐。所有配置类根因的共同特征是:改规则就能好,换芯片好不了。

1.4 与 SPI NAND 相比,NOR 的排查重点有什么不同

很多 FAE 的排查路径是先从坏块、ECC、OOB 布局想起——那是 NAND 的问题域。 换成 SPI NOR 之后,这一串概念直接失效,排查重点整体迁移到「读取语义」上:

对比项SPI NOR(本文)SPI NAND(另见专题文档)
坏块出厂无坏块,无需坏块管理出厂允许存在坏块,需要坏块表管理
ECC不需要必须有;片上 ECC / SoC 硬件 ECC / 软件 ECC 三选一
spare 区无每页带 spare 区,存放坏块标记与 ECC 校验字节
地址语义字节地址;地址长度本身是个开关(3B / 4B)页地址 + 列地址;物理块号会因跳过坏块而漂移
读取差异点读命令 + 地址长度 + dummy cycle + 线宽(1/2/4)页读 + 读缓存两段式;读模式影响是否输出 spare
配置位影响面QE / 4B / dummy / 保护位都直接影响能否读对ECC 使能、读模式位影响字节流结构
排查第一问SoC 发的读命令与器件当前状态是否匹配坏块策略与 OOB 布局三方是否一致
最容易踩的一条直觉错误

不要假设「烧录器能读回来 = 器件配置是正确的」。烧录器在读回校验时,用的是它自己刚刚设好的地址模式、读命令与 dummy 数;这套配置在烧录结束、器件离开烧录座并重新上电之后,可能已经全部回到默认值。

因此全文反复强调一句话:配置生效与否,必须在系统侧(贴板上电后)确认,不能在烧录器侧推定。

2. 五类错位总览与排查决策树

六个类目不是并列的六张清单,而是挂在五条主干上的: 地址与配置、模式与读保护、电源与时序、接口协议、启动链路。 其中「地址与配置」这一条主干下挂着两个高频类目(第 1 类地址模式、第 3 类状态寄存器), 所以是五条主干、六个类目。本章的作用是:在动手之前先把问题定到主干上。

2.1 决策树

入口只有一个现象:烧录校验 100% 通过、贴板不开机。往下先定主干,再进对应类目。 走线的疏密不代表概率高低,只表示「第 1、3 类同属一条主干」。

烧录校验 100% 通过 · 贴板不开机地址与配置第 1、3 类地址长度 / 状态寄存器模式与读保护第 2 类QE / 读保护位电源与时序第 4 类复位 / 上电等待接口协议第 5 类模式 / dummy / QPI启动链路第 6 类镜像 / 偏移 / 头信息第 1 类4 字节地址漏开 / 漏关第 2 类QE 位未生效第 3 类状态寄存器非易失位误写第 4 类复位与启动时序第 5 类接口协议错位第 6 类镜像与启动链路判定顺序:先看串口停在哪一段(第 1 章)→ 定主干 → 进对应章节做「立即动作」→ 装板实跑闭环
图 2 · 五类错位总览与排查决策树

来源:命令码、寄存器位、dummy cycle 数值以器件 datasheet 与平台手册为准;本图仅展示机制,不代替 datasheet。

2.2 五个类目与六章的对应关系

主干类目章节一句话判据
地址与配置第 1 类 · 4 字节地址模式漏开/漏关第 3 章低地址能读、高地址错,或换大容量料号后突然不行
地址与配置第 3 类 · 状态寄存器非易失位误写第 5 章能读能校验,但改不动配置 / 写不进日志 / 升级失败
模式与读保护第 2 类 · QE 位未生效第 4 章烧录器侧读对、板上读错,且和线宽(1/2/4 线)有关
电源与时序第 4 类 · 复位与启动时序第 6 章冷启动与热重启表现不一致,或只在某些板上出现
接口协议第 5 类 · 接口协议错位第 7 章读出来的数据整体错位若干字节,或器件完全不响应指令
启动链路第 6 类 · 镜像与启动链路错位第 8 章器件读对了,但停在某个明确的启动阶段并有对应日志

2.3 三个判别问题:五分钟内定主干

现场不需要先把六个章节都过一遍。先如实回答下面三个问题,答案的组合基本就能把主干定下来。

问题答「是」指向答「否」指向
串口有没有任何输出?器件响应了指令 → 数据层问题(主干:地址与配置 / 启动链路)器件没响应或响应无效 → 协议层问题(主干:接口协议 / 电源与时序)
是必现还是偶发?必现 → 配置或镜像问题(第 1、2、3、6 类)偶发 → 时序、电源、状态残留问题(第 4、5 类)
现象和容量 / 地址高低有关吗?低地址 OK、高地址错 → 第 1 类(4 字节地址)优先与地址无关 → 从第 2、5 类(QE / dummy / QPI)查起

2.4 最先要排除的三件事

  1. 确认串口是真的一行都没有,而不是波特率不对。换波特率、换 TX/RX、量一下 TX 脚有无波形,再下「完全黑屏」的结论。
  2. 确认板上供电与器件电压档一致。3.3 V 档与 1.8 V 档的器件在外观上毫无区别,装错料或工装档位没切,现象与配置错位完全一样。
  3. 确认「不开机」是不是必现。拿同一块板连做 20 次冷启动 + 20 次热重启,统计失败率;偶发问题的根因基本都在第 6 章。
不要在这个阶段做的三件事
  • 不要先做整片擦除——NOR 没有坏块概念,整片擦除解决不了任何配置错位,反而会抹掉参数区,把「能启动但功能异常」变成「不可恢复」。
  • 不要先换芯片——配置类根因的共同特征是「改规则就能好,换芯片好不了」,换片只会让现场的结论更混乱。
  • 不要同时改多个配置——地址模式、QE、dummy cycle 一起改,就算好了也不知道是哪个起作用,下次还会复发。

3. 第 1 类:4 字节地址模式漏开 / 漏关

标准 SPI NOR 的读命令后面跟 3 个字节地址(A23:A0),一次性只能寻址 16 MB。 容量更大的器件(256 Mbit / 512 Mbit / 1 Gbit 及以上)必须换一种方式访问高地址—— 切到 4 字节地址模式、使用 4 字节变体读命令、或用 EAR 扩展地址寄存器分段。 这三种方式各厂支持情况不同,同一颗器件可能只支持其中一种。 只要「烧录器用一种、SoC 用另一种」,低地址就会正常、高地址就会错。

3.1 为什么 16 MB 是个坎

3 字节地址能表达的空间是 2 的 24 次方字节,也就是 16 MB(128 Mbit)。 当器件容量超过这个数时,主机必须多送一个地址字节,否则器件只能「看得见」低 16 MB。 问题在于:器件并不会因为地址不够而报错,它会把超出的高位地址直接忽略或回卷, 于是你读到的是低地址的内容,而且读操作本身完全成功。

3 字节地址帧:命令 + A[23:0] + dummy + 数据CMDA[23:16]A[15:8]A[7:0]dummy数据字节流上电默认(多数器件)最大寻址 16 MB容量 ≤ 16 MB 时够用;超过 16 MB 必须切 4 字节地址,或用 EAR 分段4 字节地址帧:命令 + A[31:0] + dummy + 数据CMDA[31:24]A[23:16]A[15:8]A[7:0]dummy数据字节流由命令或配置位切换需主机与器件双方支持切换方式各厂不同:专用进入/退出命令、4 字节变体读命令、或 EAR 分段16 MB 边界:为什么「前半段能起来、后半段挂」0 ~ 16 MB 正常读出BootROM / SPL 在这里16 MB 以上地址回卷读到的是低地址内容016 MB32 MB(示意)典型现象:SPL 起来、加载 kernel 时数据错或校验失败——镜像的高地址部分被读成了低地址内容。
图 3 · 3 字节地址帧与 4 字节地址帧对比及 16 MB 边界

来源:命令码、寄存器位、dummy cycle 数值以器件 datasheet 与平台手册为准;本图仅展示机制,不代替 datasheet。

3.2 三种进入方式,以及「上电默认到底是什么」

这是本类目最容易出错的地方:不要假设 4 字节地址是默认状态。 多数器件上电默认为 3 字节地址模式,需要主机显式切换; 少数器件把地址模式做成非易失配置位,写一次掉电保持; 还有一部分器件的 4 字节模式是易失的,复位或掉电之后立刻回到 3 字节。 具体是哪一种,只能查该料号的 datasheet。

方式 A:专用进入 / 退出命令进入命令(常见 B7h)退出命令(常见 E9h)切入后读写擦命令都用 4 字节地址部分器件为易失,复位即回默认主机需显式发送方式 B:4 字节变体读命令用带 4 字节地址的读命令(如 13h / 0Ch / 6Ch 等)不切换器件模式,逐条命令自带BootROM 必须原生支持与器件模式无关方式 C:EAR 扩展地址寄存器3 字节地址 + EAR 选段(常见 C5h 写 / C8h 读)跨段访问前必须先改写 EAR忘记改 EAR 会读到错误段段内地址仍是 3 字节默认状态与保持性:决定「烧录时配的能不能带到板上」上电默认3 字节地址(多数)主机发进入命令切到 4 字节地址复位 / 掉电回到默认(易失时)非易失配置位器件掉电仍保持(少数)
图 4 · 进入 4 字节地址模式的三种方式与默认状态保持性

来源:命令码、寄存器位、dummy cycle 数值以器件 datasheet 与平台手册为准;本图仅展示机制,不代替 datasheet。

3.3 典型症状与判据

症状指向 4 字节地址的判据验证动作
低 16 MB 正常、高地址数据错镜像整体超过 16 MB,且低地址段能正常启动把镜像裁剪到 16 MB 内试烧,若能起来即确认
换大容量料号后突然不开机之前 ≤ 16 MB 的烧录工程被直接沿用核对工程里的地址模式与容量配置
烧录器能读全片,板上读不全烧录器用 4 字节变体命令,SoC 用 3 字节命令抓 SPI 波形,数地址字节数
高地址擦除 / 编程失败4 字节模式下擦写命令同样需要变体或 4 字节地址格式核对 4 字节模式下的页编程与擦除命令
烧录座上全过、贴板冷启动必挂4 字节使能位为易失,掉电后回到 3 字节默认贴板上电后读出该配置位确认
EAR 分段器件跨段读错访问跨 128 Mbit 段的数据前没有改写 EAR检查驱动里 EAR 的改写时机

3.4 立即动作

  1. 确认容量是否越过 16 MB:把料号对应的 bit 数换算成字节,判断是否超过 16 MB(128 Mbit)。
  2. 查 datasheet 确认支持方式:是进入/退出命令、4 字节变体读命令、EAR 分段,还是非易失配置位;并明确上电默认是 3 字节还是 4 字节。
  3. 抓上电瞬间波形数地址字节:用逻辑分析仪看 BootROM 发出的第一条读命令后面跟了几个地址字节。这是最直接、最不会争辩的证据。
  4. 在贴板上电后读器件状态(不是在烧录座上):确认当前地址模式、确认 4 字节使能位是否为预期值。
  5. 核对平台各阶段的读命令:BootROM、SPL、U-Boot、kernel 四段可能用不同的驱动代码,要逐段确认。
  6. 做裁剪验证:把镜像裁剪到 16 MB 以内试烧一次。若能起来,就可以确认根因在高地址访问上。

3.5 根治动作

  • 把地址模式写进烧录工程并做首件验证:工程里显式配置地址模式,不用默认值;首件必须装板实跑确认。
  • 易失位必须在系统侧重新配置:若该器件的 4 字节模式是易失的,烧录时设的带不到板上,必须在 SPL 或 SPI 驱动初始化时显式发送进入命令。
  • 换料号、换容量档必须重跑首件:从 128 Mbit 换到 256 Mbit 是最典型的触发动作,不允许直接沿用旧工程。
  • 把容量与地址模式写进料号核对表:产线换型时,先看这张表再选烧录工程。
不要假设 4 字节地址是默认状态

上电默认各厂不同,多数器件上电为 3 字节地址模式,少数料号相反——以 datasheet 为准。

更危险的是「看起来是默认」的情形:烧录器会把器件切到 4 字节模式再烧,烧完校验通过,你以为默认就是 4 字节;实际上器件一断电就回到 3 字节,SoC 上电后按 3 字节读,高地址全部回卷。

判定方法只有一条:在贴板上电后、BootROM 已经跑过之后再读一次器件的地址模式状态,而不是在烧录座上读。

危险操作:不要靠拉电压 / 飞线强改配置

为「让器件进入某种模式」而抬高或拉低 VCC、给地址脚或控制脚飞线加电平,属于会直接损伤器件的危险操作。

  • 超出 datasheet 规定范围的电压会让器件参数永久漂移,甚至当场损坏;现场表现为「烧录器还能识别,但贴板就是不稳定」。
  • 把 WP# / HOLD# / RESET# 直接短接到电源或地来「强制解除保护」,会掩盖真实根因,并且可能在后续批次上变成批次性故障。
  • 正确做法是按 datasheet 给出的命令序列改写配置,并在系统侧(SPL / 驱动)固化,而不是在硬件上做临时手脚。

4. 第 2 类:QE 位未生效

QE(Quad Enable)位决定器件是否接受 Quad(4 线)读命令。 它有两个致命特性:第一,物理位置各厂不同,SR1、SR2、专用配置寄存器都有可能; 第二,它可能是易失的,烧录时写进去的值未必能带到目标板上。 于是就出现了最典型的一幕:烧录器用 Quad 模式烧完、校验 100% 通过, 贴板上电后 SoC 也用 Quad 命令读,但器件的 QE 已经是 0,读到的是无效字节。

不要假设 QE 位都在 SR2[1]

这是本类目最常见、也最贵的错误假设。QE 位的位置各厂不同:有的在 Status Register-2 的 bit1,有的在 Status Register-1 的 bit6,还有的放在专用的配置寄存器里,需要用专用命令访问。即使是同一家厂商,不同系列、不同容量档之间也可能不一致。

  • 不要因为上一颗料号的 QE 在 SR2[1],就默认这一颗也是。
  • 不要用通用工具的默认「写状态寄存器」动作去设 QE——它可能写的是另一个器件的位置,把别的位改掉了。
  • 写状态寄存器是整字节/整寄存器写入,改 QE 的同时会把同寄存器的其他位一起写回,务必先读-改-写,并确认其他位的期望值。

4.1 位置因厂商而异:不要照抄别家的工程

下面这张图列出的是「可能存在的位置」, 不是「某个厂商的确定位置」。同一厂商的不同系列、同一系列的不同容量档都可能不同。 唯一可靠的判定方法是在目标板上实际读出状态寄存器,再按该料号 datasheet 的位定义反查。

形态Status Register-1(SR1)bit7…bit0Status Register-2(SR2)bit7…bit0QE 位置说明7766554433221100形态 ①SRP0BPWELWIPSUSCMPLBQESRP1SR2 的 bit1形态 ②SRP0QEBPBPBPBPWELWIPSRP1SR1 的 bit6形态 ③SRP0BPWELWIPSUSCMPLBQESRP1掉电即回默认形态 ④SRP0BPWELWIPQECMPLBSRP1SR2 的 bit7形态 ⑤SRP0BPWELWIPSUSCMPLBSRP1不在 SR,专用 CR上表是「可能的位置」,不是「确定的位置」:同一厂商不同系列、同一系列不同容量档的 QE 位置都可能不同(以 datasheet 为准)。判定方法:在目标板上实际读出 SR 值,按 datasheet 的位定义反查 QE 是否为 1,而不是照抄别家工程。
图 5 · QE 位在不同料号上的位置差异

来源:命令码、寄存器位、dummy cycle 数值以器件 datasheet 与平台手册为准;本图仅展示机制,不代替 datasheet。

4.2 烧录通过 ≠ 模式生效:一条时间线

理解这一类目的关键,是把「烧录那一刻」和「贴板上电那一刻」当成两个独立时刻来看。 中间隔了断电、离座、复位这三件事,每一件都可能把 QE 拉回默认值。

① 烧录器接管裸片离线编程② 写 QE = 1(方式因料号而异)③ 编程 + 校验Verify PASS④ 断电 / 复位离开烧录座⑤ 贴板上电SoC BootROM 读结果 A:QE 为非易失,贴板后仍为 1SoC 用 Quad 命令读,数据正确系统正常启动结果 B:QE 为易失或被复位清掉器件忽略 IO1~IO3,Quad 读成无效数据校验 PASS 但 BootROM 读到错字节 → 黑屏关键:烧录器「以 Quad 方式烧录并校验通过」只说明烧录那一刻 QE 生效,不说明贴板上电那一刻 QE 仍生效。因此结论是:QE 的生效与否必须在系统侧确认(贴板上电后读状态寄存器 / 抓波形),不能在烧录器侧推定。
图 6 · QE 位从烧录到贴板上电的时间线

来源:命令码、寄存器位、dummy cycle 数值以器件 datasheet 与平台手册为准;本图仅展示机制,不代替 datasheet。

4.3 Quad 模式下的 dummy cycle

即便 QE 已经生效,还有第二道坎:dummy cycle(等待周期)数必须两边一致。 器件在收到地址之后,需要若干个时钟周期才能把数据送到 IO 上,这段空档就是 dummy cycle。 主机少发一个,就会把器件输出的前一个字节当成 dummy 丢掉;多发一个,就会多收一个无效字节。 结果都是整帧数据错位,而命令与地址本身完全正确。

读命令(常见写法)线宽dummy cycle备注
03h Read1 线无 dummy受时钟频率上限约束,以 datasheet 为准
0Bh Fast Read1 线常见 8以 datasheet 为准
3Bh Dual Output Fast Read2 线常见 8以 datasheet 为准
6Bh Quad Output Fast Read4 线常见 8需 QE = 1
BBh Dual I/O Fast Read2 线含 mode byte地址也走 2 线
EBh Quad I/O Fast Read4 线含 mode byte支持连续读,需 QE = 1

dummy cycle 数由命令码与配置寄存器共同决定:同一颗器件在不同读命令下 dummy 数不同, 部分器件还有专门的 DC 位用来切换档位(常见可选数各厂不同,以 datasheet 为准)。 主机侧则写在 SPI 控制器驱动或设备树里。 改器件不改驱动、或改驱动不改器件,都会错位。

4.4 典型症状与判据

症状指向 QE / dummy 的判据验证动作
烧录器读对、板上读错,且只在 Quad 通路出错烧录器自己发过 QE 命令,板上没发贴板上电后读 SR,确认 QE 实际值
读出来的数据整体错位一两个字节主机 dummy 数与器件期望值不一致抓波形数 dummy 周期,与 datasheet 核对
降级成 1 线读就能起来Quad 通路整体不通(QE 或 dummy 任一错位)把主机改成 03h / 0Bh 试启动
换一批料号后同一份工程突然失败新料号 QE 位置或默认值与旧料号不同重新核对新料号的寄存器位定义
高频时钟下失败、降频就好dummy 数处于临界,或器件输出延迟不够核对频率与 dummy 的对应关系
烧录器提示「写状态寄存器失败」状态寄存器被保护(SRP / WP#)或 QE 位置写错先读回 SR 原始值,再查保护条件(见第 5 章)

4.5 立即动作

  1. 查该料号 datasheet 确认 QE 位的确切位置(在哪个寄存器的第几位),以及它是非易失还是易失。
  2. 在贴板上电后读状态寄存器:用板上 SoC 或一个外挂的小工具读出 SR 原始值,按位定义算出 QE,确认是不是 1。
  3. 确认 SoC 用的是哪条读命令:看 BootROM 行为、看驱动与设备树里声明的读命令,确认它期望几线。
  4. 核对 dummy cycle 数:把器件侧的配置(含 DC 位)与主机侧驱动里配的 dummy 数摆在一起对。
  5. 抓波形对比:同时抓烧录器侧与板上侧的读时序,比命令码、地址字节数、线宽、dummy 周期数四项。
  6. 降级验证:把主机侧强行改成 1 线标准读(03h / 0Bh),若能起来,就确认根因在 Quad 通路上。

4.6 根治动作

  • 易失的 QE 必须在系统侧重新使能:在 SPL 或 SPI 控制器驱动初始化里显式写入 QE,不要指望烧录时设的值能带过来。
  • 把 QE 与 dummy 配置写进平台代码并加注释:注明适用料号与 datasheet 版本,换料号时必须同步 review。
  • 烧录工程里显式声明状态寄存器配置:不用默认值,并把「烧录结束后是否发送复位命令」这一项明确勾选/取消并留痕。
  • 首件必测 Quad 通路:首件除了能启动,还要实测 Quad 读带宽或至少确认 QE 生效,不能只测「能起来」。
为什么「烧录时被擦复位」这个说法要小心

现场常听到一句「烧录完 QE 位被擦复位了」。严格说,擦除(Erase)操作擦的是存储阵列,状态寄存器不在阵列里,擦除本身不会清 QE。

真正在清 QE 的通常是这三件事:掉电(易失位自然回默认)、复位命令(部分器件会把易失配置拉回默认)、烧录器结束流程里主动发送的状态寄存器回写。

所以排查时不要把结论停在「被擦了」,而要具体确认是哪一步把它改回去了,这样才能对症下药:要么改用非易失写法,要么在系统侧重新使能。

危险操作:不要盲目整寄存器回写

写状态寄存器是整寄存器操作,不是按位操作。在没有读回原始值、没有逐位确认的情况下直接回写一个「从别处抄来的值」,会同时改动同寄存器里的其他位。

  • 可能顺手把 BP / TB / CMP 写成非期望值,把启动区变成只读(见第 5 章)。
  • 可能把 SRP / LB 这类一次性位写死,直接报废整片。
  • 正确顺序永远是:读回原始值 → 按位改 → 写回 → 再读回验证,并且写之前确认 WEL 已置位、器件不处于写保护状态。