烧录算法制作

前言

在使用Keil的时候,我们一般会通过一个下载器与目标芯片连接,这样就可以实现的代码下载或调试。那么下载器是如何将我们的应用程序烧写在我们芯片内部Flash当中的呢,是否可以同样的方式烧录在外部Flash上呢?这是此片文章所要说明的。

MDK下载算法原理

通过MDK创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后MDK调试下载阶段,会将算法文件加载到芯片的内部RAM里面(加载地址可以通过MDK设置),然后MDK通过与这个算法文件的交互,实现程序下载,调试阶段数据读取等操作。

主要流程图如下:

  • 加载算法到芯片RAM。
  • 执行初始化函数Init。
  • 执行擦除操作,根据用户的MDK配置,这里可以选择整个芯片擦除或者扇区擦除。
  • 执行Uinit函数。
  • 操作完毕。

制作烧录算法(FLM文件)步骤

  1. 将ARM:CMSIS Pack文件夹(通常是C:\Keil\ARM\Pack\ARM\CMSIS\ version \Device_Template_Flash)中的工程复制到一个新文件夹中,取消文件夹的只读属性,重命名项目文件NewDevice.uvprojx以表示新的flash 设备名称,例如MyDevice.uvprojx。
  2. 打开工程,从工具栏中,使用下拉选择目标来选择处理器架构。
  3. 打开对话框Project - Options for Target - Output并更改Name of Executable字段的内容以表示设备,例如MyDevice。
  4. 调整文件FlashPrg中的编程算法。
  5. 调整文件FlashDev中的设备参数。
  6. 使用Project - Build Target生成新的 Flash 编程算法。

注意此方法制作的烧录算法是无法回读FLASH的数据的,若想实现相关功能,可以使用Segger官方的烧录算法的工程,IDE使用的是SEGGER的Embedded Studio。

应用案例介绍

首先将工程copy出来,并将工程重新命名整理好,如图所示:

1721961956259.png

首先可以先测试一下能否正常,读取,写入,擦写FLASH。这些验证完成后,首先现在FlashDev.c上,设置修改好相关参数:

1721962953831.png

下一步,将相关接口函数实现分别为Init、EraseChip、EraseSector、ProgramPage、Verify

1721963680079.png

1721963690639.png

1721963701056.png

1721963715856.png

1721963727905.png

编译完成后将生成的.axf文件改成.flm的文件,至此烧录算法制作完成。

最后只需要在Jflash/keil测试一下能否正常烧录程序即可。

posted @ 2024-07-28 23:34  一月一星辰  阅读(176)  评论(0编辑  收藏  举报