引言
在嵌入式应用系统中,越来越多的应用需要扩展外部 Flash 来满足存储需求,例如GUI 的应用,需要将视频、图片、字体等素材存储在外部 Flash。对于 SPI、FMC、FSMC、QSPI、OCTOSPI、SDMMC 等接口存储器,需要一个 Flash Loader,把资源下载到外部 Flash。在 STM32CubeProgrammer 安装目录的“bin/ExternalLoader”目录下,ST 提供了官方开发板对应的 Flash Loader,也就是 stldr 文件。但官方提供的 FlashLoader 数量有限,不能完全满足用户需求,需要用户根据自己的 MCU 型号、Flash 类型,开发自己的 Flash Loader。
ST 的 X-Cube-DISPLAY 是 STM32Cube 扩展包,3.0 版本提供了 SPI/QSPI 接口的MX25L6433F 的 Flash Loader 的源码工程,用户可以基于此进行自己 Flash Loader 的开发。本文档就是根据 X-CUBE-DISPLAY 3.0 所提供的 Flash Loader 工程,以NUCLEO-STM32G474+GFX01M2 开发板为例,介绍了 STM32CubeIDE、KEIL、IAR等不同编译器利用 X-CUBE-DISPLAY 所提供的 API 来生成外部 Flash Loader 的方法。
Flash Loader 的开发过程
参考 ST 在 X-CUBE-DISPLAY 3.0.0 所提供的 Flash Loader 工程,外部 Flash Loader的开发过程主要包括以下 3 步。
(1)更新 Dev_Inf.c 中的存储器芯片信息。
(2)重写 Loader_Src.c 中的相关接口函数。
(3)更改输出文件名。
项目配置好后编译整个 Flash Loader 项目,将生成一个 ELF 文件,文件的扩展名取决于所使用的编译器,Keil 的为.axf,EWARM 的为.out,STM32CubeIDE 的为.elf,通过编译后处理指令更改为 stldr 扩展名的文件,将该 stldr 文件复制到“bin/ExternalLoader”目录下就可以被 STM32CubeProgrammer 使用了。
利用 X-Cube-Display API 生成 Flash Loader 的方法
这里参考 X-CUBE-DISPLAY3.0.0ProjectsNUCLEO-WB55RGApplications 目录下的 GFX01M2_FlashLoader 工程的方法,来移植一个 NUCLEO-G474+GFX01M2 的Flash Loader,这是一个 SPI 接口的 NOR FLASH,芯片型号 MX25L6433F。
小结
本文结合 X-Cube-DISPLAY 3.0 软件包中的示例,介绍了利用 X-CUBE-DISPLAY API进行 Flash Loader 的方法,如果用户选择的 Flash 是 MX25L6433F 这款 Flash,那么可以参照此方法,来快速开发自己的 Flash Loader,如果所选的 Flash 不是MX25L6433F,也可以参照此方法,重新编写对应存储器的驱动来开发对应的 FlashLoader。