1、引言
一般情況下,IDE 工具都自帶了芯片內(nèi)部 flash 的燒寫算法。而實際項目中往往會有外擴 flash 的需求,在調試或下載程序時,燒寫外部 flash 則需要額外的 flashloader 程序支持。本文簡要介紹如何在 IAR 工具中制作 flashloader 來燒寫外部 flash 的原理及實現(xiàn)。
2、IAR flashloader 原理
IAR 燒寫芯片 flash 過程,是由 C-SPY 調試器與 flashloader 來完成。Flashloader 是IAR 為 C-SPY 調試器開發(fā)的一個可執(zhí)行程序,運行在 RAM 中。在 IAR 調用調試器時需要先將 flashloader 下載到目標芯片的 RAM 中,再將要下載的文件加載到 RAM 緩存中,由 C-SPY 通過指令啟動 flashloader 程序,然后 flashloader會讀取編程數(shù)據(jù)并寫入到目標芯片中,完成目標芯片的擦除和寫入。
3、下載算法制作
在 IAR 安裝目錄中,flashloader 工程要使用的框架文件在以下目錄:Embedded Workbench 9.1armsrcflashloaderframework2其中,flash_loader.c, flash_loader.h, flash_loader_asm.s, flash_loader_extra.h 這四個文件是供 C-SPY 調用的,不用去修改這些文件內(nèi)容。只用修改 template 文件夾內(nèi)的flash_loader_ram.c,實現(xiàn)相應的 FlashInit, FlashWrite, FlashErase 函數(shù)即可。
在實際中,也可以直接使用 Embedded Workbench 9.1armsrcflashloaderST 目錄下已有的例程,比如 FlashSTM32H7xx_QSPI 目錄就是 STM32H7 板上實現(xiàn) QSPIflashloader 的例程。
這里選用 STM32H743_Nucleo 板,外接 W25Q128 的 norflash 來測試。首先創(chuàng)建測試工程,實現(xiàn) norflash 程序的讀、寫、擦除等基本操作,驗證通過后,封裝到xspi_norflash_api.c 文件中。
然后將 FlashSTM32H7xx_QSPI 目錄拷貝出來,替換并實現(xiàn) flash 初始化、擦除、寫的接口,最終生成.out 文件。
4、測試
在 CubeH7 例程中,選擇 ExamplesGPIOGPIO_EXTI 例程,并配置一些數(shù)據(jù)保存在外部 flash 中。若測試本文附件 GPIO_EXTI-Test-IAR-flashloader.7z,請將此文件解壓到 STM32Cube_FW_H7_V1.11.1ProjectsNUCLEO-H743ZIExamplesGPIO目錄進行測試。編輯.board 及.flash 文件,將這些文件保存到 GPIO_EXTI 例程的 EWARM 目錄下,并配置 IAR 工程屬性,在 Debugger – Download 下,勾選 Use flash loader(s)與Override default .board file,配置 IAR 使用 STM32H743-Nucleo_QSPI.board 來進行燒寫內(nèi)部與外部 flash,最后完成燒寫測試。
5、小結
本文通過實例介紹了基于 STH32H743 Nucleo 板有關 IAR 外部 flashloader 的制作與使用方法。如果客戶需要用 IAR 燒寫外部 flash,可參考本文方法及例程。