1、引言
一般情况下,IDE 工具都自带了芯片内部 flash 的烧写算法。而实际项目中往往会有外扩 flash 的需求,在调试或下载程序时,烧写外部 flash 则需要额外的 flashloader 程序支持。本文简要介绍如何在 IAR 工具中制作 flashloader 来烧写外部 flash 的原理及实现。
2、IAR flashloader 原理
IAR 烧写芯片 flash 过程,是由 C-SPY 调试器与 flashloader 来完成。Flashloader 是IAR 为 C-SPY 调试器开发的一个可执行程序,运行在 RAM 中。在 IAR 调用调试器时需要先将 flashloader 下载到目标芯片的 RAM 中,再将要下载的文件加载到 RAM 缓存中,由 C-SPY 通过指令启动 flashloader 程序,然后 flashloader会读取编程数据并写入到目标芯片中,完成目标芯片的擦除和写入。
3、下载算法制作
在 IAR 安装目录中,flashloader 工程要使用的框架文件在以下目录:Embedded Workbench 9.1armsrcflashloaderframework2其中,flash_loader.c, flash_loader.h, flash_loader_asm.s, flash_loader_extra.h 这四个文件是供 C-SPY 调用的,不用去修改这些文件内容。只用修改 template 文件夹内的flash_loader_ram.c,实现相应的 FlashInit, FlashWrite, FlashErase 函数即可。
在实际中,也可以直接使用 Embedded Workbench 9.1armsrcflashloaderST 目录下已有的例程,比如 FlashSTM32H7xx_QSPI 目录就是 STM32H7 板上实现 QSPIflashloader 的例程。
这里选用 STM32H743_Nucleo 板,外接 W25Q128 的 norflash 来测试。首先创建测试工程,实现 norflash 程序的读、写、擦除等基本操作,验证通过后,封装到xspi_norflash_api.c 文件中。
然后将 FlashSTM32H7xx_QSPI 目录拷贝出来,替换并实现 flash 初始化、擦除、写的接口,最终生成.out 文件。
4、测试
在 CubeH7 例程中,选择 ExamplesGPIOGPIO_EXTI 例程,并配置一些数据保存在外部 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 来进行烧写内部与外部 flash,最后完成烧写测试。
5、小结
本文通过实例介绍了基于 STH32H743 Nucleo 板有关 IAR 外部 flashloader 的制作与使用方法。如果客户需要用 IAR 烧写外部 flash,可参考本文方法及例程。