引言
在嵌入式應(yīng)用系統(tǒng)中,越來越多的應(yīng)用需要擴展外部 Flash 來滿足存儲需求,例如GUI 的應(yīng)用,需要將視頻、圖片、字體等素材存儲在外部 Flash。對于 SPI、FMC、FSMC、QSPI、OCTOSPI、SDMMC 等接口存儲器,需要一個 Flash Loader,把資源下載到外部 Flash。在 STM32CubeProgrammer 安裝目錄的“bin/ExternalLoader”目錄下,ST 提供了官方開發(fā)板對應(yīng)的 Flash Loader,也就是 stldr 文件。但官方提供的 FlashLoader 數(shù)量有限,不能完全滿足用戶需求,需要用戶根據(jù)自己的 MCU 型號、Flash 類型,開發(fā)自己的 Flash Loader。
ST 的 X-Cube-DISPLAY 是 STM32Cube 擴展包,3.0 版本提供了 SPI/QSPI 接口的MX25L6433F 的 Flash Loader 的源碼工程,用戶可以基于此進行自己 Flash Loader 的開發(fā)。本文檔就是根據(jù) X-CUBE-DISPLAY 3.0 所提供的 Flash Loader 工程,以NUCLEO-STM32G474+GFX01M2 開發(fā)板為例,介紹了 STM32CubeIDE、KEIL、IAR等不同編譯器利用 X-CUBE-DISPLAY 所提供的 API 來生成外部 Flash Loader 的方法。
Flash Loader 的開發(fā)過程
參考 ST 在 X-CUBE-DISPLAY 3.0.0 所提供的 Flash Loader 工程,外部 Flash Loader的開發(fā)過程主要包括以下 3 步。
(1)更新 Dev_Inf.c 中的存儲器芯片信息。
(2)重寫 Loader_Src.c 中的相關(guān)接口函數(shù)。
(3)更改輸出文件名。
項目配置好后編譯整個 Flash Loader 項目,將生成一個 ELF 文件,文件的擴展名取決于所使用的編譯器,Keil 的為.axf,EWARM 的為.out,STM32CubeIDE 的為.elf,通過編譯后處理指令更改為 stldr 擴展名的文件,將該 stldr 文件復(fù)制到“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。
小結(jié)
本文結(jié)合 X-Cube-DISPLAY 3.0 軟件包中的示例,介紹了利用 X-CUBE-DISPLAY API進行 Flash Loader 的方法,如果用戶選擇的 Flash 是 MX25L6433F 這款 Flash,那么可以參照此方法,來快速開發(fā)自己的 Flash Loader,如果所選的 Flash 不是MX25L6433F,也可以參照此方法,重新編寫對應(yīng)存儲器的驅(qū)動來開發(fā)對應(yīng)的 FlashLoader。