只读分享解决方案文档调试&解决方案📅 2026-09-21🔖 Rev 1.0⏳ 29天有效(至 2026-10-31)
🔧解决方案&应用市场分析 -> 调试&解决方案 -> 系统设计指南 -> SPI_NAND分区文件烧录_技术报告

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

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

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

技术报告 · MultiFileConfig 制作分区 .ini + SP32SW 加载烧录,覆盖 128KB 块偏移量与 Spare/OOB 选项 | 编制日期 2026-09-21 | 版本号 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 找不到内核而无法启动。量产前务必用 读回比对验证每个分区的实际落点。

5 SPI-NAND 页结构与烧录页大小

理解页结构,才能正确选择「烧录页大小」选项。

SPI-NAND 的物理页(Page)由 Main 区域(用户数据)和 Spare 区域 / OOB(Out-Of-Band,通常用于 ECC 与坏块标记)两部分组成。两段在物理上连续,但软件可选择是否一起烧录。

SPI-NAND 物理页结构(Main + Spare/OOB)Main 区(用户数据)2KB / 4KB放文件系统 / 内核 / bootloaderSpare / OOB64 / 128 / 256BECC / 坏块标记选项「2KB」· 只烧 Main 区(用户数据)· 文件不含 OOB/ECC,文件大小 = 页数 × 2KB选项「2KB+64」· 烧 Main + Spare(带 OOB/ECC)· 文件大小 = 页数 × (2KB+64),与硬件一致⚠ 烧录页大小必须与 .bin 文件实际数据格式匹配;含 Spare 时文件必须有 OOB 段,否则数据错位
图 9 · SPI-NAND 页结构与「烧录页大小」选项含义

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

5.1 Main 区

用户可见的数据区,典型大小 2KB 或 4KB。文件系统、内核、bootloader 的实际内容都落在 Main 区。

5.2 Spare 区(OOB)

典型大小 64 字节 / 128 字节 / 256 字节,一般用于存储:

  • ECC 校验数据(硬件或软件 ECC,对 Main 区做检错/纠错);
  • 坏块标记(出厂坏块标记 + 使用过程中新增的坏块标记)。

5.3 烧录页大小选项对照

选项含义适用 .bin常见取值
2KB只烧 Main 区,不写 OOB纯用户数据(不含 ECC/坏块标记)W25N01GV 2KB 页
2KB+64烧 Main + 64B Spare已带 OOB 的镜像W25N01GV 2KB+64 页
4KB只烧 Main 区4KB 页 NAND—
4KB+128烧 Main + 128B Spare带 OOB 的镜像—
4KB+256烧 Main + 256B Spare带 OOB 的镜像部分高密度 SPI-NAND
文件大小自检设了 2KB+64 后,.bin 文件大小应等于 页数 × (2048 + 64) = 页数 × 2112 字节。若实际文件大小不是该值的整数倍,说明文件格式与所选选项不匹配——立即停下来排查,不要继续烧录。

6 用 SFLY SP32SW 执行烧录

第二阶段:在 SP32SW 中加载 .ini,一次性完成所有分区烧录。

6.1 启动与选型

启动 SP32SW V1.47 或以上版本,点击「芯片型号」按钮,在弹出的选型对话框中选择正确的 SPI-NAND 型号(示例:Winbond W25N01GV,1Gbit,2048+64 byte × 64 page × 1024 block)。

型号与芯片容量/页大小强相关选错型号会导致 烧录参数(块大小、页大小、坏块策略)与芯片实际不匹配,进而产生坏块被误判、ECC 错误、写入失败等连锁问题。批量烧录前一定要确认选型正确。

6.2 加载 .ini 分区配置

点击主界面「加载数据…」按钮,在文件对话框中选择由 MultiFileConfig 生成的 ex1.ini(图 10),软件将自动加载所有分区文件并导入分区表、烧录参数。

SP32SW 主界面叠加加载数据对话框,选 ex1.ini
图 10 · SP32SW「加载数据」对话框:选择 .ini 分区配置

