专栏首页嵌入式程序猿IAR下QSPI下载算法制作

IAR下QSPI下载算法制作

1. 摘要

本文档主要介绍,在IAR环境下,QSPI下载算法的制作和应用,方便将全字库和图片等资源文件存入QSPI flash里面,这样就可以开发炫酷的人机界面而不占用MCU内部flash资源。以STM32H743为例,QSPI flash用的是华邦的W25Q01JV 1G bits, 128M 字节。一部分用来存储界面的资源文件,一部分用作他用。

2. QSPI flash下载算法

可能大家平时都是使用IAR的默认下载算下到MCU内部flash,没有注意过,在IAR的安装目录下,有很多下载算法,有MCU片内的,页有QSPI等外部Flash等. 而本篇笔记主要是介绍制作外部QSPI flash的下载算法,但无论是内部还是外部,下载算法框架都是一样的,所以必须先来介绍下IAR的flashloader框架。IAR 环境下,程序的下载都是通过flashloader进行的,flashloader其实就是一小段运行在RAM中的程序,因为调试器是不能直接写flash的,只能直接下载到RAM,所以基于解决这个问题就诞生了IAR的flashloader下载框架

IAR的下载框架是开源的遵守Apache许可。可以直接下载使用或者在IAR的安装目录里也有。

http://links.iar.com/cmsis/IAR_flashloader_framework_200.zip

3. 主要构成

3.1 Flashloader 程序

Flashloader程序其实就是一小段可以操作flash的程序,包含一些falsh的擦,写等函数。C-SPY等将falshloader下载到RAM运行,通过调用flashloader里面的函数进行交互。如下就是STM32h7xx系列内部flash的下载算法程序,在IAR的安装目录里可以找到,

而QSPI falsh的下载算法,也是遵守flashloader的框架,只是用来下载到片外SPI接口的flash里面。QSPI flash的下载算法,在IAR的安装路径里有一部分,但不是很全,因为flash型号很多,厂家不一,如果里面有你用的,那么恭喜你可以用,如果没有那么就需要自己制作QSPI flash下载算法。如我使用的华邦的W25Q01JV 就没有,需要自己来制作,不过好在有一些例子可以参考,如下图就是IAR提供的例程,我们正式基于这个工程来修改裁剪适合我们自己外部QSPI flash的下载算法。

3.2 Flash配置文件

配置文件是扩展名为.flash的XML文件,提供flash的基地址,块大小,页大小等,如MCU内部flash的配置文件

在打开开看QSPI flash的配置文件

可以看到XML文件里有如exe,page,block等关键词

Exe 指定flashloader算法的路径,

Page 指定flash的页大小, 如256字节等

Flash_base 指定flash的基地址,如STM32 内部falsh基地址一般为0x08000000等

Block用来指定flash的分布和块大小。

以上是必须的配置,除此之外还有一些可选的,这里不做过多介绍。

3.3 Flash系统配置文件

Flash系统配置文件也是一个XML文件,只是扩展名为.board, 这个文件就是我们要在IDE中指定的

如果你的应用只是片内flash,那么大多时候使用默认的指定就可以,取掉勾选即可,如果你是一部分程序运行在内部flash,一部分资源文件放在外部flash,那么就得指定,如我的工程

点击Edit可以编辑,如下所示

.board文件会指定使用那个.flash配置文件。可以看到我这里有3个.flash, 一个用于配置内部BANK1 flash, 一个用于配置内部BANK 2 flash, 最后一个用于指定QSPI flash 的配置信息。选中任何一个点击Edit可以修改范围,指定路径。还可以添加参数,我这里没有添加扩展参数。

来看下.board文件的全貌,可以看到正是我们在IAR的IDE中在options->Debugger->Download中指定的文件内容。用于高速系统flash的配置信息, 而每一个.flash文件里面指定使用哪一个.out算法和使用哪一个.mac, 更加详细的这些文件的内容可以参考IAR安装目录下的FlashLoaderGuide.ENU.pdf说明文档,如果你要开发自己的下载算法,这个文件需要仔细阅读几遍。

4. 动手制作

