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