【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次,發文人進小黑屋喔~

評論