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 |