只读分享解决方案文档调试&解决方案📅 2026-10-14🔖 Rev 1.0⏳ 还有3日到期
🔧解决方案&应用市场分析 -> 调试&解决方案 -> 系统设计指南 -> SPI_NAND分区文件烧录_技术报告

SPI_NAND分区文件烧录_技术报告

同系列 · 调试&解决方案
扫码打开本页
微信扫码

基于 SFLY SP32 编程器的 SPI-NAND 分区文件烧录

技术报告 · MultiFileConfig 制作分区 .ini + SP32SW 加载烧录,覆盖 128KB 块偏移量与 Spare/OOB 选项 | 编制日期 2026-10-14 | 版本号 Rev 1.0

2
阶段
A 配 .ini + B 烧录
Block Offset
分区定位
地址 ÷ 块大小
2KB / 2KB+64
页大小选项
是否带 OOB/ECC
SP32SW
V1.47+
SP325/SP328/SP328P
本文解决什么嵌入式产品通常把 SPI-NAND 按功能切成多个分区(u-boot、内核、根文件系统、应用数据、配置区等),每个分区对应一份独立的 .bin 镜像。SFLY SP32 系列编程器配套的 MultiFileConfig 工具负责把这些分区文件和它们的起始位置打包成一份 .ini 配置文件;SP32SW 烧录软件加载这份 .ini 后,自动把各分区写到 SPI-NAND 的对应位置。本文把这条链路完整讲清楚,包括 Block Offset 计算、烧录页大小选择、NAND 烧录选项核对、以及 XTX 存储的适配建议。
结论Block Offset = 分区起始地址 ÷ 块大小;先在 MultiFileConfig 中为每个 .bin 填好 Block Offset 与烧录页大小(2KB / 2KB+64),再让 SP32SW 加载 .ini 即可一次性烧录所有分区——分区表、坏块策略、片内 ECC 等参数自动按 .ini 导入。

1 概述

嵌入式 SPI-NAND 通常按「分区」组织镜像,本文讲清楚怎么一次性把多个分区烧到正确位置。

在嵌入式 Linux / RTOS 产品中,SPI-NAND Flash 通常会被划分为多个逻辑分区,每个分区承担一种职责——例如 u-boot、kernel、rootfs、data/app、config。每个分区对应一份独立的烧录文件(镜像 .bin),它们必须被写到 NAND 物理空间的指定位置才能正常启动运行。

SFLY SP32 系列编程器(SP325 / SP328 / SP328P)配套的工具链把这件事拆成两段:

  • 阶段 A(离线制作):用 MultiFileConfig 工具把所有分区文件连同它们的Block Offset(块偏移量)和烧录页大小打包成一份 .ini 配置文件;
  • 阶段 B(产线烧录):在 SP32SW V1.47 或以上版本中加载这份 .ini,编程器自动按分区表写入 NAND。
适用范围本方案适用于分区模式项目——每个分区对应一个独立的 .bin 文件。若项目是基于海思(HiSilicon)平台的SPI-NAND 烧录,请参考海思平台专项文档(详见附录)。
SPI-NAND 分区文件烧录整体流程阶段 A · 用 MultiFileConfig 制作分区配置文件(.ini)① 新建配置选保存路径② 选配置类型NAND 分区(块偏移量)③ 增加文件加入各分区 .bin 镜像④ 设置 Block Offset分区地址 / 块大小⑤ 设置烧录页大小2KB 或 2KB+64(OOB)⑥ 保存 .ini供 SP32SW 加载产物:分区配置文件 ex1.ini阶段 B · 用 SFLY SP32SW 加载 .ini 并执行烧录① 选 SPI-NAND 型号如 W25N01GV② 加载 .iniex1.ini③ 自动导入分区表Start Block / Last Block④ 核对烧录选项页大小 / ECC / 坏块策略⑤ 执行烧录Program + Verify
图 1 · 整体流程:从分区配置到实际烧录的两阶段