前面的都是为这一节铺垫,必须搞清楚.board, .flash, .out, .mac等这些文件的关系,才能制作成功flash下载算法。进入IAR安装目录的src目录下有一些flashloader的源码工程,可以看到有H7,F7等常见系列都有,因为我们使用的是STM32H743芯片,所以按道理使用H7的例程最好,但是经过比较发现H7的例程是基于HAL的,而F7是和HAL无关的,而且支持美信,华邦等厂家,经过考虑选择移植F7的工程,因为flashloader框架都是一样的。所以也很好移植,

复制FlashSTM32F7xx_QSPI的工程到任意非IAR安装目录,因为工程里面需要调用IAR的开源下载框架源码,所以还需要将这一部分也拷出到外部目录,此框架位于IAR的安装目录下的framework2目录里

做好的工程目录如下

其实搭好工程后,许多文件是不用做任何修改的,框架部分的文件,不需要修改,只需要修改QSPI flash驱动,以及一些配置,首先修改工程配置目录,并定义符号 DRV_WINBOND.代表使用华邦flash。

配置输出算法的名称

查看下工程的地址配置,一般是配好的,这里要理解,因为下载算法是运行在RAM中的,所以必须连接到RAM地址。

修改擦写等函数,改为4地址操作指令

修改最多的应该是.mac文件,这个要根据自己的板子硬件管脚修改,文件比较长,这里列出一部分。

编译无误后,还需要制作.flash和.board文件,制作好的.flash文件如下

制作好的.board文件如下

5. 算法验证

将.flash, .board, .out, .mac四个文件拷贝到IAR的安装目录下,就可以使用下载算法了,

找一个工程验证下。拿我之前的TouchGFX 工程验证, 资源文件都是下载到qspi flash里面, 其他在内部flash里面。首先需要配置工程指定board文件

确保验证算法的工程无误后,下载进板子验证下载算法是否正确。

因为下载后,CPU会复位,这时候退出了内存映射模式,不能在进入QSPI flash,要解决这个问题可以参照https://www.iar.com/support/tech-notes/debugger/accessing-external-qspi-memory-in-c-spy/ 应用笔记。顺利解决,主要是制作一个.mac文件,配置装在到应用工程即可。

可以在先仿真, 触摸,操作,显示操作都正常,证明算法没有问题.

6. 参考文档

序号

文献

1

https://www.iar.com/

2

FlashLoaderGuide.ENU

本文分享自微信公众号 - 嵌入式程序猿(InterruptISR),作者:武国平

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-12-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 让TouchGFX在你的板子上跑起来

    本文档主要介绍,如何快速搭建起在STM32上运行的TouchGFX底层驱动和应用,以STM32H743为例。

    用户1605515
  • STM32CubeProgrammer下载算法制作

    本文档主要介绍,在STM32CubeProgrammer环境下,QSPI下载算法的制作和应用,方便将全字库和图片等资源文件存入QSPI flash里面,这样就可...

    用户1605515
  • 【STM32H7】第20章 ThreadX GUIX汉字显示(QSPI Flash全字库)

    1、 务必看第11章学习GUIX Studio的使用方法和第12章学习GUIX Studio生成的代码移植到硬件平台的方法。

    armfly
  • 【STM32H7教程】第83章 STM32H7的内部Flash和QSPI Flash都运行程序的混合方式(强烈推荐)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

    armfly
  • 【STM32H7教程】第82章 STM32H7的QSPI总线应用之QSPI Flash执行程序(BOOT+APP方式)

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

    armfly
  • 【STM32H7教程】第80章 STM32H7的QSPI 总线应用之QSPI Flash的MDK下载算法制作

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

    armfly
  • 【STM32H7教程】第81章 STM32H7的QSPI 总线应用之QSPI Flash的STM32CubeProg下载算法制作

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980

    armfly
  • 【第3版emWin教程】第17章 emWin6.x的2D图形库之绘制流位图(QSPI Flash内存映射方案)

    教程不断更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429

    armfly
  • 快速验证移植QSPI操作

    本篇笔记主要介绍,如何在STM32H743上进行QSPI的操作和驱动。为项目进一步开发快速验证。

    用户1605515

扫码关注云+社区

领取腾讯云代金券