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

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

3天内不再提示

Keil MDK下的NOR Flash下载算法

strongerHuang 来源:痞子衡嵌入式 作者:痞子衡嵌入式 2020-11-01 11:18 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

今天转载痞子衡嵌入式的一篇文章,给大家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_PacksNXPMIMXRT1062_DFP12.2.0armMIMXRT106x_QSPI_4KB_SEC.FLM)

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

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

三、NOR Flash下载算法设计

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

算法主页:https://arm-software.github.io/CMSIS_5/Pack/html/flashAlgorithm.html

3.1 下载算法模板工程

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

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

3.2 下载算法结构设计

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

structFlashDeviceconstFlashDevice={ FLASH_DRV_VERS,//DriverVersion,donotmodify! "NewDevice256kBFlash",//DeviceName ONCHIP,//DeviceType 0x00000000,//DeviceStartAddress 0x00040000,//DeviceSizeinBytes(256kB) 1024,//ProgrammingPageSize 0,//Reserved,mustbe0 0xFF,//InitialContentofErasedMemory 100,//ProgramPageTimeout100mSec 3000,//EraseSectorTimeout3000mSec //SpecifySizeandAddressofSectors 0x002000,0x000000,//SectorSize8kB(8Sectors) 0x010000,0x010000,//SectorSize64kB(2Sectors) 0x002000,0x030000,//SectorSize8kB(8Sectors) 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组合调用流程:

算法API详解:

https://arm-oftware.github.io/CMSIS_5/Pack/html/algorithmFunc.html

至此,Keil MDK工具下i.MXRT的串行NOR Flash下载算法设计介绍完毕。
责任编辑:lq

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

    关注

    6074

    文章

    45340

    浏览量

    663562
  • 算法
    +关注

    关注

    23

    文章

    4760

    浏览量

    97144
  • keil
    +关注

    关注

    69

    文章

    1224

    浏览量

    171815

原文标题:Keil MDK 下 i.MXRT 的串行 NOR Flash 下载算法设计

文章出处:【微信号:strongerHuang,微信公众号:strongerHuang】欢迎添加关注!文章转载请注明出处。

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    3D NOR FLASH技术、AI服务器动能,多家厂商预估2026全年上涨

    电子发烧友网报道(文/黄晶晶)继DRAM和NAND的价格不断上涨之后,日前NOR Flash也出现了惊人的高达30%涨幅。NOR Flash在AI服务器、手机、平板电脑、可穿戴等领域呈
    的头像 发表于 11-17 07:53 8953次阅读
    3D <b class='flag-5'>NOR</b> <b class='flag-5'>FLASH</b>技术、AI服务器动能,多家厂商预估2026全年上涨

    高性能SPI NOR FLASH芯片ZB25VQ系列推荐

    在嵌入式系统、物联网设备及各类存储应用中,SPI NOR FLASH芯片因其接口简单、功耗低、读写速度快等特点,成为代码存储与数据缓存的常见选择。SPI NOR FLASH是一种基于S
    的头像 发表于 12-01 14:52 186次阅读

    华邦高性能NOR Flash用于学习平板

    华邦电子(Winbond)的NOR Flash以其卓越性能成为学习平板理想的存储解决方案。其芯片内执行(XIP)特性可实现系统秒级快速启动,高可靠性确保固件和核心代码安全,低功耗特性则有效延长设备续航,为流畅稳定的学习体验奠定坚实基础。
    的头像 发表于 11-10 09:48 273次阅读
    华邦高性能<b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b>用于学习平板

    博雅NOR Flash 液晶电视核心存储方案优选​

    博雅BOYA BY25Q32BSSIG是一款32Mbit SPI NOR Flash芯片,支持133MHz高速读取与XIP技术,能显著提升液晶电视的启动速度与系统响应。其工业级温度范围与低功耗特性保障了电视在长期高温环境的稳定
    的头像 发表于 10-31 09:16 159次阅读
    博雅<b class='flag-5'>NOR</b> <b class='flag-5'>Flash</b> 液晶电视核心存储方案优选​

    CW32L012实现外部flash下载算法

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

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

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

    博雅NOR FLASH XIP技术实现电力仪表毫秒级快速启动​

    博雅128Mbit NOR Flash BY25Q128ESSIG为智能电力仪表提供高可靠存储方案,133MHz读取速度与-40℃~105℃宽温保障数据实时性与稳定性。
    的头像 发表于 09-08 09:55 705次阅读
    博雅<b class='flag-5'>NOR</b> <b class='flag-5'>FLASH</b> XIP技术实现电力仪表毫秒级快速启动​

    SPI NOR FLASH是什么,与SPI NAND Flash的区别

    SPI NOR FLASH是什么?   SPI NOR FLASH是一种非易失性存储器,它通过串行接口进行数据传输,具有读写速度快、可靠性高、体积小等优点。它采用类似SRAM的存储方式
    的头像 发表于 08-21 09:26 1106次阅读

    普冉NOR FLASH助力IPC摄像头高效运行

    Puya 普冉 64 Mbit NOR Flash P25Q64SH-SUH 以宽压、高速 SPI、毫秒级擦写和低功耗特性,为 IPC 摄像头提供固件、配置与算法的可靠存储。适用于安防监控、智能家居及电池供电场景,助力终端小型化
    的头像 发表于 08-01 10:05 690次阅读
    普冉<b class='flag-5'>NOR</b> <b class='flag-5'>FLASH</b>助力IPC摄像头高效运行

    FLASH烧写/编程白皮书

    白皮书:如何烧写Flash——不同场景不同需求的选择认识Flash NAND vs. NOR如何烧写/编程不同方案比较
    发表于 07-28 16:05 0次下载

    Nor flash芯片低温无法启动

    关于针对NOR Flash芯片在低温环境无法启动的问题,详细分析与解决方案如下所述: 1. 低温失效原因分析 1.1 半导体物理特性变化 阈值电压(Vth)漂移:低温MOSFET阈
    的头像 发表于 06-30 17:23 594次阅读
    <b class='flag-5'>Nor</b> <b class='flag-5'>flash</b>芯片低温无法启动

    Keil MDK到IAR EWARM:通过工程迁移实现项目资产的更好管理

    对于需要统一开发环境或涉及多核架构(如Cortex-A/R)的项目,越来越多的用户选择从Keil MDK迁移到IAR EWARM。这就会面临着需要将之前的Keil MDK工程迁移到IA
    的头像 发表于 05-08 09:03 999次阅读
    从<b class='flag-5'>Keil</b> <b class='flag-5'>MDK</b>到IAR EWARM:通过工程迁移实现项目资产的更好管理

    基于APM32F407如何制作I2C EEPROM(AT24C02型号)的MDK-Keil下载算法

    基于APM32F407如何制作I2C EEPROM(AT24C02型号)的Keil下载算法,这样在我们下载代码时可以一键把数据烧录到EEPROM中。
    的头像 发表于 04-11 11:06 1761次阅读
    基于APM32F407如何制作I2C EEPROM(AT24C02型号)的<b class='flag-5'>MDK-Keil</b><b class='flag-5'>下载</b><b class='flag-5'>算法</b>

    存储技术探秘 NAND Flash vs NOR Flash:藏在芯片里的&quot;门道之争&quot;

    门电路玄机 NOR Flash:Intel 1988 年革命性突破,终结 EPROM/EEPROM 垄断时代 NAND Flash:东芝 1989 年发布,开创 "低成本比特" 存储新纪元 共性特征
    的头像 发表于 03-18 12:06 1056次阅读

    罗彻斯特电子为传统应用提供卓越的内存支持 为并行NOR Flash提供持续供货支持

    为并行NOR Flash提供持续供货支持 凭借罗彻斯特电子的生产能力,能够持续供应并行NOR Flash。不论是传统还是成熟产品对于此类产品都有持续需求。通过战略性安排,罗彻斯特电子购
    发表于 12-17 10:33 482次阅读