来源:SFLY SP32SW V1.40 烧录软件界面

6.3 核对 NAND Flash 烧录选项

打开「NAND Flash 烧录选项」对话框,可看到 .ini 自动导入的完整设置(图 11):环块处理方式、烧录页大小、片内 ECC、分区表(Start Block / Last Block / Used Blocks)、坏块标识位置与标识数据、比特容错率、擦除与查空范围等。

NAND Flash 烧录选项对话框截图,显示分区模式、页大小、分区表
图 11 · 「NAND Flash 烧录选项」:分区模式 + 烧录页大小 + ECC + 分区表

来源:SFLY SP32SW V1.40 烧录软件界面

默认设置需按项目调整上述 .ini 自动导入的选项里,部分默认参数仍需按项目实际参数(页大小、ECC 算法、坏块策略)调整后才能用于量产。建议每次更新 .ini 后都打开本对话框完整核对一遍,不要无脑沿用上一次的设置。

6.4 执行烧录

核对完毕后,按通常方式执行烧录(Program + Verify 流程)。建议先小批量验证(5~10 片)后再正式量产。

7 NAND Flash 烧录选项详解

逐项解释「NAND Flash 烧录选项」对话框中的关键字段,避免误用。

字段取值含义 / 建议
环块处理方式分区模式(含跳过坏块)按分区表写入,自动跳过坏块——产线首选
整片擦除+写入全片擦写,无分区表——不推荐(破坏坏块信息)
仅写入不擦除直接覆盖(仅调试用)
烧录页大小2KB / 2KB+64必须与 .bin 文件格式匹配(见第 5 章)
4KB / 4KB+1284KB 页 NAND 用
烧录时开启片内ECC关闭 / 打开若 .bin 已带软件 ECC,关闭;否则打开以启用硬件 ECC
坏块标识位置800hSpare 区第 0~1 字节为坏块标识(厂商约定)
比特容错率 分组长度512 bytes每 512B 数据用 ECC 校验
比特容错率 最大允许错误2 bitsECC 能纠正的最大比特错误数
擦除和查空区块范围所有块 / 用户区默认所有块;按需调整
不擦除坏块勾选/未勾选勾选 → 保留坏块标记
将查空失败的块标记为坏块勾选/未勾选勾选 → 烧录前自动重检坏块
不烧录空白页勾选/未勾选勾选 → 跳过全 0xFF 页,节省时间
ECC 与坏块策略必须与硬件约定一致ECC 配置和坏块标识位置必须与芯片厂商 datasheet 完全一致(典型值:坏块标识在 Spare 第 0 字节 = 0x00 表示正常、非 0xFF 表示坏块)。若 SP32SW 烧录时启用片内 ECC,但 .bin 里已经算过 ECC,写入后芯片 ECC 校验会失败。两者只能开一边。

8 XTX 适配提示

若用 XTX SPI-NAND 替代本方案示例型号,以下几点需要按 XTX datasheet 单独确认。

  • 型号与命名:以 XTX 正式 datasheet 的「Device List / Ordering Information」为准;不同封装、温度等级、容量档位请勿混用。
  • 页/块结构:常见 XTX SPI-NAND 为 2KB + 64B 或 4KB + 128B/256B 页结构;块擦除大小常 128KB 或 256KB。Block Offset 计算时块大小必须用芯片实际值,不能照搬示例。
  • 坏块标识与 ECC:不同型号的 Spare 区坏块标记字节位置可能不同(如第 0 字节、或第 2048 字节),切勿套用其他厂商的默认值。在 SP32SW 的「NAND Flash 烧录选项」中按 XTX 文档设置。
  • 烧录页大小:按 XTX 芯片 datasheet 的页配置选择 2KB 或 2KB+64,与 .bin 文件格式保持一致。
  • 工具链验证:建议先用 5~10 片小批量验证完整流程(MultiFileConfig → SP32SW → 实机启动),确认无误后再正式量产。
