1、引言
一般情況下,IDE 工具都自帶了芯片內(nèi)部 flash 的燒寫算法。而實(shí)際項(xiàng)目中往往會(huì)有外擴(kuò) flash 的需求,在調(diào)試或下載程序時(shí),燒寫外部 flash 則需要額外的 flashloader 程序支持。本文簡(jiǎn)要介紹如何在 IAR 工具中制作 flashloader 來(lái)燒寫外部 flash 的原理及實(shí)現(xiàn)。
2、IAR flashloader 原理
IAR 燒寫芯片 flash 過(guò)程,是由 C-SPY 調(diào)試器與 flashloader 來(lái)完成。Flashloader 是IAR 為 C-SPY 調(diào)試器開(kāi)發(fā)的一個(gè)可執(zhí)行程序,運(yùn)行在 RAM 中。在 IAR 調(diào)用調(diào)試器時(shí)需要先將 flashloader 下載到目標(biāo)芯片的 RAM 中,再將要下載的文件加載到 RAM 緩存中,由 C-SPY 通過(guò)指令啟動(dòng) flashloader 程序,然后 flashloader會(huì)讀取編程數(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 來(lái)測(cè)試。首先創(chuàng)建測(cè)試工程,實(shí)現(xiàn) norflash 程序的讀、寫、擦除等基本操作,驗(yàn)證通過(guò)后,封裝到xspi_norflash_api.c 文件中。
然后將 FlashSTM32H7xx_QSPI 目錄拷貝出來(lái),替換并實(shí)現(xiàn) flash 初始化、擦除、寫的接口,最終生成.out 文件。
4、測(cè)試
在 CubeH7 例程中,選擇 ExamplesGPIOGPIO_EXTI 例程,并配置一些數(shù)據(jù)保存在外部 flash 中。若測(cè)試本文附件 GPIO_EXTI-Test-IAR-flashloader.7z,請(qǐng)將此文件解壓到 STM32Cube_FW_H7_V1.11.1ProjectsNUCLEO-H743ZIExamplesGPIO目錄進(jìn)行測(cè)試。編輯.board 及.flash 文件,將這些文件保存到 GPIO_EXTI 例程的 EWARM 目錄下,并配置 IAR 工程屬性,在 Debugger – Download 下,勾選 Use flash loader(s)與Override default .board file,配置 IAR 使用 STM32H743-Nucleo_QSPI.board 來(lái)進(jìn)行燒寫內(nèi)部與外部 flash,最后完成燒寫測(cè)試。
5、小結(jié)
本文通過(guò)實(shí)例介紹了基于 STH32H743 Nucleo 板有關(guān) IAR 外部 flashloader 的制作與使用方法。如果客戶需要用 IAR 燒寫外部 flash,可參考本文方法及例程。