编写FLM编程算法文件(制作离线烧录器的OPT文件)

  目录

简介

在MDK的Debug界面下的Flash Download可以选择芯片的编程算法,在安装了芯片包之后可以直接得到目标的编程算法文件,但是对于芯片包的开发者或者有独特的下载需求(校验),这个时候就需要去编写编程算法文件。
MDK选择芯片的编程算法

编程算法是一段程序,主要功能是擦除相应的内存块,并将程序写入到相应的内存区域上去。在点击下载按钮的时候,这段程序会被先下载到目标芯片的RAM上,然后才会通过它,将用户写的程序写入到指定的内存区域内。

通过SWD接口协议下载一段下载算法,然后只需要把固件的数据文件直接下载到RAM中,下载算法会自动运行,边接收固件边写入FLASH,实现一个完整的烧录过程。
SWD接口协议下载算法流程

如何实现一个自己的编程算法?

加载工程模板

在MDK安装路径下有一个编程算法的工程模板(D:\Keil_v5\ARM\Flash_Template)
MDK安装路径的编程算法模板

打开工程,里面主要有两个文件,分别是FlashPrg.c和FlashDev.c。

实现设备相关的结构体

在FlashDev.c中主要实现了一个设备相关的结构体,需要根据目标的Flash情况去实现。
设备结构体

例如STM32F103实现如下
STM32F103实现

实现FlashPrg.c中与Flash编程相关的函数

在FlashPrg.c中实现了与Flash编程相关的函数
FlashPrg.c实现

1. int Init(unsigned long adr, unsigned long clk, unsigned long fnc);

负责FLASH器件的初始化工作,其中:
adr:设备首地址
clk:时钟频率
fnc:要执行的flash操作,包括Erase、Program、Verify

2. int EraseChip(void);

擦除整块flash

3. int EraseSector(unsigned long adr);

擦除adr所指定地址处的整个sector

4. int ProgramPage(unsigned long adr, unsigned long sz, unsigned char *buf);

对flash进行烧写操作,其中:
adr:待烧写地址
sz:待烧写数据长度
buf:待烧写数据

FLM文件的获取及使用

编译工程文件,在输出目录下即可看到*.axf文件,工程中的*.axf文件跟*.FLM文件相同,只需将后缀.axf修改为.FLM,然后复制到MDK安装目录的ARM/FLASH下,就能在选项卡里选择自己的编程算法文件了。
cmd.exe /C copy "Objects\%L" ".\@L.FLM"
FLM复制

再通过FlashAlgo开源库进行文件转换就能得到离线下载的编程算法文件了,参考该文献C语言解析FLM(ELF)格式文件可以得到转换工具。

参考资料

参考文献:

MDK程序下载 —- FLM文件
怎么样实现烧写算法FLM文件

参考手册:

STM32F10XX闪存编程手册.pdf
STM32中文参考手册_V10.pdf


文章作者: 改变世界
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 改变世界 !
评论