来源:整理自公开技术资料

2 准备工作与工具链

动手前确认硬件、软件、辅助工具三类资源齐备并匹配。

2.1 硬件:SFLY SP32 系列编程器

型号形态适用场景
SP32SW软件名称(编程器上位机程序)V1.47 或以上版本
SP325编程器硬件小批量/单台 SPI-NAND 烧录
SP328编程器硬件产线批量烧录(8 工位可选)
SP328P编程器硬件(带 UID 加密)需要 UID 安全加密的产线

2.2 软件版本

  • SP32SW V1.47 或以上版本——过低版本不识别新分区格式。
  • MultiFileConfig(推荐 V1.7 或以上)——SFLY 官方离线配置工具,用于生成 .ini 分区配置。

2.3 典型文件清单

一个典型的 SPI-NAND Linux 项目里 MultiFileConfig 需要管理的文件:

文件名典型大小所在分区起始(示例)说明
config.bin≈ 128KB0x4800000出厂配置 / 默认参数
u-boot.bin≈ 256~512KB0x000000引导加载器
log.bin≈ 数 MB—日志分区(可选)
rootfs.bin≈ 几十~上百 MB0x800000根文件系统镜像
uImage.bin≈ 几 MB0x100000内核映像
版本对齐SP32SW 版本必须 ≥ V1.47,且与 MultiFileConfig 版本兼容;过低版本可能解析 .ini 失败或 Block Offset 单位错误。产线烧录前先做小批量验证。

3 用 MultiFileConfig 制作分区配置

本阶段产出一份 .ini 文件,包含分区表、Block Offset、烧录页大小等所有烧录参数。

3.1 新建配置

打开 MultiFileConfig 工具,点击左上角「新建配置」按钮,工具进入空白编辑态(图 2)。

MultiFile Config V1.6 主界面截图,标注新建配置按钮
图 2 · MultiFileConfig 主界面:点击「新建配置」进入空白状态

来源:SFLY MultiFileConfig 工具界面

3.2 选择保存目录与文件名

弹出「另存为」对话框,选择保存目录(建议与 .bin 镜像同目录)并命名(图 3)。

另存为对话框截图,选择 ex1.ini 路径
图 3 · 选择配置文件保存目录并命名(建议与镜像同目录)

来源:SFLY MultiFileConfig 工具界面

随后弹出「配置类型」对话框,选中「NAND Flash 分区文件(块偏移量)」(图 4),这是 SPI-NAND 分区模式专用的格式。

配置类型对话框截图,选中 NAND Flash 分区文件
图 4 · 「配置类型」对话框:选 NAND Flash 分区文件(块偏移量)

来源:SFLY MultiFileConfig 工具界面

3.3 增加分区镜像文件

点击「增加文件」按钮(主界面右上方),在文件对话框中多选所有分区的 .bin 镜像(图 5)。

MultiFileConfig 主界面叠加文件选择对话框截图,多选 config/log/rootfs/u-boot/uImage .bin
图 5 · 点击「增加文件」多选所有分区 .bin 镜像

来源:SFLY MultiFileConfig 工具界面

3.4 设置 Block Offset(块偏移量)

双击某个文件所在行,弹出「File Item」编辑框,输入该分区的 Block Offset(图 6)。

支持 DEC(十进制)与 HEX(十六进制)切换;填入数值 = 分区起始字节地址 ÷ 块大小,具体计算见 第 4 章。

File Item 编辑对话框截图,输入块偏移量
图 6 · 双击文件名设置 Block Offset(DEC/HEX 可切换)

来源:SFLY MultiFileConfig 工具界面

3.5 设置烧录页大小

在主界面上方「烧录页大小」下拉框中选择页大小(决定是否烧录 Spare/OOB 区),所有文件配置完成后点击「保存配置」(图 7)。

