i.MX RT1020 擦寫外部 Flash

對於 NXP i.MX RT 系列的 MCU ,一般是免不了與 SPI Flash 打交道的,即使那些擁有內部 Flash 的型號(i.MX RT1064 等),實際上內部也是與 flexspi外設相連。當我們需要存儲某些數據到 Flash 或者實現 BootLoader功能的時候就需要對其進行讀寫,官方的例程都是針對 EVK 上的 Flash 來編寫,然後大部分的用戶用的 Flash 都不一樣,這篇文章將介紹通過 flexspi 對華邦 Flash 讀寫擦除。

  

硬體平台:i.MX RT1020 EVK

Flash : W25Q64JVSIQ

SDK 版本:2.12.1

IDE: MCUXpresso

 

我們先導出 flexspi 的例程:evkmimxrt1020_flexspi_nor_polling_transfer

 

 

對於 SPI Flash 的操作,是通過 SPI 發送對應的命令,然後接受返回的數據,而 flexspi 外設中有一個 LUT 表來預存一些會用的指令,接下來就需要修改 LUT 表。

下圖標出了常用的 flash 指令:

 

  

在代碼中對這些部分逐一修改:

 

 

(1)JEDEC ID

 

 

由於華邦返回的 ID 有 24bit,將對應存儲變量和傳參改為 32bit,另外讀取 ID 函數裡面做以下修改:

 

 

(2)Write Enable

不需要修改

 

(3)Page Program

同樣不需要修改

 

 

(4)Sector Erase

擦除命令有所不同,這裡改為 0x20,否則會擦除失敗:

 

修改完成後將代碼重新編譯,進調試:

首先可以看到讀 ID 部分,ID 為 EF4017 :

 

 

接下來通過 jflash 回讀數據,可以看到對應位置已經寫入預期數據:

 

 

其實不難看出,換不同家 Flash ,主要是對比 Flash 的指令,在 LUT 表中對應修改,這樣才能正常擦寫 Flash 。

 



參考資料:

《W25Q64JVSIQ datasheet》

https://item.szlcsc.com/3325446.html

 

《IMXRT1020RM》

https://www.nxp.com.cn/

 

★博文內容均由個人提供,與平台無關,如有違法或侵權,請與網站管理員聯繫。

★文明上網,請理性發言。內容一周內被舉報5次,發文人進小黑屋喔~

評論