引言
随着用户的应用越来越复杂以及 GUI 等需要大存储空间的需求越来越多,很多时候我们需要将代码或数据放在外扩的 Flash 存储空间。但是这样存在一个外部 Flash 烧写的问题,尤其是在应用调试时,需要将代码或数据烧录到外部 Flash。如果调试工具不能够一键烧录,势必会给调试带来诸多的麻烦。本文以 STM32H750 芯片为例,介绍通过 KEIL制作 QSPI 接口的外部 Flash 下载算法的方法。
MDK 下载算法基础知识
FLASH 编程算法是一种用于擦除应用程序或将应用程序下载到 Flash 的程序代码。MDK 本身支持的各种器件都自带下载算法,存放在 MDK 各种器件的软件包里面,以STM32H7 为例,算法存在于 KeilSTM32H7xx_DFP2.6.0CMSISFlash(软件包版本不同,数字 2.6.0 会不同)。但是,只有 STM32 官方部分开发板提供了算法工程,大多数用户开发板都需要自己编写下载算法。不同的 QSPI-FLASH 的驱动略有差别,因此下载算法也不同。所以,掌握通用的下载算法制作步骤很重要。
MDK 通过创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后在 MDK 调试下载阶段,会将算法文件加载到芯片的内部 RAM 里面(加载地址可以通过 MDK 设置),然后 MDK 通过与这个算法文件的交互,实现程序下载,调试阶段数据读取等操作。
程序擦除操作执行流程
程序烧录操作执行流程
程序校验操作执行流程
MDK 创建下载算法过程通用步骤
添加 QSPI-FLASH 驱动及其有关库函数
算法使用方法
算法生成后,将对应的算法 FLM 文件拷贝到 MDK 安装路径下 C:Keil_v5ARMFlash。
小结
本文介绍了基于 MDK 通用模板和已有工程制作 MDK 下载算法的过程。制作过程很容易造成失败,除了要注意工程中的相关设置以外,建议多参考 ST 官方固件包提供的DEMO,有时可以直接找到对应型号 MCU 的烧写算法 DEMO,如果没有可以参考功能外设相似的 MCU 工程 DEMO,也可以在其 DEMO 上直接修改,主要是替换 QSPI 的驱动(引脚、命令等),还有就是注意自己板子 MCU 的时钟配置,建议直接拷贝可以成功运行工程中的时钟配置。