以 datasheet 为准本文给出的具体参数(2KB+64 页、128KB 块、800h 坏块标识位置等)来自原文示例型号 Winbond W25N01GV。XTX 不同型号 SPI-NAND 的页大小、块大小、坏块位置、ECC 算法可能存在差异,任何参数变更前必须以 XTX 正式 datasheet 为准。

9 常见问题与核查清单

量产前逐条确认;踩过的坑提前规避。

9.1 常见问题

现象可能原因排查方向
加载 .ini 后分区表为空.ini 版本与 SP32SW 不兼容升级 SP32SW 至 V1.47+;用最新版 MultiFileConfig 重新生成
烧录后无法启动Block Offset 错位读回比对每个分区的实际起始地址;重算 Block Offset
写入过程中报 ECC 错误ECC 配置与文件格式冲突确认 .bin 是否已带 ECC;只开一边(软件或硬件)
文件大小与预期不符烧录页大小选错检查 .bin 是否含 OOB;选项 2KB vs 2KB+64
跳过坏块异常多环块处理方式不对改用「分区模式(含跳过坏块)」
同一 .ini 烧出来批次间表现不一芯片质量参差 / 擦写策略不当在「不擦除坏块 / 不烧录空白页」等选项上勾选差异

9.2 上线前核查清单

  • 编程器型号(SP325/SP328/SP328P)与烧录软件版本(SP32SW ≥ V1.47)已确认
  • MultiFileConfig 生成的 .ini 文件已校验:每个分区的 Block Offset、烧录页大小、文件名均正确
  • SP32SW 中选用的芯片型号与实物一致(核对 PN、容量、页/块结构)
  • .bin 文件大小 = 页数 × 页大小(2KB / 2KB+64 / 4KB / ...),与所选烧录页大小匹配
  • ECC 与坏块策略与芯片 datasheet 一致;.bin 若已含 ECC,关闭 SP32SW 的片内 ECC
  • 小批量试烧 5~10 片并实机启动验证后再正式量产
  • 烧录工位与设计端的分区表是同一份(避免工程团队和烧录工位各自维护导致不一致)
  • 读回比对:每个分区实际起始块号与 Block Offset 计算结果一致

附录 术语与参考

术语

术语含义
SPI-NAND带 SPI 接口的 NAND Flash;常见封装 SOP-8 / WSON-8;支持页读/写、块擦除、坏块管理
Block / 块擦除单位;典型 128KB 或 256KB
Page / 页读写单位;典型 2KB/4KB Main + 64/128/256B Spare
Main 区页的用户数据区;放文件系统、bootloader、内核等
Spare / OOB页的备份区;用于 ECC、坏块标记;典型 64B/128B/256B
Block Offset分区起始块编号 = 分区起始字节地址 ÷ 块大小
ECCError-Correcting Code;NAND 用 ECC 检错/纠错;可软件算或硬件算
坏块出厂或使用中标记为不可靠的块;SP32SW 烧录时会自动跳过
.iniMultiFileConfig 输出的分区配置文件;含分区表 + 烧录参数
W25N01GVWinbond 1Gbit SPI-NAND 示例型号;2KB+64 页、128KB 块(本文示例)
MultiFileConfigSFLY 离线分区配置工具;产 .ini 用
SP32SWSFLY SP32 系列编程器配套烧录软件;≥ V1.47 支持新分区格式

参考来源

  • 深圳硕飞科技技术文章《SPI-NAND 分区文件烧录》(基于 SFLY SP32 系列编程器、SP32SW V1.47+、MultiFileConfig V1.7+ 工具链)。
  • Winbond W25N01GV 数据手册(示例型号,2KB+64 页 / 128KB 块 / 1Gbit)。
  • SFLY MultiFileConfig V1.7 工具说明(.ini 配置文件结构与字段)。
  • 存储器厂商(含 XTX)SPI-NAND datasheet 的 Page / Block / ECC / Bad block 章节(以正式文档为准)。
说明本文由公开技术文章整理为技术报告,属工程经验总结而非任何厂商官方结论;具体芯片的页/块大小、坏块标识位置、ECC 算法、烧录页大小等参数一律以对应芯片正式 datasheet 为准。