前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IAR下QSPI下载算法制作

IAR下QSPI下载算法制作

作者头像
用户1605515
发布2020-12-17 11:43:43
1.6K1
发布2020-12-17 11:43:43
举报
文章被收录于专栏:嵌入式程序猿

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 嵌入式程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档