大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家分享的是i.MXRT全系列FlexSPI外設(shè)的LUT長度。
事情起源于一個(gè) RT600 客戶, 他們讀芯片用戶手冊(cè)發(fā)現(xiàn) FlexSPI 外設(shè) LUT 長度為 128 words(這是 RT500/RT10xx/RT1170 上的兩倍),他們想嘗試用起來,發(fā)現(xiàn)后 64 words 不起作用。說實(shí)話,痞子衡用了這么久的 FlexSPI 外設(shè),還真沒注意到這個(gè)細(xì)節(jié),原因是 64 words 的 LUT 已經(jīng)能夠支持實(shí)現(xiàn) 16 條時(shí)序,這對(duì)于大部分應(yīng)用場景都綽綽有余。于是痞子衡找了一塊 RT600 開發(fā)板測試了一下,發(fā)現(xiàn)確實(shí)有問題,這應(yīng)該是 RT600 用戶手冊(cè)上的美麗勘誤。借此機(jī)會(huì)痞子衡就和大家梳理一下 i.MXRT 全系列 LUT 長度與設(shè)計(jì):
Note: 該勘誤存在于 RT600 UM Rev 1.8 以及 SDK v25.06 版本及之前
一、LUT設(shè)計(jì)差異
LUT 組件可以說是 FlexSPI 外設(shè)最核心的部分,關(guān)于其工作原理,詳見痞子衡舊文 《從頭開始認(rèn)識(shí)i.MXRT啟動(dòng)頭FDCB里的lookupTable》??蛻粼?RT600 手冊(cè)以及 SDK 里發(fā)現(xiàn)的勘誤主要是 FlexSPI 結(jié)構(gòu)體原型定義里 LUT 長度 FLEXSPI_LUT_COUNT 被設(shè)為了 128,而實(shí)際上應(yīng)該是 64(頭文件一般是根據(jù)手冊(cè)內(nèi)容自動(dòng)生成的)。
LUT 指標(biāo)除了總長度之外,還有一個(gè)重要指標(biāo),即單條時(shí)序最大長度(也可認(rèn)為子時(shí)序數(shù)量),大部分 i.MXRT 上 FlexSPI 單條時(shí)序支持的最多子時(shí)序?yàn)?8 條(每條子時(shí)序長度固定 2Bytes),即如下圖。
Note:這里需要注意,當(dāng)某條時(shí)序中子時(shí)序不滿 8 條時(shí),剩余空間也不可另作它用,因?yàn)?FlexSPI->IPCR1[ISEQID] 里所標(biāo)示的時(shí)序 index 對(duì)應(yīng)得 LUT 里步長單位是時(shí)序最大長度。
RT700 上外設(shè)升級(jí)到了 XSPI,其單條時(shí)序支持的最多子時(shí)序?yàn)?10 條,即如下圖所示,其余 LUT 用法和 FlexSPI 類似。
目前來看 RT1180 最強(qiáng),支持的時(shí)序數(shù)量最多,不過對(duì)于其它 i.MXRT 也不用慌。如果工程里實(shí)際需要的時(shí)序大于 16,可以動(dòng)態(tài)更新 LUT 表以分時(shí)復(fù)用空間,這樣實(shí)際能實(shí)現(xiàn)的時(shí)序數(shù)量是不限的。
二、LUT長度對(duì)驅(qū)動(dòng)影響
當(dāng)前 SDK 包里的 flexspi 驅(qū)動(dòng)和例程是以 16 條時(shí)序來設(shè)計(jì)的,這對(duì)于除了 RT1180 之外的其它 i.MXRT 型號(hào)是合適的。而在 RT1180 上,例程里我們只需把 CUSTOM_LUT_LENGTH 改為 128,然后在 customLUT 里添加更多時(shí)序?qū)崿F(xiàn)即可。
例程路徑: \SDK\boards\evkmimxrt1180\driver_examples\flexspi\nor
#define CUSTOM_LUT_LENGTH 128
const uint32_t customLUT[CUSTOM_LUT_LENGTH] = {
// 時(shí)序...
};
而至于 fsl_flexspi.c 驅(qū)動(dòng)(V2.7.0及之前),里面和 LUT 相關(guān)的就一個(gè)如下函數(shù) FLEXSPI_UpdateLUT(),這個(gè)函數(shù)用于更新 LUT 表,在例程里我們是一次性更新進(jìn)去,所以參數(shù)里的 index 檢查沒有問題;如果是動(dòng)態(tài)單條更新 LUT,那么函數(shù)里面的第一句 assert() 檢查就需要為 RT1180 做相應(yīng)改動(dòng)。
至此,i.MXRT全系列FlexSPI外設(shè)的LUT長度痞子衡便介紹完畢了,掌聲在哪里~~~