大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是Octal或Hyper Flash上DQS信号與Dummy Cycle聯系。
關于在 i.MXRT 上啟動 NOR Flash 時如何設定正确的 Dummy Cycle 值,痞子衡一共寫過四篇文章:《IS25WP系列Dummy Cycle設定》、《IS25LP系列Dummy Cycle設定》、《Dummy Cycle設定為0的誤區》、《DTR模式下Dummy Cycle設定》, 這四篇文章都是針對普通 QuadSPI 型 Flash 而言的(一般沒有 DQS 信号)。而如果在 i.MXRT 上啟動的是包含 DQS 信号的 Octal Flash 或者 Hyper Flash,此時 Dummy Cycle 設定有什麼不同之處呢?今天痞子衡就和大家聊聊這個話題:
我們知道對于普通 QuadSPI 型 Flash,在 FlexSPI 子產品 LUT 裡配置讀時序時,其中 Dummy Cycle 子序列中填的值必須要與 Flash 端的 Dummy Cycle 嚴格一緻,否則會發生時序錯亂(如下圖 Extended 時序所示,圖中是單線模式,四線模式類似)。
Flash 裡一般都會開放寄存器給使用者去配置 Dummy Cycle 值,Flash 工作頻率越高,所需的最小 Dummy Cycle 也越大(可以了解為 Flash 存儲體從接收到讀指令開始到輸出有效資料這一段時間間隔是恒定的,而我們衡量時間的基準是連接配接到 Flash 的 SCK,SCK 頻率越高,相同間隔内所需 SCK 周期數就越多)。
Note1: 簡單來說,Dummy Cycle 就是 Flash 響應主機每一次讀時序所需要的準備時間,在 NOR Flash 上這個時間是固定且可設的,跟通路位址無關。 Note2: 一個确定的 Dummy Cycle 值決定了 Flash 上限工作頻率,但此時 Flash 并不是隻能在這個上限頻率下工作,低于這個上限頻率均可以。

