3. 目标芯片与烧录场景分析
在 Flasher 量产烧录工程里,第一件容易出错的事不是接线,也不是选型号,而是把“要烧什么”认错。很多现场问题——烧录超时、校验失败、烧完不启动、良率忽高忽低——追根溯源,都是因为把目标对象识别成了错误的类别。本节先把量产烧录中常见的几类目标对象讲清楚,再给出一套可落地的需求拆解方法。
一、先分清“谁被烧”:四类目标对象
量产烧录的目标对象,按存储介质与访问路径,通常分为四类:
- MCU 内部 Flash:程序直接写入芯片自带的 Flash,通过 SWD/JTAG 或芯片厂商的 ISP 协议访问。Flasher 通过调试接口连接,写入地址通常是 0x08000000(STM32 类)或 0x00000000(部分 NXP/瑞萨)。
- MPU/SoC 外部 Flash(NOR/NAND):SoC 本身不带可烧录的程序存储,固件放在外挂的 SPI NOR 或并行 NAND 上。烧录时 Flasher 直接操作外部 Flash 芯片,SoC 可能处于复位或未上电状态。
- eMMC / SD 卡:容量大、有控制器和分区表,烧录的是镜像文件(如 .img、.bin),需要按分区写入,涉及 boot0/boot1、RPMB、用户分区等概念。
- QSPI / OSPI Flash:介于前两者之间,物理上是外部 Flash,但通过 Quad/Octal SPI 接口访问,常用于存放 SoC 的启动镜像(boot image),烧录时可能需要先配置 Flash 的 QE 位、地址模式等。
识别对象时,最可靠的方法是看数据手册的启动章节和原理图上的存储器件型号,而不是凭经验猜。例如看到 W25Q128JVSIQ,就知道是 128Mbit 的 SPI NOR;看到 MTFC4GACAJCN,就是 4GB 的 eMMC。型号确认后,烧录算法、地址映射、时序参数才能确定。
二、需求拆解:从“烧什么”到“怎么烧”
识别出对象之后,下一步是把量产烧录需求拆成可执行的参数。建议按以下五个维度逐项确认,每一项都对应 Flasher 工程中的一个具体配置。
1. 镜像与地址映射。确认要烧录的文件有哪些、分别写到哪个地址。例如一个典型的 STM32MP1 方案:TF-A 写到 0x00000000,U-Boot 写到 0x00080000,Kernel 写到 0x00200000,RootFS 写到 0x00800000。地址必须与启动 ROM 的加载约定一致,错一个字节就可能导致无法启动。
2. 擦除策略。是整片擦除还是按扇区擦除?量产中通常先整片擦除再写入,但如果镜像只占部分区域,按扇区擦除可以节省时间。以 128Mbit SPI NOR 为例,整片擦除约 40~60 秒,而按 4KB 扇区擦除 1MB 区域只需约 2~3 秒。这个差异在批量生产时非常可观。
3. 校验方式。写入后必须校验。常见方式有:读回比对(Read-back Verify)、CRC 校验、SHA-256 摘要比对。Flasher 支持在烧录后自动执行校验,校验失败会标记为不良品。对于 eMMC,还要注意校验时是否包含分区表区域。
4. 接口与时序参数。SPI 时钟频率、QSPI 的 dummy cycles、eMMC 的 bus width(1/4/8 bit)和时钟频率,都会影响烧录速度和稳定性。例如 QSPI NOR 在 50MHz 下写入 16MB 约需 30 秒,降到 20MHz 则可能超过 70 秒。量产时需要在速度和信号完整性之间取平衡。
5. 量产附加需求。是否写入序列号、MAC 地址、校准参数?是否需要在烧录后锁定读保护(RDP)?是否要记录每个芯片的烧录日志用于追溯?这些需求要在工程配置阶段就确定,而不是等到产线才发现。
三、一个可复用的需求拆解表
下面这张表可以直接用于项目启动时的需求确认,字段按实际量产场景设计,不引入无关的管理字段。
| 确认项 | 示例值 | 对应 Flasher 配置 | 风险点 |
|---|---|---|---|
| 目标对象类型 | QSPI NOR,W25Q128JV | Flash 型号选择 | 型号选错导致时序不匹配 |
| 镜像文件与地址 | boot.bin @ 0x00000000 | Program 地址段 | 地址偏移错误导致不启动 |
| 擦除方式 | 整片擦除 | Erase 选项 | 未擦除直接写导致校验失败 |
| 校验方式 | 读回比对 + CRC32 | Verify 选项 | 校验关闭导致不良品流出 |
| SPI 时钟 | 50 MHz | Interface 速度 | 过高导致误码,过低影响产能 |
| 序列号写入 | 从 0x08000000 起递增 | Serial Number 功能 | 重复或跳号 |
| 读保护 | 烧录后使能 RDP Level 1 | Option Byte 配置 | 忘记锁定导致固件被读出 |
四、常见识别错误与后果
把 eMMC 当成 SPI NOR 来烧,最典型的表现是 Flasher 连接后读不到 ID,或者读出的 ID 与预期不符。把 QSPI Flash 当成普通 SPI Flash 烧,可能因为缺少 QE 位配置而只能以 Single SPI 模式写入,速度慢且容易在高速下失败。把 MCU 内部 Flash 当成外部 Flash 烧,则会因为地址空间不同而直接报错。
避免这些错误的方法很简单:在工程建立阶段,把目标器件的完整型号、封装、接口模式、容量、页大小、扇区大小、擦除时间全部记录在案,并与 Flasher 的器件库逐一核对。如果 Flasher 内置库中没有该型号,需要手动添加或选择兼容型号,并验证时序参数。
需求拆解的本质,是把“要烧什么”翻译成“Flasher 能执行的参数”。对象识别是前提,参数确认是核心,样片验证是保障。三者缺一不可。