MultiFileConfig 主界面截图,5 个文件已配置完成
图 7 · 主界面:所有文件已配置 + 烧录页大小已选 + 文件列表已显示 Block Offset/大小/占用块数

来源:SFLY MultiFileConfig 工具界面

关键:烧录页大小必须与文件数据匹配若选 2KB(含 Spare):文件必须包含 OOB 数据,文件大小 = 页数 × (2KB+64/128/...)。若 .bin 是纯用户数据(不含 OOB),应选 2KB;若文件已包含 OOB,必须选 2KB+64 等带 Spare 的选项,否则数据错位或烧录失败。

4 Block Offset 计算原理

Block Offset 是分区定位的核心参数——填错则分区被写到错误位置,系统无法启动。

Block Offset(块偏移量 / 块编号)的计算式是:

公式Block Offset(块编号)= 分区起始字节地址 ÷ 块大小(字节)

示例(按原文给出的样例):

  • 分区起始地址:0x100000(1MB)
  • 块大小:128 KB(131072 字节)
  • Block Offset = 0x100000 ÷ (128 × 1024) = 1048576 ÷ 131072 = 8
Block Offset = 分区起始字节地址 ÷ 块大小(块编号)公式Block Offset(块编号)= 分区起始地址 (Byte) ÷ 块大小 (Byte)例: 0x100000 ÷ (128 × 1024) = 1048576 ÷ 131072 = 8u-bootblk #0kernelblk #8rootfsblk #40data/appblk #136configblk #648块大小 = 128KB(示例);条形按视觉宽度排布,数字与块数才是真实比例MultiFileConfig 中实际填写的 Block Offset:分区起始字节地址块大小Block Offset(DEC)Block Offset(HEX)u-boot0x000000128KB00x000kernel0x100000128KB80x008rootfs0x500000128KB400x028data/app0x1100000128KB1360x088
图 8 · Block Offset 公式与分区映射(5 个分区示意)

来源:整理自公开技术资料

4.1 Block Offset 的本质

SPI-NAND 以「块(Block)」为单位擦除、以「页(Page)」为单位读写;Block Offset 表示该分区从第几块开始写,编程器按此把对应 .bin 烧到物理上正确的块位置。一个典型嵌入式项目里 Block Offset 通常是这样的分布:

分区DECHEX说明
u-boot00x000起始块;引导加载器,最先运行
kernel80x008示例值:起始地址 0x100000 ÷ 128KB
rootfs160x010示例值:起始地址 0x200000 ÷ 128KB
data/app640x040示例值:起始地址 0x800000 ÷ 128KB
config5760x240示例值:起始地址 0x4800000 ÷ 128KB
DEC 与 HEX 别混用MultiFileConfig 中 DEC/HEX 可切换;切换后数值会被重新解析为另一种进制。例如填了 16 (DEC),切到 HEX 后不会变成 0x16,而是直接以 十进制 16 显示为 0x10。建议全程只用一种进制(推荐 HEX),避免来回切换误读。
Block Offset 填错的代价填大 → 该分区写到已被别的分区占用的位置,覆盖前一个分区的尾部,前一分区文件损坏;填小 → 该分区之前留出未使用空白块(不致命但浪费)。极端情况下偏移量严重错误会导致 u-boot 找不到内核而无法启动。量产前务必用 读回比对验证每个分区的实际落点。
相关报告 · 交叉引用 1 器件全部展开收起 ▾
点开类目即可展开:具体文档 / 章节(点章直接跳转到该章)
SPI NAND
电路设计指南
软件设计规范
Linux 驱动开发
样机问题排查
量产问题排查4
全志平台 SPI NAND NOR
章节(点章跳转,共 11 章)
海思平台 SPI NAND 量产常见失败
章节(点章跳转,共 11 章)
烧录成功但不开机 SPI NAND
章节(点章跳转,共 12 章)
瑞芯微平台 SPI NAND eMMC
章节(点章跳转,共 11 章)
系统设计指南2