基于 SFLY SP32 编程器的 SPI-NAND 分区文件烧录
技术报告 · MultiFileConfig 制作分区 .ini + SP32SW 加载烧录,覆盖 128KB 块偏移量与 Spare/OOB 选项 | 编制日期 2026-09-21 | 版本号 Rev 1.0
.ini 配置文件;SP32SW 烧录软件加载这份 .ini 后,自动把各分区写到 SPI-NAND 的对应位置。本文把这条链路完整讲清楚,包括 Block Offset 计算、烧录页大小选择、NAND 烧录选项核对、以及 XTX 存储的适配建议。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。
来源:整理自公开技术资料
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 | ≈ 128KB | 0x4800000 | 出厂配置 / 默认参数 |
| u-boot.bin | ≈ 256~512KB | 0x000000 | 引导加载器 |
| log.bin | ≈ 数 MB | — | 日志分区(可选) |
| rootfs.bin | ≈ 几十~上百 MB | 0x800000 | 根文件系统镜像 |
| uImage.bin | ≈ 几 MB | 0x100000 | 内核映像 |
3 用 MultiFileConfig 制作分区配置
本阶段产出一份 .ini 文件,包含分区表、Block Offset、烧录页大小等所有烧录参数。
3.1 新建配置
打开 MultiFileConfig 工具,点击左上角「新建配置」按钮,工具进入空白编辑态(图 2)。
来源:SFLY MultiFileConfig 工具界面
3.2 选择保存目录与文件名
弹出「另存为」对话框,选择保存目录(建议与 .bin 镜像同目录)并命名(图 3)。
来源:SFLY MultiFileConfig 工具界面
随后弹出「配置类型」对话框,选中「NAND Flash 分区文件(块偏移量)」(图 4),这是 SPI-NAND 分区模式专用的格式。
来源:SFLY MultiFileConfig 工具界面
3.3 增加分区镜像文件
点击「增加文件」按钮(主界面右上方),在文件对话框中多选所有分区的 .bin 镜像(图 5)。
来源:SFLY MultiFileConfig 工具界面
3.4 设置 Block Offset(块偏移量)
双击某个文件所在行,弹出「File Item」编辑框,输入该分区的 Block Offset(图 6)。
支持 DEC(十进制)与 HEX(十六进制)切换;填入数值 = 分区起始字节地址 ÷ 块大小,具体计算见 第 4 章。
来源:SFLY MultiFileConfig 工具界面
3.5 设置烧录页大小
在主界面上方「烧录页大小」下拉框中选择页大小(决定是否烧录 Spare/OOB 区),所有文件配置完成后点击「保存配置」(图 7)。
来源:SFLY MultiFileConfig 工具界面
2KB;若文件已包含 OOB,必须选 2KB+64 等带 Spare 的选项,否则数据错位或烧录失败。4 Block Offset 计算原理
Block Offset 是分区定位的核心参数——填错则分区被写到错误位置,系统无法启动。
Block Offset(块偏移量 / 块编号)的计算式是:
示例(按原文给出的样例):
- 分区起始地址:
0x100000(1MB) - 块大小:
128 KB(131072 字节) - Block Offset =
0x100000 ÷ (128 × 1024)=1048576 ÷ 131072= 8
来源:整理自公开技术资料
4.1 Block Offset 的本质
SPI-NAND 以「块(Block)」为单位擦除、以「页(Page)」为单位读写;Block Offset 表示该分区从第几块开始写,编程器按此把对应 .bin 烧到物理上正确的块位置。一个典型嵌入式项目里 Block Offset 通常是这样的分布:
| 分区 | DEC | HEX | 说明 |
|---|---|---|---|
| u-boot | 0 | 0x000 | 起始块;引导加载器,最先运行 |
| kernel | 8 | 0x008 | 示例值:起始地址 0x100000 ÷ 128KB |
| rootfs | 16 | 0x010 | 示例值:起始地址 0x200000 ÷ 128KB |
| data/app | 64 | 0x040 | 示例值:起始地址 0x800000 ÷ 128KB |
| config | 576 | 0x240 | 示例值:起始地址 0x4800000 ÷ 128KB |
16 (DEC),切到 HEX 后不会变成 0x16,而是直接以 十进制 16 显示为 0x10。建议全程只用一种进制(推荐 HEX),避免来回切换误读。u-boot 找不到内核而无法启动。量产前务必用 读回比对验证每个分区的实际落点。5 SPI-NAND 页结构与烧录页大小
理解页结构,才能正确选择「烧录页大小」选项。
SPI-NAND 的物理页(Page)由 Main 区域(用户数据)和 Spare 区域 / OOB(Out-Of-Band,通常用于 ECC 与坏块标记)两部分组成。两段在物理上连续,但软件可选择是否一起烧录。
来源:整理自公开技术资料
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)。
6.2 加载 .ini 分区配置
点击主界面「加载数据…」按钮,在文件对话框中选择由 MultiFileConfig 生成的 ex1.ini(图 10),软件将自动加载所有分区文件并导入分区表、烧录参数。
来源:SFLY SP32SW V1.40 烧录软件界面
6.3 核对 NAND Flash 烧录选项
打开「NAND Flash 烧录选项」对话框,可看到 .ini 自动导入的完整设置(图 11):环块处理方式、烧录页大小、片内 ECC、分区表(Start Block / Last Block / Used Blocks)、坏块标识位置与标识数据、比特容错率、擦除与查空范围等。
来源:SFLY SP32SW V1.40 烧录软件界面
6.4 执行烧录
核对完毕后,按通常方式执行烧录(Program + Verify 流程)。建议先小批量验证(5~10 片)后再正式量产。
7 NAND Flash 烧录选项详解
逐项解释「NAND Flash 烧录选项」对话框中的关键字段,避免误用。
| 字段 | 取值 | 含义 / 建议 |
|---|---|---|
| 环块处理方式 | 分区模式(含跳过坏块) | 按分区表写入,自动跳过坏块——产线首选 |
| 整片擦除+写入 | 全片擦写,无分区表——不推荐(破坏坏块信息) | |
| 仅写入 | 不擦除直接覆盖(仅调试用) | |
| 烧录页大小 | 2KB / 2KB+64 | 必须与 .bin 文件格式匹配(见第 5 章) |
| 4KB / 4KB+128 | 4KB 页 NAND 用 | |
| 烧录时开启片内ECC | 关闭 / 打开 | 若 .bin 已带软件 ECC,关闭;否则打开以启用硬件 ECC |
| 坏块标识位置 | 800h | Spare 区第 0~1 字节为坏块标识(厂商约定) |
| 比特容错率 分组长度 | 512 bytes | 每 512B 数据用 ECC 校验 |
| 比特容错率 最大允许错误 | 2 bits | ECC 能纠正的最大比特错误数 |
| 擦除和查空区块范围 | 所有块 / 用户区 | 默认所有块;按需调整 |
| 不擦除坏块 | 勾选/未勾选 | 勾选 → 保留坏块标记 |
| 将查空失败的块标记为坏块 | 勾选/未勾选 | 勾选 → 烧录前自动重检坏块 |
| 不烧录空白页 | 勾选/未勾选 | 勾选 → 跳过全 0xFF 页,节省时间 |
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 → 实机启动),确认无误后再正式量产。
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 | 分区起始块编号 = 分区起始字节地址 ÷ 块大小 |
| ECC | Error-Correcting Code;NAND 用 ECC 检错/纠错;可软件算或硬件算 |
| 坏块 | 出厂或使用中标记为不可靠的块;SP32SW 烧录时会自动跳过 |
| .ini | MultiFileConfig 输出的分区配置文件;含分区表 + 烧录参数 |
| W25N01GV | Winbond 1Gbit SPI-NAND 示例型号;2KB+64 页、128KB 块(本文示例) |
| MultiFileConfig | SFLY 离线分区配置工具;产 .ini 用 |
| SP32SW | SFLY 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 章节(以正式文档为准)。