更进一步的了解Keil Flash的下载算法

  • 原创
  • |
  • 浏览:3713
  • |
  • 更新:

前面提到了通用算法的选择,那么问题来了,这个算法文件如何来的呢?如果你所用的MCU不是默认支持的品牌,如何编写属于自己的算法呢?

更进一步的了解Keil Flash的下载算法

工具/原料

  • Keil uVision
  • ULINK2仿真器

方法/步骤

  1. 1

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

    更进一步的了解Keil Flash的下载算法
  2. 2

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

    更进一步的了解Keil Flash的下载算法
    更进一步的了解Keil Flash的下载算法
  3. 3

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

    更进一步的了解Keil Flash的下载算法
  4. 4

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

    更进一步的了解Keil Flash的下载算法
  5. 5

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

    更进一步的了解Keil Flash的下载算法
  6. 6

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

    更进一步的了解Keil Flash的下载算法
  7. 6
    本页面未经授权抓取自百度经验
  8. 7

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

    更进一步的了解Keil Flash的下载算法
  9. 8

    到此为止,对于如何编写属于自己的flash算法心里应该很清楚了,如有疑问请留言。

    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部