简介
在MDK的Debug界面下的Flash Download可以选择芯片的编程算法,在安装了芯片包之后可以直接得到目标的编程算法文件,但是对于芯片包的开发者或者有独特的下载需求(校验),这个时候就需要去编写编程算法文件。
编程算法是一段程序,主要功能是擦除相应的内存块,并将程序写入到相应的内存区域上去。在点击下载按钮的时候,这段程序会被先下载到目标芯片的RAM上,然后才会通过它,将用户写的程序写入到指定的内存区域内。
通过SWD接口协议下载一段下载算法,然后只需要把固件的数据文件直接下载到RAM中,下载算法会自动运行,边接收固件边写入FLASH,实现一个完整的烧录过程。
如何实现一个自己的编程算法?
加载工程模板
在MDK安装路径下有一个编程算法的工程模板(D:\Keil_v5\ARM\Flash_Template)
打开工程,里面主要有两个文件,分别是FlashPrg.c和FlashDev.c。
实现设备相关的结构体
在FlashDev.c中主要实现了一个设备相关的结构体,需要根据目标的Flash情况去实现。
例如STM32F103实现如下
实现FlashPrg.c中与Flash编程相关的函数
在FlashPrg.c中实现了与Flash编程相关的函数
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"
再通过FlashAlgo开源库进行文件转换就能得到离线下载的编程算法文件了,参考该文献C语言解析FLM(ELF)格式文件可以得到转换工具。
参考资料
参考文献:
MDK程序下载 —- FLM文件
怎么样实现烧写算法FLM文件