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

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

3天内不再提示

工程师笔记|通过 KEIL 制作 QSPI 接口的外部 Flash 下载算法

STM32单片机 来源:未知 2023-02-12 12:10 次阅读


关键词:KEIL,QSPI,下载算法





目录预览




1. 引言

2. MDK 下载算法基础知识

3.程序擦除操作执行流程

4.程序烧录操作执行流程

5. 程序校验操作执行流程

6. MDK 创建下载算法过程通用步骤

7. 添加 QSPI-FLASH 驱动及其有关库函数

8. 算法和使用方法

9. 小结



1.引言

随着用户的应用越来越复杂以及 GUI 等需要大存储空间的需求越来越多,很多时候我们需要将代码或数据放在外扩的 Flash 存储空间。但是这样存在一个外部 Flash 烧写的问题,尤其是在应用调试时,需要将代码或数据烧录到外部 Flash。


如果调试工具不能够一键烧录,势必会给调试带来诸多的麻烦。本文以 STM32H750 芯片为例,介绍通过 KEIL制作 QSPI 接口的外部 Flash 下载算法的方法。


2.MDK 下载算法基础知识

FLASH 编程算法是一种用于擦除应用程序或将应用程序下载到 Flash 的程序代码。MDK 本身支持的各种器件都自带下载算法,存放在 MDK 各种器件的软件包里面,以STM32H7 为例,算法存在于

KeilSTM32H7xx_DFP2.6.0CMSISFlash

(软件包版本不同,数字 2.6.0 会不同)。但是,只有 STM32 官方部分开发板提供了算法工程,大多数用户开发板都需要自己编写下载算法。不同的 QSPI-FLASH 的驱动略有差别,因此下载算法也不同。所以,掌握通用的下载算法制作步骤很重要。


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


3.程序擦除操作执行流程

如图 1

(Algorithm Functions (keil.com)所示

可以看出 Flash 的擦除过程包括以下几个步骤:

a) 加载算法到 RAM(一般指片内 SRAM)

b) 执行初始化函数 Init

c) 执行擦除操作,根据用户的 MDK 配置,这里可以选择整个芯片擦除或者扇区擦

除。

d) 擦除操作结束后执行 Uninit 函数





4.程序烧录操作执行流程

如图 2

(Algorithm Functions (keil.com)

所示,程序烧录执行流程包括以下步骤:

a)对所有的 AXF 文件做 init 初始化(AXF 是 MDK 生成的可执行文件,也就是需要烧

录和调试的代码)

b)查看烧写算法 FLM 文件是否存在,如果不存在,则操作结束;如果存在,则继续

c)加载算法文件到 RAM 中

d)执行初始化函数 Init

e)加载用户程序代码至 RAM 中

f)执行写入编程函数 Program Page

g)执行 Uninit 函数

f)操作结束



从以上操作过程中可以看出,我们的用户代码是先放在 RAM 中缓存的,然后 IDE 通过调用 RAM 中的 FLASH 写入函数 Program Page 将代码写入到 Flash 中,完成代码的烧录。


5.程序校验操作执行流程

程序校验操作大致流程如图 3(Algorithm Functions (keil.com)所示

其中校验要用到 MDK 生成的 axf 可执行文件。


校验就是 把 axf 文件中的程序和实际下载到芯片的程序读出来做比较。


a)查看烧写算法 FLM 文件是否存在,如果不存在,则操作失败;如果存在,则继续

b)加载算法到 RAM 中

c)执行初始化 Init

d)检查校验算法是否存在:

如果存在,加载应用程序到 RAM 中,然后执行校验算法函数

如果不存在,计算 CRC,将芯片中读取出来的数据和 RAM 中加载应用计算输出的

CRC 值做比较。

e)执行 Uninit 函数。

f)替换 BKPT( BreakPoint 断点指令)为 B. 死循环指令

h)执行 RecoverySupportStop, 恢复支持停止。

i)执行 DebugCoreStop,调试内核停止

g)运行应用,若运行成功,则硬件复位

k)操作完成,停止调试端口


6.MDK 创建下载算法过程通用步骤

6.1使用 MDK 提供的通用模板

模板路径:

C:Keil_v5ARMPacksARMCMSIS5.6.0Device_Template_Flash


请找到自己 MDK 的安装路径,找到后将工程拷贝出来。然后将以下两个文件的只读属性取消。FlashDev.c 是 flash 信息描述文件,需要根据自己的 flash 实际情况修改。FlashPrg.c 是具体擦除、写入、校验等接口函数实现文件,需要自己根据实际情况进行开发。


同时MDK提供的工程模板原始名字是 NewDevice.uvprojx, 大家可以根据自己的需要做修改。



6.2MDK 工程设置

6.2.1 修改使用的芯片型号



6.2.2修改输出算法文件名


图6.修改输出算法文件名


这个名字是方便用户查看的, 比如设置为 stm32h7,那么输出的算法文件就是stm32h7.flm。


6.2.3设置算法文件中 RO 和 RW 段的独立性


选择“ ROPI”以及 “RWPI”选项, 可以避免用户不得不将代码加载到内存中的特定位置。


