跳转到内容

SPI NOR 布局与备份

板载 NOR Flash 共 16 MiB(地址 0x000000–0xFFFFFF),是系统资源:启动加载器、固件和应用都在里面。写之前请先看一眼自己想覆盖的范围里有什么,并先备份。

进入 FEL 后:

终端窗口
xfel spinor read 0x0 0x1000000 neko-backup.bin
# 或
rfel spinor read 0x0 0x1000000 neko-backup.bin

保存好备份文件和它的 SHA-256,不要覆盖上一次的备份。

恢复:

终端窗口
xfel spinor write 0x0 neko-backup.bin

写完回读校验,再复位。

写入前后都应该核对 SHA-256。

平台命令
Windows PowerShellGet-FileHash -Algorithm SHA256 <文件>
Linuxsha256sum <文件>;对照校验表:sha256sum -c SHA256SUMS
macOSshasum -a 256 <文件>;对照校验表:shasum -a 256 -c SHA256SUMS

Flash 的划分取决于你装的是哪套软件。同一块板子可以有以下几种布局之一,它们互相不兼容,换用时需要重新写入引导部分。

组件NOR 偏移本布局预留载入 RAM 地址
SyterKit0x00000064 KiB0x00020000
设备树0x010000256 KiB0x40f40000
RustSBI0x050000512 KiB0x40f80000
Asterinas0x0d00005 MiB(到 initramfs 之前)0x40000000
initramfs0x5d00001 MiB0x40500000

完整镜像写入 0x000000..0x6d0000;0x6d0000..0x1000000 不会被碰到。详见 RustSBI + Asterinas。

组件NOR 偏移本布局预留载入 RAM 地址
SyterKit0x00000064 KiB0x00020000
设备树0x010000256 KiB0x40f40000
OpenSBI fw_jump0x050000512 KiB0x40f80000
Linux Image0x0d00006 MiB0x40000000
SquashFS 根文件系统0x6d0000到 0xf00000(约 8.2 MiB)从 MTD 挂载
JFFS2 overlay0xf000001 MiB从 MTD 挂载

完整镜像覆盖整片 16 MiB,包括 overlay 分区,所以写入会丢掉板上已经持久化的改动。详见 预编译镜像。

内容NOR 偏移
SyterKit 加载器(三份)0x000000 / 0x010000 / 0x020000
已保存的 Flash 采样点参数0x02f000
系统程序头页(UF2 下载器)0x030000
应用头页(Zephyr 应用)0x200000(最大约 0x4CF000 字节)

详见 UF2 拖放烧录。

  1. 已经备份整片 Flash,备份文件的 SHA-256 已记录。
  2. 要写的地址范围没有压到你想保留的数据。
  3. 写入后回读并比较 SHA-256,一致后再复位。
  4. 失败(命令报错或校验不一致)时,先解决问题再启动,不要强行复位。