對於 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 。
評論