痞子衡嵌入式:從i.MXRT600用戶手冊UM里一個關于FlexSPI LUT長度的勘誤說起
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是i.MXRT全系列FlexSPI外設的LUT長度。
事情起源于一個 RT600 客戶, 他們讀芯片用戶手冊發現 FlexSPI 外設 LUT 長度為 128 words(這是 RT500/RT10xx/RT1170 上的兩倍),他們想嘗試用起來,發現后 64 words 不起作用。說實話,痞子衡用了這么久的 FlexSPI 外設,還真沒注意到這個細節,原因是 64 words 的 LUT 已經能夠支持實現 16 條時序,這對于大部分應用場景都綽綽有余。于是痞子衡找了一塊 RT600 開發板測試了一下,發現確實有問題,這應該是 RT600 用戶手冊上的美麗勘誤。借此機會痞子衡就和大家梳理一下 i.MXRT 全系列 LUT 長度與設計:
- Note: 該勘誤存在于 RT600 UM Rev 1.8 以及 SDK v25.06 版本及之前
一、LUT設計差異
LUT 組件可以說是 FlexSPI 外設最核心的部分,關于其工作原理,詳見痞子衡舊文 《從頭開始認識i.MXRT啟動頭FDCB里的lookupTable》??蛻粼?RT600 手冊以及 SDK 里發現的勘誤主要是 FlexSPI 結構體原型定義里 LUT 長度 FLEXSPI_LUT_COUNT 被設為了 128,而實際上應該是 64(頭文件一般是根據手冊內容自動生成的)。

LUT 指標除了總長度之外,還有一個重要指標,即單條時序最大長度(也可認為子時序數量),大部分 i.MXRT 上 FlexSPI 單條時序支持的最多子時序為 8 條(每條子時序長度固定 2Bytes),即如下圖。
- Note:這里需要注意,當某條時序中子時序不滿 8 條時,剩余空間也不可另作它用,因為 FlexSPI->IPCR1[ISEQID] 里所標示的時序 index 對應得 LUT 里步長單位是時序最大長度。

RT700 上外設升級到了 XSPI,其單條時序支持的最多子時序為 10 條,即如下圖所示,其余 LUT 用法和 FlexSPI 類似。

這里用一個表格做個總結,目前來看 RT1180 最強,支持的時序數量最多,不過對于其它 i.MXRT 也不用慌。如果工程里實際需要的時序大于 16,可以動態更新 LUT 表以分時復用空間,這樣實際能實現的時序數量是不限的。
| 芯片 | 外設 | LUT長度 | 單Sequence長度 | Sequence總數 |
|---|---|---|---|---|
| i.MXRT10xx i.MXRT1160/1170 i.MXRT500/600 RW612 |
FlexSPI | 64 words | 4 words | 16 |
| i.MXRT1180 | 128 words | 32 | ||
| i.MXRT700 | XSPI | 80 words | 5 words | 16 |
二、LUT長度對驅動影響
當前 SDK 包里的 flexspi 驅動和例程是以 16 條時序來設計的,這對于除了 RT1180 之外的其它 i.MXRT 型號是合適的。而在 RT1180 上,例程里我們只需把 CUSTOM_LUT_LENGTH 改為 128,然后在 customLUT 里添加更多時序實現即可。
- 例程路徑: \SDK\boards\evkmimxrt1180\driver_examples\flexspi\nor
#define CUSTOM_LUT_LENGTH 128
const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
// 時序...
};
而至于 fsl_flexspi.c 驅動(V2.7.0及之前),里面和 LUT 相關的就一個如下函數 FLEXSPI_UpdateLUT(),這個函數用于更新 LUT 表,在例程里我們是一次性更新進去,所以參數里的 index 檢查沒有問題;如果是動態單條更新 LUT,那么函數里面的第一句 assert() 檢查就需要為 RT1180 做相應改動。

最后還要提一嘴 RT1180 啟動頭 FCB 結構體定義,flexspi_mem_config_t 里 lookupTable 長度是 64 words,這個不需要更新,雖然 FlexSPI 的能力不止于此,但是 RT1180 BootROM 里就僅支持前 16 條時序用于用戶配置。
至此,i.MXRT全系列FlexSPI外設的LUT長度痞子衡便介紹完畢了,掌聲在哪里~~~
歡迎訂閱
文章會同時發布到我的 博客園、CSDN、微信公眾號、知乎、與非網、電子技術應用AET、電子星球、51CTO 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。

最后歡迎關注痞子衡個人微信公眾號【痞子衡嵌入式】,一個專注嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
衡杰(痞子衡),目前就職于恩智浦(NXP)半導體MCU系統應用部門,擔任高級嵌入式系統應用工程師。
專欄內所有文章的轉載請注明出處:http://www.rzrgm.cn/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 hengjie1989@foxmail.com
可以關注痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在博客下面留言,痞子衡會及時回復免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。
浙公網安備 33010602011771號