0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

工程师 来源:博客园 作者:痞子衡 2020-10-23 14:30 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是Keil MDK工具下i.MXRT的串行NOR Flash下载算法设计。

在i.MXRT硬件那些事系列之《在串行NOR Flash XIP调试原理》一文中,痞子衡简单提了一下串行NOR Flash下载算法的概念,并没有介绍具体设计细节,关于NOR Flash下载算法每个IDE/工具都有自己的一套设计,虽然基本设计理念是一样的,但是细节方面还是有区别。上一篇痞子衡介绍了《J-Link下算法设计》,今天痞子衡就来细聊Keil MDK下的NOR Flash下载算法:

一、Keil MDK5对i.MXRT的支持Keil μVision可以说是MCU开发者最熟悉的IDE了,大部分人刚开始入行嵌入式学MCS-51系列单片机应该都是用得Keil C51环境(Keil μVision2),早期的Keil还只是一个小型的独立软件公司。2005年ARM收购了Keil,并于2006年集成了RealView编译器开始支持ARM Cortex-M处理器,这便是后来的Keil MDK(Keil μVision3)。

2013年Keil μVision5发布,与Keil MDK4及之前版本不同,Keil MDK5分成MDK Core和Software Packs两部分。MDK Core主要包含uVision5 IDE集成开发环境和ARM Compiler5。Software Packs则可以在不更换MDK Core的情况下,单独管理(下载、更新、移除)设备支持包和中间件更新包。

因此首次安装的Keil MDK5并没有直接支持i.MXRT,需要通过Software Packs组件来单独安装i.MXRT的相关软件支持包。

二、使用Pack Installer添加新i.MXRT型号支持Keil MDK5里默认集成了Pack Installer,在IDE里可以直接打开其界面,手动添加所需的MCU主控相关软件包。软件包主要有两个:Device Family Pack (DFP)和Board Support Pack (BSP) ,前者是对MCU芯片本身的支持,后者是对MCU开发板的支持。

如果你不主动安装MCU软件包也行,当你打开SDK里的任何一个例程(以i.MXRT1060为例),如果该例程对应的MCU软件包没有安装,IDE会自动触发Pack的安装。DFP是必须要安装的,BSP要看你具体使用哪块板卡,痞子衡用得官方i.MXRT1060-EVK,因此还需要再手动安装NXP::EVK-MIMXRT1060_BSP:

安装完MCU软件包后,便可以正常编译SDK工程,然后在Flash下载和调试了。痞子衡使用的是恩智浦官方EVK,板子上自带了DAPLink调试器,当然除了板载调试器,我们也可以外接J-Link调试器,在MDK工程选项里无论选择哪种调试器,其默认Flash下载算法是一样的,都来自于DFP包(\Keil_Packs\NXP\MIMXRT1062_DFP\12.2.0\arm\MIMXRT106x_QSPI_4KB_SEC.FLM)

如果默认选择的Flash下载算法文件不适用你的板子,那么你需要自己提供合适的算法文件(.FLM),并将其放入MDK安装目录下(\Keil_v5\ARM\Flash),重新打开工程选项,新增的算法会自动刷新到待选算法列表(还有另一种添加方式,即做一个完整的DFP包,包里包含下载算法,虽然ARM写了详尽的文档,但这种方式更适合芯片原厂去做):

搞定了合适的下载算法文件,最后还需要检查下两个地址范围,一个是Flash对应的实际映射地址空间,另一个是下载算法文件运行RAM地址空间。这点跟上一篇介绍的J-Link算法JLinkDevices.xml文件里需要填的两个地址空间设计是一致的。

三、NOR Flash下载算法设计Keil MDK下Flash下载算法是开源的,有较详细的文档,文档在arm-software的github主页,根据这些文档,我们基本可以了解其下载算法设计细节。

3.1 下载算法模板工程Keil MDK提供了一个Flash下载算法的基础模板工程,工程在\Keil_v5\ARM\Flash\_Template\NewDevice.uvprojx,该工程仅支持MDK(不支持MDK-Lite)编译,除了工程设置外,该模板工程仅包含四个文件:

\Keil_v5\ARM\Flash\FlashOS.h\Keil_v5\ARM\Flash\_Template\FlashDev.c\Keil_v5\ARM\Flash\_Template\FlashPrg.c\Keil_v5\ARM\Flash\_Template\Target.lin

拿到基础模板工程,我们需要根据目标MCU内核类型在工程选项里将默认的ARMCM0内核改掉,然后在FlashDev.c和FlashPrg.c里将算法API函数全部实现(默认是空的),最后编译工程生成.FLM即是我们要的算法文件(最终.FLM其实是通过After Build里的脚本命令将.axf直接改名的,FLM文件本质上就是axf格式文件)。

3.2 下载算法结构设计算法本身结构其实很简单,在FlashDev.c文件中有一个名为FlashDevice的结构体常量,其原型定义在FlashOS.h中。该结构体主要给IDE提供必要的Flash信息,其值必须根据实际板卡情况填写正确。

struct FlashDevice const FlashDevice = { FLASH_DRV_VERS, // Driver Version, do not modify! “New Device 256kB Flash”, // Device Name ONCHIP, // Device Type 0x00000000, // Device Start Address 0x00040000, // Device Size in Bytes (256kB) 1024, // Programming Page Size 0, // Reserved, must be 0 0xFF, // Initial Content of Erased Memory 100, // Program Page Timeout 100 mSec 3000, // Erase Sector Timeout 3000 mSec// Specify Size and Address of Sectors 0x002000, 0x000000, // Sector Size 8kB (8 Sectors) 0x010000, 0x010000, // Sector Size 64kB (2 Sectors) 0x002000, 0x030000, // Sector Size 8kB (8 Sectors) SECTOR_END};

除了FlashDevice之外,最核心当然是FlashPrg.c里的7个API函数,这些API函数提供了实际的Flash擦写验功能,IDE会自动按需调用这些API去实现在线下载。这些API原型是固定的,但具体函数实现是因板卡而异的。

关于算法工程还有一个不得不提的设计,那就是工程选项C/C++(包括Asm)下都勾选了Read-Only Position Independent 和 Read-Write Position Independent,表明下载算法本身不是使用固定地址链接,而是位置无关链接(也叫相对地址链接),算法代码机器码是可以被放到任意地址去执行的,这也是为什么你可以在例程选项里去指定RAM for Algorithm。

3.3 下载算法API调用流程当在IDE里启动在线下载时,IDE会先将算法文件.FLM里的可执行机器码加载进指定的RAM空间,然后组合调用来实现最重要的Flash擦除和写入,只要用户App被正确写入Flash,IDE就能正常读取Flash里代码指令进行单步调试了。如下图便是擦除和写入操作的实际API组合调用流程:

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    147

    文章

    19211

    浏览量

    405047
  • FlaSh
    +关注

    关注

    10

    文章

    1761

    浏览量

    156028
  • keil
    +关注

    关注

    69

    文章

    1232

    浏览量

    173305
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    有新版keil MDK-ARM V5 注册机安装包不,孩子下载keil卡在许可码过期了,救救孩子吧

    有新版keil MDK-ARM V5 注册机安装包不,孩子下载keil卡在许可码过期了,救救孩子吧
    发表于 01-14 19:37

    LAT1198+通过 KEIL 制作 QSPI 接口的外部 Flash 下载算法应用笔记

    时,需要将代码或数据烧录到外部 Flash。如果调试工具不能够一键烧录,势必会给调试带来诸多的麻烦。本文以 STM32H750 芯片为例,介绍通过 KEIL制作 QSPI 接口的外部 Flash
    发表于 01-11 17:25 0次下载

    聊聊MCU下载算法Keil MDK里的那些事儿

