【i.MX RT 系列】i.MX RT1050 Flexspi 例程在 QSPI 上运行

最近使用 i.MX RT1050 开发板,发现 SDK 中关于 Flexspi 的驱动例程:

evkbimxrt1050_flexspi_nor_polling_transfer 默认是运行在 RAM 里面的,一般情况下我们需要的是能运行在 Flash 上的代码,所以本篇博文将介绍如何将该例程修改在 Flash 上运行。

本文基于的硬件和软件如下:

IDE: MCUXpresso

SDK: 2.11.0

硬件: IMXRT1050-EVKB

 一、硬件修改

EVK 和 SDK 默认都是从Hyper Flash 启动,所以需要先更换为 QSPI 启动,将以下电阻对应的断开和连接即可:

 

 

二、软件修改

打开 MCXPresso ,导出 evkbimxrt1050_flexspi_nor_polling_transfer 例程,编译后可以看到代码是运行在 RAM 当中的

 

现在我们开始按以下步骤对其修改:

(1)添加 XIP 相关宏定义

QSPI 相关:XIP_EXTERNAL_FLASH 、 XIP_BOOT_HEADER_ENABLE

SDRAM 相关:XIP_BOOT_HEADER_DCD_ENABLE 、SKIP_SYSCLK_INIT

添加这些宏定义后,工程目录下的 XIP 文件夹里面的内容就能编译进去,生成的执行文件会有 boot_config 内容,这样芯片才能正常识别启动(关于启动流程不清楚的,可以参考 痞子衡 RT 系列文章,或者参考 RT1050 的 RM );

 

 

可以看到这里的内容已经不是灰色的了:

 

 

(2)修改 XIP 启动配置文件

默认使用的是 hyperflash_config ,现在需要添加 qspiflash_config 以适配 qspi flash 启动;

 

(3)添加 Flash 定义

在工程属性中添加 Flash 的内容:

 



保存配置退出,先编译一遍工程(这里也需要先生成添加 Flash 之后的 .ld 文件方便后续使用),可以看到代码已经放在 Flash 中了:

 

 

(4)修改分散加载文件

对 Flash 擦写的代码需要放在 RAM 中运行,作以下修改即可;

 

在 .ld 文件中添加以下内容

 

(5)修改擦写的 sector

例程对 sector0 进行擦写,因为我们现在已经在 Flash 上存取代码了,擦除的话会破坏代码,所以这里改为 10 ;



(6)修改 MCUXpresso qspi jlink 下载算法

这里不理解的可以参考之前的文章,《i.MX RT1050 EVK 从 QSPI 启动》,这里不在赘述;

 

 

保存下载代码,查看串口信息,可以看到代码已经跑起来了,读取 ID 以及擦写正常。

 

参考资料:

《IMXRT1050RM》

https://www.nxp.com.cn/products/processors-and-microcontrollers/arm-microcontrollers/i-mx-rt-crossover-mcus/i-mx-rt1050-crossover-mcu-with-arm-cortex-m7-core:i.MX-RT1050

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论