前言
在使用Keil的时候,我们一般会通过一个下载器与目标芯片连接,这样就可以实现的代码下载或调试。那么下载器是如何将我们的应用程序烧写在我们芯片内部Flash当中的呢,是否可以同样的方式烧录在外部Flash上呢?这是此片文章所要说明的。
MDK下载算法原理
通过MDK创建一批与地址信息无关的函数,实现的功能主要有初始化,擦除,编程,读取,校验等,然后MDK调试下载阶段,会将算法文件加载到芯片的内部RAM里面(加载地址可以通过MDK设置),然后MDK通过与这个算法文件的交互,实现程序下载,调试阶段数据读取等操作。
主要流程图如下:
- 加载算法到芯片RAM。
- 执行初始化函数Init。
- 执行擦除操作,根据用户的MDK配置,这里可以选择整个芯片擦除或者扇区擦除。
- 执行Uinit函数。
- 操作完毕。
制作烧录算法(FLM文件)步骤
- 将ARM:CMSIS Pack文件夹(通常是C:\Keil\ARM\Pack\ARM\CMSIS\ version \Device_Template_Flash)中的工程复制到一个新文件夹中,取消文件夹的只读属性,重命名项目文件NewDevice.uvprojx以表示新的flash 设备名称,例如MyDevice.uvprojx。
- 打开工程,从工具栏中,使用下拉选择目标来选择处理器架构。
- 打开对话框Project - Options for Target - Output并更改Name of Executable字段的内容以表示设备,例如MyDevice。
- 调整文件FlashPrg中的编程算法。
- 调整文件FlashDev中的设备参数。
- 使用Project - Build Target生成新的 Flash 编程算法。
注意此方法制作的烧录算法是无法回读FLASH的数据的,若想实现相关功能,可以使用Segger官方的烧录算法的工程,IDE使用的是SEGGER的Embedded Studio。
应用案例介绍
首先将工程copy出来,并将工程重新命名整理好,如图所示:
首先可以先测试一下能否正常,读取,写入,擦写FLASH。这些验证完成后,首先现在FlashDev.c上,设置修改好相关参数:
下一步,将相关接口函数实现分别为Init、EraseChip、EraseSector、ProgramPage、Verify
编译完成后将生成的.axf文件改成.flm的文件,至此烧录算法制作完成。
最后只需要在Jflash/keil测试一下能否正常烧录程序即可。