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

本文介绍了如何编写和使用编程算法文件(FLM),特别是针对STM32单片机。内容包括理解编程算法的作用,使用MDK的工程模板创建FlashPrg.c和FlashDev.c文件,实现擦除、编程和验证功能,以及如何将生成的.axf文件转换为.FLM文件用于离线烧录。同时提到了FlashAlgo开源库在文件转换过程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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编程相关的函数

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:待烧写数据

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

cmd.exe /C copy "Objects\%L" ".\@L.FLM"

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

参考文献:MDK程序下载 ---- FLM文件怎么样实现烧写算法FLM文件

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值