最近使用 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》
評論