[应用相关] Keil Flash的下载算法

[复制链接]
1117|1
 楼主| tpgf 发表于 2023-9-20 13:10 | 显示全部楼层 |阅读模式
工具/原料
Keil uVision

ULINK2仿真器

方法/步骤
打开Keil安装所在文件夹,如图示路径,你可以看到算法存储位置,也就是说你通过ADD按钮所选择的程序来自于这里,但是这个文件是如何来的呢?

33779650a7ebb09168.jpg

拖动滚动条,可以找到这样一个文件夹,如图示,打开它发现一个Keil工程,这就是flash算法的源码。

4328650a7eb4609d3.jpg
36711650a7eaf2284f.jpg


打开这个工程,工程里面主要是两个C file,注意图中标示。其中FlashDev.c文件顾名思义是设备Flash的接口定义,我们可以看到里面有STM32F0xx系列的接口。

63103650a7ea5378a2.jpg

任意截图一例如下图,这是一个结构体,右边有相应的注释。从注释上看,Device Name是可以更改,这个也就是你点击ADD按钮时所呈现的名字。接下来有Device start address和Device size。继续定义programming page size,初始化内容填充值,一个page下载的timeout,擦除一个sector的timeout。 sector size等,看起来应该很清晰明白。

71869650a7e9eb9a86.jpg

有了这些接口定义就对flash本身有了很清楚的了解,我们在看FlashPrg.c文件。这是算法主文件。文件的开头是一些结构体和宏的定义。请仔细阅读你所选择的芯片的flash部分寄存器定义,你就可以找到。

708650a7e9789511.jpg

接下来可注意到下面有不同的函数定义,Init()函数很显然是对flash的一个初始化,仔细阅读芯片specification即可知道。对应的是UnInit()。你还可以看到int EraseChip (void) , int EraseSector (unsigned long adr),int ProgramPage (unsigned long adr, unsigned long sz, unsigned char *buf), 是不是很熟悉的感觉?

17118650a7e9160e01.jpg

让我们再次回顾下图中蓝色标注部分,你可看到其实在下载之初你已经选择过类似的接口,下载过程中将会调用出现在该文件中的程序,而如果你自己编写,就只要替换其中的代码即可,接口Keil已经为你准备完毕。如何编写,那么清仔细阅读相应flash controller章节的定义。
11092650a7e88daf38.jpg

————————————————
版权声明:本文为CSDN博主「xiaohaolaoda」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/xiaohaolaoda/article/details/132691713

AloneKaven 发表于 2023-9-20 21:55 | 显示全部楼层
可不可以写自己的算法啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2385

主题

17641

帖子

21

粉丝
快速回复 在线客服 返回列表 返回顶部