6.2.4将程序可执行文件 axf 修改为 FLM


通过以下命令即可在编译后生成 FLM 文件。


6.2.5 分散加载设置


分散加载文件 Target.lin 模板中有提供,--diag_suppress L6305 用于屏蔽 L6503 类型警告信息,设置了分散加载后, 此处的配置就不再起作用了。




本文主要介绍了基于 MDK 通用模板和已有工程制作 MDK 下载算法的过程。因文章篇幅有限,未展示完整内容,完整文章请点击“阅读原文”下载。



长按扫码关注公众号


更多资讯,尽在STM32


点击“阅读原文”,可下载原文档


原文标题:工程师笔记|通过 KEIL 制作 QSPI 接口的外部 Flash 下载算法

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

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

    关注

    6032

    文章

    44513

    浏览量

    632812
  • STM32
    +关注

    关注

    2266

    文章

    10870

    浏览量

    354736

原文标题:工程师笔记|通过 KEIL 制作 QSPI 接口的外部 Flash 下载算法

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

收藏 人收藏

    评论

    相关推荐

    FPGA算法工程师、逻辑工程师、原型验证工程师有什么区别?

    ,共同进步。 欢迎加入FPGA技术微信交流群14群! 交流问题(一) Q:FPGA中的FPGA算法工程师、FPGA逻辑工程师、FPGA原型验证工程师三者有什么区别? A:FPGA
    发表于 09-23 18:26

    在mmWave SDK增加QSPI Flash驱动的示例

    电子发烧友网站提供《在mmWave SDK增加QSPI Flash驱动的示例.pdf》资料免费下载
    发表于 09-11 14:20 0次下载
    在mmWave SDK增加<b class='flag-5'>QSPI</b> <b class='flag-5'>Flash</b>驱动的示例

    嵌入式软件工程师和硬件工程师的区别?

    设备。他们需要理解嵌入式系统的基本原理,熟悉各种硬件接口和通信协议,以及熟练掌握硬件设计工具。 主要负责的任务和领域 嵌入式硬件工程师的任务主要包括: * 硬件设计:包括电路设计、硬件原型制作、调试等
    发表于 05-16 11:00

    大厂电子工程师常见面试题#电子工程师 #硬件工程师 #电路知识 #面试题

    电子工程师电路
    安泰小课堂
    发布于 :2024年04月30日 17:33:15

    STM32F746 QSPIFlash扩展后,添加到工程下载发现报错,为什么?

    使用 W25Q128 模块 ,使用的是微雪STM32F746IGT6的开发板,在QSPI进行Flash扩展了解发现需要做一个.FLM的Flash编程算法,我找一个STM32H7的进行修
    发表于 04-17 06:31

    求助,如何使用openOCD下载程序到stm32h750外部flash

    QSPIflash驱动描述“stmqspi”,这表明openOCD应该是对外部flash下载有支持的,但我没找到有关它的实现。
    发表于 03-27 06:20

    在STLinkV2用下载算法将程序下载到外部flash报错怎么解决?

    你好:在uVision用下载算法将程序下载到外部flash(QSPIFLASH W25Q256JV) .使用CMSIS_DAP可以下載,執行正常. 但是改用STLinkV2,就会出现
    发表于 03-20 06:12

    NUCLEO-H7A3ZIQ使用keil外部下载算法后提示Flash Timeout的原因?

    我用ospi驱动w25q128,可以读出id,可以写入和读取数据。然后自己写了个KEIL外部下载算法,修改了链接器脚本让图片资源存储在w25q128。 但是点击下载后,Erase过程
    发表于 03-19 06:18

    U5A9-DK开发板在TouchGFX模板工程外部下载算法报错怎么解决?

    U5A9-DK开发板在TouchGFX的模板工程外部下载算法好像有问题,若图片资源不多,则可以正常下载,一旦外部资源超过芯片自带
    发表于 03-13 08:34

    STM32H7B0通过QSPI地址映射外部flash开始使用正常,出现QSPI功能异常是什么原因导致的?

    STM32H7B0 通过QSPI地址映射外部flash开始使用正常,后面出现QSPI功能异常(直接寻址和地址映射均不能访问
    发表于 03-08 06:34

    rtthread studio已经成功编写了外部flash下载算法,程序也能下载进去但是不能进行调试怎么办?

    已经成功编写了外部flash下载算法,程序也能下载进去,但是不能进行调试怎么办? 我想放在内部flash
    发表于 02-20 07:24

    能否不使用ITCM就对Flash进行编程呢?

    到0x8000_0000的地址,执行搬移到ITCM当中的指令,指令会通过sw指令将程序固化到外部Flash上,对应的QSPI0的地址为0x10014060(TX_FIFO寄存器),执行
    发表于 01-10 07:28

    使用 PCIE 更新 AMD ZYNQ™ 的 QSPI Flash 参考设计

    的内部资源包括 DDR 控制器,QSPI 控制器,OCM,IIC,SPI 等。 本教程提供一个最小的参考设计,使上位机可以通过 PCIE 端口,通过 S_AXI_GP0 端口访问 ZYNQ 内部
    发表于 11-30 18:49