    嗨,嵌入式开发的小伙伴们!用 Keil MDK(µVision)搭配 J-Link 或 DAPLink 调试器刷代码到 MCU 的 Flash,是咱们日常开发的老套路了。里面有个关键
    的头像 发表于 12-16 09:30 4654次阅读
    聊聊MCU<b class='flag-5'>下载</b><b class='flag-5'>算法</b>在<b class='flag-5'>Keil</b> <b class='flag-5'>MDK</b>里的那些事儿

    【瑞萨RA6E2地奇星开发板试用】+开发环境构建与下载测试

    MDK及IAR EWARM。 这里介绍的是一种混合式的方法,即使用RASC来配置引脚并生成Keil MDK的项目工程,然后再在Keil MDK
    发表于 12-06 00:11

    【RA-Eco-RA6M4开发板评测】开发环境搭建

    ://blog.csdn.net/bruceoxl/article/details/108548573 MDK下载地址:https://www.keil.com/download/product/ Figure ‑
    发表于 11-09 21:16

    CW32L012实现外部flash下载算法

    外部flash或者内置的片上flash,都是编译器通过调用写好的FLM文件来实现下载,单片机内部的安装pack包就会有(官方实现),外部flash的情况比较复杂,例如用的哪种
    的头像 发表于 10-09 17:38 1869次阅读
    CW32L012实现外部<b class='flag-5'>flash</b><b class='flag-5'>下载</b><b class='flag-5'>算法</b>

    scons --target=mdk5编译不成功如何解决?

    is not available, please check your keil installation Keil5 project is generating... Keil Version: 0.0
    发表于 09-26 07:20

    studio有没有通过更改下载算法,同时下载到内部flash和外部flash

    我现在使用的stm32h750,内部flash很小,需要使用外部qspiflash来储存程序。 studio可以像mdk一样设置两个下载算法吗? 这样才能一个程序使用两个
    发表于 09-26 07:04

    【RA4E2开发板评测】1、从开箱到点亮 LED

    MDK 中修改 Flash 下载算法地址: 点击 Keil 的魔法棒选项 (Options for Target)。 转到 \"Debug
    发表于 09-05 17:37

    【RA4E2开发板评测】RACS配置+MDK编程+RA Flash Programmer下载程序测试LED经验分享

    中可以解决低版本编译错误的问题,仍旧有报警,但是也遇到过再添加代码后编译错误的问题。测试过几个版本的MDK,最终建议还是去官网下载MDA最新版的社区版。 RA的编程思路也是采用硬件抽象层的的编程方法
    发表于 08-31 14:50

    用STM32的時候是直接用MDK方便还是在vscode用keil插件方便一些?

    用STM32的時候是直接用MDK方便還是在vscode用keil插件方便一些
    发表于 08-12 08:02

    SFUD驱动库实战手册:串行SPI Flash开发全流程解析

    工作原理与实战技巧。 SFUD( Serial Flash Universal Driver)是开源的串行SPI Flash通用驱动库。   旨在解决不同品牌及规格串行
    的头像 发表于 07-29 13:19 896次阅读
    SFUD驱动库实战手册:<b class='flag-5'>串行</b>SPI <b class='flag-5'>Flash</b>开发全流程解析

    瑞萨RA8D1 MCU的OSPI Flash适配指南

    OSPI Flash(Octal SPI Flash)是一种基于SPI(串行外设接口)扩展的高速串行Flash存储器,采用8-bit数据总线
    的头像 发表于 07-17 11:24 3409次阅读
    瑞萨RA8D1 MCU的OSPI <b class='flag-5'>Flash</b>适配指南

    【RA4L1-SENSOR】电压检测器1。开箱+Keil环境搭建

    模拟比较器、温度传感器 8 x 48 段码 LCD 驱动器 12 通道电容式触摸 串行音频接口 (SSI) 。 ** 。* 准备操作系统(win10) 开发板软件(mdk5) 使用在Github上
    发表于 06-19 09:25

    请问CYPM1011-24LQXI能否直接在keil MDK中开发呢?

    抱歉打扰一,请问这款芯片CYPM1011-24LQXI能否直接在keil MDK中开发呢
    发表于 05-30 06:20