本帖最后由 MindMotion 于 2023-7-10 16:07 编辑
总结
为了扩展微控制器可用的 Flash 空间,用户可以使用 QSPI 接口连接 QSPI Flash;为了让用户能尽量像使用片内 Flash 那样下载和运行程序,减少额外操作,需要有对应的下载算法与相应的 2nd Bootloader。
本文以 PLUS-F5270 开发板为例(该开发板搭载的 MM32F5277E9PV 微控制器具备 QSPI 接口,且板载 W25Q64JVISQ QSPI Flash 芯片),介绍了 MM32F5 系列芯片的 QSPI 引脚,以及与 QSPI Flash 通信的过程,在 MDK 平台上实现客制化的下载算法,简单的 2nd Bootloader,并以 MindSDK 的 hello_world 样例工程为例,进行少量的修改,使其能够存储在 QSPI Flash 上,最终验证了微控制器能够运行存储在QSPI Flash 上的应用程序。
注意事项
外置 QSPI Flash选型
在进行 QSPI Flash 的选型过程中,尤其要关注其工作电压的范围,部分 QSPI Flash 的额定工作电压为 1.8V ,若在3.3V 电压下,是无法正常工作的,反之亦然。
除了电压范围外,部分 QSPI Flash 芯片在默认情况下,处于非四线模式,原本 QSPI 的 D2 & D3 引脚会被用于写保护使能和 HOLD 使能,使能四线模式的方法,需参照使用的 QSPI Flash 芯片手册进行操作。
QSPI Flash 与微控制器连接时,为了满足阻抗匹配的要求,其信号线上需要串联22Ω或33Ω的电阻,否则,在与 QSPI Flash 通信时,会发现读到的数据与期望的数据可能不一致。
生成 FlashLoader 时出现显示路径不同的warning
在配置 FlashLoader 的 MDK 工程文件时,在 Options for Target -> C/C++(AC6) -> warnings 选项下,若选择 All warnings 选项,在build时会出现 warning:
FlashDev.c(25): warning: non-portable path to file '"..\FlashOS.h"'; specified path differs in case from file name on disk [-Wnonportable-include-path]
#include "..\FlashOS.H" // FlashOS Structures
^~~~~~~~~~~~~~
"..\FlashOS.h"
将该配置选项修改为 AC5-like Warnings 后,样例build无问题。
Program Size: Code=4088 RO-data=4256 RW-data=4 ZI-data=0
After Build - User command #1: cmd.exe /C copy "Objects\MM32F5270_QSPI_FlashLoader.axf" "..\MM32F5270_QSPI_FlashLoader.FLM"
已复制 1 个文件。
".\Objects\MM32F5270_QSPI_FlashLoader.axf" - 0 Error(s), 0 Warning(s).
生成下载算法时出现 L6305 warning
查看整个下载算法工程文件,会发现当前工程中没有启动文件与主函数,默认只有几个功能函数,在这种情况下,编译会爆出下面的警告:
L6305W: Image does not have an entry point. (Not specified or not set due to multiple choices.)
但下载算法本身是不需要启动文件和主函数的,只在下载代码时由调试器调用下载算法中的功能,因此,需忽略该 warning。选择 Options for Target -> Linker` -> Misc controls选项,修改该选项内容为 --diag_suppress L6305。
修改源文件后下载该文件出现无法加载闪存编程算法的问题
对比所生成的下载算法大小与工程文件的`Options for Target -> Debug -> settings -> Flash Download -> RAM for Algorithm -> Size 选项下配置的算法大小,发现当前下载算法大于 Size 所配置的大小,因此,需适当调大 Size 的大小,例如由0x1000增加到0x2000。
在实现下载算法时,为了保证下载算法足够小,其代码量不要过多,需删除未使用的函数。
应用程序不能出现影响 QSPI 使用的代码
需要检查应用程序的代码,对可能影响到 QSPI 的代码进行调整,例如 GPIO 的配置,GPIO 时钟的复位,以及直接对 QSPI 的操作。
点击下方链接,阅读mm32-2nd-bootloader技术白皮书系列更多内容:
|