跳到主要内容

ART-Pi 外部 Flash 擦写

RT-Thread 官方开发板 ART-Pi 上有两片外部 Flash 存储芯片,分别是 16MB 的 W25Q128JV 和 8MB 的 W25Q64JV。其中,W25Q64JV 用于存放应用程序(称为“程序 Flash”),W25Q128JV 用于存放 WiFi 固件、蓝牙固件等,以及作为 OTA 存储区和文件系统(称为“数据 Flash”)。

FLASH(W25Q128JV)分区

为了合理利用 Flash 存储空间,RT-Thread 官方对 W25Q128JV 进行了分区管理,具体空间划分如下:

分区名起始地址分区大小用途说明
wifi_image0512KB保存 wifi 固件
bt_image512 * 1024512KB保存 bt 固件
download1 * 1024 * 10242048KB固件下载分区
easyflash3 * 1024 * 10241024KBeasyflash 参数保存区
filesystem4 * 1024 * 102412MB文件系统分区

ART-Pi 出厂时数据 Flash 中已经刷入相应的数据信息,但有时我们可能意外破坏或擦除上面的数据,这时就需要重新往 Flash 写入数据。为此,官方提供了两个 Flash 的 stldr 下载算法,用户可以通过 STM32Cube Programmer 工具加载下载算法,进行 Flash 读写操作。

STM32CubeProgrammer 下载算法加载

下载算法位于 sdk-bsp-stm32h750-realthread-artpi/debug/stldr 目录。

$ tree
.
├── ART-Pi_W25Q128JV.stldr
└── ART-Pi_W25Q64.stldr

将 ART-Pi_W25Q128JV.stldr 和 ART-Pi_W25Q64.stldr 拷贝到 STM32CubeProgrammer 的外部 flash 算法目录。

  • Windows 目录如:C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin\ExternalLoader
  • Linux 目录如:~/STMicroelectronics/STM32Cube/STM32CubeProgrammer/bin/ExternalLoader

然后打开 STM32CubeProgrammer,点击左下方的“External Loaders”,选择下载算法,点击“Connect”连接 ST-Link 即可。

STM32CubeProgrammer 擦写数据 Flash

ART-Pi_W25Q128JV.stldr 下载算法可以一次性擦除整块 Flash,也可以按 64KB 块大小分别擦除。下面以刷入 WiFi 固件为例进行演示。

注意:数据 Flash 的起始地址是 0x70000000,WiFi 固件分区是第一个分区,所以该分区的偏移地址是 0,因此我们要写入的地址是 0x70000000 + 0(分区偏移)。

WiFi 固件位于 sdk-bsp-stm32h750-realthread-artpi/tools/firmware 目录。

$ tree
.
├── ap6212-bt-image-1.0.rbl
├── ap6212-wifi-image-1.0.rbl
└── Resource_16MB.bin

由于 STM32CubeProgrammer 只能打开 bin 等后缀名的文件,所以要将 ap6212-wifi-image-1.0.rbl 固件文件名后缀改成 bin,即 ap6212-wifi-image-1.0.bin。

点击 STM32CubeProgrammer 左上方的“Erasing & Programming”页面,选择刚刚修改的文件,地址为 0x70000000,点击“Start Programming”按钮开始烧写。

同样,我们可以将蓝牙固件 ap6212-bt-image-1.0.bin 更新到 ART-Pi,写入的地址是 0x70080000

STM32CubeProgrammer 恢复出厂 Flash 固件

出厂 Flash 固件在 sdk-bsp-stm32h750-realthread-artpi/tools/firmware/Resource_16MB.bin 。可以在 STM32CubeProgrammer 使用同样的方法将其烧写到 ART-Pi,写入地址是 0x70000000

因为资源文件较大,下载时间会较长,请耐心等待。