跳至内容
深圳市捷比信实业有限公司 · 产品选型与采购咨询联系业务人员
合金电阻捷比信 · 专业器件主题站

Keil MDK下的串行Flash下载算法设计

大家好,我是the子,是认真从事技术的r子。今天,Pi Ziheng向您介绍了在KeilMDK工具下i.MXRT的串行NORFlash下载算法的设计。在文章“串行NORFlashXIP中的调试原理”中,在i.MXRT硬件产品系列中,Pi Ziheng简要提到了串行NORFlash下载算法的概念,并且没有介绍具体的设计细节。每种关于NORFlash下载算法的IDE /工具每种都有自己的一套设计。尽管基本设计概念相同,但是细节上仍然存在差异。在上一篇文章中,Pi Ziheng介绍了“ J-Link下的算法设计”。今天,Pi Ziheng将讨论KeilMDK下的NORFlash下载算法:1. KeilMDK5对i.MXRT的支持。 KeilμVision可以说是MCU开发人员最熟悉的IDE。顺便说一下,大多数人刚开始学习嵌入式学习MCS-51系列MCU应该使用KeilC51环境(KeilμVision2)。早期的Keil只是一家小型独立软件公司。 ARM在2005年收购了Keil,并在2006年集成了RealView编译器以支持ARM Cortex-M处理器,该处理器后来称为KeilMDK(KeilμVision3)。 KeilμVision5于2013年发布。与KeilMDK4和以前的版本不同,KeilMDK5分为两个部分:MDKCore和SoftwarePacks。 MDKCore主要包括uVision5IDE集成开发环境和ARMCompiler5。软件包可以单独管理(下载,更新,删除)设备支持软件包和中间件更新软件包,而无需替换MDKCore。因此,首次安装的KeilMDK5不直接支持i.MXRT。必须通过SoftwarePacks组件单独安装i.MXRT的相关软件支持包。 2.使用PackInstaller添加新的i.MXRT模型以支持KeilMDK5。默认情况下,PackInstaller集成在KeilMDK5中。您可以直接在IDE中打开其界面,以手动添加所需的MCU主控制软件包。主要有两个软件包:DeviceFamilyPack(DFP)和BoardSupportPack(BSP)。前者支持MCU芯片本身,而后者则支持MCU开发板。如果未主动安装MCU软件包,则在SDK中打开任何例程(以i.MXRT1060为例)时,如果未安装与该例程对应的MCU软件包,则IDE会自动触发安装的包装。必须安装DFP。 BSP取决于您使用的板,Dizi Scale使用官方的i.MXRT1060-EVK,因此您需要手动安装NXP :: EVK-MIMXRT1060_BSP:安装MCU软件包后,SDK项目可以正常编译,然后下载并在Flash中调试。 Piziheng使用NXP的官方EVK。该评估板带有DAPLink调试器。当然,除了板载调试器之外,我们还可以连接外部J-Link调试器。无论在MDK项目选项中选择了哪个调试器,其默认Flash下载算法都是相同的。它们全部来自DFP软件包(Keil_PacksNXPMIMXRT1062_DFP12.2.0armMIMXRT106x_QSPI_4KB_SEC.FLM)。如果默认选择的Flash下载算法文件不适用于您的电路板,则您需要自己提供适当的算法文件(.FLM),并将其放入MDK安装目录(Keil_v5ARMFlash)中,重新打开项目选项,然后新添加的算法将自动刷新到候选算法列表中(还有另一种添加方法,即制作一个完整的DFP软件包,其中包含下载算法。尽管ARM编写了详细的文档,但此方法更适合供芯片制造商使用):获取相应的下载算法文件后,需要检查接下来的两个地址范围,一个是与Flash对应的实际映射地址空间,另一个是下载算法文件以运行RAM地址空间。这一点与上一篇文章中介绍的J-Link算法JLinkDevices.xml文件中需要填写的两个地址空间设计是一致的。 3. NORFlash下载算法设计KeilMDK下的Flash下载算法是开源的,并且有更多详细的文档。这些文档位于arm软件的github主页上。根据这些文件,我们可以基本了解下载算法设计的细节。 3.1下载算法模板项目KeilMDK为Flash下载算法提供了一个基本模板项目。该项目位于Keil_v5ARMFlash _TemplateNewDevice.uvprojx中。该项目仅支持MDK(不支持MDK-Lite)编译。除项目设置外,模板项目仅包含四个One文件:Keil_v5ARMFlashFlashOS.hKeil_v5ARMFlash _TemplateFlashDev.cKeil_v5ARMFlash _TemplateFlashPrg.cKeil_v5ARMFlash _TemplateTarget.lin要获取基本模板项目,我们需要更改