DQS 信号正常是為 OctalSPI / HyperBus 型 Flash 工作在八線 DTR 模式下同步 DQ[7:0] 線輸出而生的(見上圖 Octal DDR 時序),關于其基本概念詳見痞子衡舊文 《DQS信号簡介》。
Note: 在 Hyper Flash 上負責 DQS 功能的信号是 RWDS。
當 OctalSPI / HyperBus 型 Flash 工作在 Octal DDR 模式下時,DQS/RWDS 信号會向主裝置(這裡指 i.MXRT)提示 DQ[7:0] 何時有效,是以這時候 DQS 信号其實也兼備了 Dummy Cycle 的作用。不過考慮到有時候主裝置端不一定會使能 DQS 信号,Dummy Cycle 的存在仍然是有必要的。
在 《FlexSPI外設的LUT機制》 和 《DTR模式下Dummy Cycle設定》 兩篇文章裡有詳細的關于 FlexSPI 外設中 Dummy Cycle 設定方法和 DQS 引腳功能配置方法介紹,但是這兩者是怎樣的聯系關系呢?
我們在 i.MXRT 參考手冊 FlexSPI 章節可以找到如下 Hyper Bus 讀時序示意圖(對于 Octal Flash 也基本适用,僅微小差別),這張圖很清晰地闡述了 RWDS 信号與 Latency Count 的聯系,FlexSPI 外設在發起實際讀時序時一定會輸出 DUMMY_DDR 子序列裡實際配置的延時周期,但如果配置的延時周期結束後,RWDS 有效信号還沒有到來,FlexSPI 會自動插入足夠的延時周期(即圖中所謂的 Additional Latency count)直到 RWDS 信号有效。
Note: 在 Hyper Flash 上不用 Dummy Cycle 術語,其術語是 Latency Count。
基于這樣的設計,當在 FlexSPI 裡使能外部 DQS 信号時,我們在 DUMMY_DDR 子序列裡隻要象征性地填一個比 Flash 裡 Latency Count 稍小的值就行了,在一些 i.MXRT 型号上理想情況下甚至可以去除 DUMMY_DDR 子序列(即 FlexSPI 端輸出的延時周期為 0),但切記這個值不應配得比 Flash 裡 Latency Count 大。
最近恩智浦 SE 團隊做了一個基于 i.MXRT1170 的 Auto Development Platform 原型闆,在 FlexSPI1 上挂的是來自 Micron 的 Octal Flash - MT35XU512,這顆 Flash 作為代碼存儲與啟動裝置。我們就在這個原型闆上測試一下 FlexSPI 外設的 DQS 與 Dummy Cycle 不同配置能否去正常啟動 Flash。
首先看一下這顆 Octal Flash 的基本情況,主要關注 DQS 和 Dummy Cycle 方面。Flash 内部有 256 個 8bit 的配置寄存器(address 從 0 - 255),其中 address 0 配置寄存器用于設定 Flash 工作模式(我們需要設為 0xE7,開啟 Octal DDR 且需要 DQS),address 1 配置寄存器用于設定 Dummy Cycle(可保持初值 0x00 不變,即使用預設 Dummy Cycle 值)。
再來看一下這顆 Octal Flash 所支援的讀指令,根據工作模式不同一共有 10 種指令,我們選用最後一條指令 4-byte DDR Octal I/O Fast Read(指令值 0xFD),這條讀指令可通路全部 Flash 空間且性能最高,其對應的預設 Dummy Cycle 是 16。
預設 16 的 Dummy Cycle 能支援多高的 Flash 工作頻率呢,在下表裡可找到答案,前面我們選擇的是 DDR Octal I/O Fast Read 指令,是以對應最高工作頻率可達 171MHz。雖然 Flash 本身可跑 200MHz DDR,但是 i.MXRT1170 FlexSPI 外設最大支援到 166MHz DDR,這就是在前面保持 Flash 中 address 1 配置寄存器值為預設 Dummy Cycle 的原因,預設 Dummy Cycle 配置已經夠用了。
基于上面對這顆 Octal Flash 的認識,我們很容易給出如下可用于啟動的 FDCB 頭,這個頭裡使能了 FlexSPI 端的外部 DQS 使用(octalflash_config.memConfig.readSampleClkSrc),開啟了 Flash 端的 Octal DDR 模式(octalflash_config.memConfig.deviceModeArg),LUT 裡第一條時序配置的是 0xFD 讀指令,并且 DUMMY_DDR 子序列等效配置的是 3 個 Dummy Cycle,低于 Flash 裡預設 16 個 Dummy Cycle,一切都符合上文的分析,這個啟動頭在闆子上實測是可以工作的。
現在我們做多一些實驗,修改上述啟動頭裡的 readSampleClkSrc、serialClkFreq 和 DUMMY_DDR 子序列值,其餘配置保持不變,測試結果如下,根據結果可以得出如下結論。這些結論基本是符合第二小節裡關于DQS和Dummy Cycle聯系關系總結的。
結論1:在 FlexSPI 裡不使能外部 DQS 時,LUT 裡 Dummy Cycle 必須要配置成 Flash 裡的值。i.MXRT1170 資料手冊裡表明此時 FlexSPI 最高支援到 66MHz DDR,但實測可達 100MHz DDR(沒有完全驗證)。 結論2:在 FlexSPI 裡 LUT 設定中對于 Octal Flash,DUMMY_DDR 模式參數值是 Flash 資料表裡 Dummy Cycle 的兩倍。 結論3:在 FlexSPI 裡使能外部 DQS 時,LUT 裡 Dummy Cycle 可配範圍比較大: - 最小值實測低速下(30MHz)甚至可以配為 0,高速下(166MHz)可以配為 0x2; - 最大值實測可以稍微超過一點 Flash 裡的 Dummy Cycle 值(不同速度略有差異),但絕不能超太多。
readSampleClkSrc
serialClkFreq
lookupTable[1]中DUMMY_DDR數值
注:DDR下2N值對應Flash裡N個dummy cycle
Flash啟動情況
LoopbackFromDqsPad
30MHz - 100MHz
0x20
正常啟動
非 0x20
無法啟動
大于 100MHz
ExternalInputFromDqsPad
30MHz
無,0x1 - 0x23
大于 0x23
166MHz
0x2 - 0x25
無,0x1,大于 0x25
至此,Octal或Hyper Flash上DQS信号與Dummy Cycle聯系痞子衡便介紹完畢了,掌聲在哪裡~~~
文章會同時釋出到我的 部落格園首頁、CSDN首頁、知乎首頁、微信公衆号 平台上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。
最後歡迎關注痞子衡個人微信公衆号【痞子衡嵌入式】,一個專注嵌入式技術的公衆号,跟着痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職于恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄内所有文章的轉載請注明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關注痞子衡的Github首頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關于專欄文章有任何疑問請直接在部落格下面留言,痞子衡會及時回複免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。