大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是i.MXRT中FlexSPI外設不常用的讀選通採樣時鐘源 - loopbackFromSckPad。 最近碰到一個客戶,他們在 i.MXRT500 上使能了 FlexSPI->MCR0[RXCLKSRC] = 2(即 loopbackF ...
大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家分享的是i.MXRT中FlexSPI外設不常用的讀選通採樣時鐘源 - loopbackFromSckPad。
最近碰到一個客戶,他們在 i.MXRT500 上使能了 FlexSPI->MCR0[RXCLKSRC] = 2(即 loopbackFromSckPad),這個選項字面上的意思是設置讀選通採樣時鐘源為 SCK 引腳,這個選項在恩智浦官方的代碼包里未曾使能過。客戶在使用過程中遇到高頻時 SCK 引腳被降壓的問題(從正常的 1.8V 降至 1.2V),那麼這個 loopbackFromSckPad 選項到底是什麼作用以及有什麼使用限制呢?且聽痞子衡道來:
- Note1: 參考手冊里顯示支持 loopbackFromSckPad 選項的型號有 i.MXRT1040/1050/1060/1064/1180/500
- Note2: 參考手冊里沒有提及支持 loopbackFromSckPad 選項的型號有 i.MXRT1010/1015/1020/1024/1160/1170/600
一、為什麼存在Read Strobe?
對於串列 SPI 介面存儲器,FlexSPI 外設主要支持如下兩種讀數據時序:一是所謂的經典 SPI 模式,IO0 (MOSI) 專用於發送命令和地址,IO1 (MISO) 專用於接收數據(圖中上面的時序)。二是 Multi-I/O SPI 模式,SIO[n:0] 一起用於發送命令地址以及接收數據(圖中下麵的時序)。
顯然經典 SPI 模式下 IO[1:0] 是單向的,而 Multi-I/O SPI 模式下,SIO[n:0] 是雙向的。當 SIO 用於雙向傳輸時,過程中必然存在引腳方向切換,而 FlexSPI 外設在處理 SIO 方向切換時無法做到零等待周期讀取數據,這就是為什麼 Multi-I/O SPI 讀時序中總是會存在 Dummy 周期。
因為 Dummy 周期的存在,FlexSPI 外設內部實際上有一個 Read Strobe 信號(即 DQS)來控制數據的選通性(即什麼時候開始數據有效,將數據存入內部 FIFO)。更直白點說,Read Strobe 信號的存在就是由於 FlexSPI 外設無法支持如下這種情況的讀時序(下圖中 COMMAND 實際應為 COMMAND&ADDR)。
二、FlexSPI內部Read Strobe設計
在 i.MXRT 參考手冊里有如下 FlexSPI 前端採樣單元框圖,其中 ipp_ind_dqs_fa/b_int[x] 即是 Read Strobe 信號,它控制著 FIFO 中實際數據的存儲。
ipp_ind_dqs_fa/b_int[x] 信號共有四種來源,最原始的信號源由 FlexSPI->MCR0[RXCLKSRC] 選擇,中間可能還會經過 DLLxCR 單元(這部分以後會另寫文章單獨介紹)、Phase Chain 單元做處理,然後送到採樣單元里。
下圖是 FlexSPI->MCR0[RXCLKSRC] = 0 的情況,此時 Read Strobe 經由 ipp_do_dqs0_fa/b 純內部 loopback 回來,沒有經過任何延遲單元。這種配置一般僅用於經典 SPI 傳輸模式(低速 60MHz SDR 場合),適用低容量 SPI NOR / EEPROM,這時候 FlexSPI DQS Pad 可用作其它功能或者 GPIO。
下圖是 FlexSPI->MCR0[RXCLKSRC] = 1 的情況,此時 Read Strobe 經由懸空的 DQS 引腳 ipp_do_dqs1_fa/b 再 loopback 回來,此時有了 DQS 引腳繞一圈的延遲。這種配置可用於 Multi-I/O SPI 傳輸模式(較高速 133MHz SDR 場合),適用不含 DQS 引腳的大容量 QuadSPI NOR Flash,但是 FlexSPI DQS Pad 需要懸空。
- Note: 痞子衡有一篇舊文 《使能串列NOR Flash的DTR模式》 跟這種配置相關,這時候 dummy cycle 數的設置很關鍵。
下圖是 FlexSPI->MCR0[RXCLKSRC] = 3 的情況,此時 Read Strobe 完全由外部存儲器的 DQS 引腳輸出 ipp_ind_dqs3_fa/b 直通進來。這種配置可用於 Multi-I/O SPI 傳輸模式(最高速 166MHz/200MHz DDR 場合),適用於包含 DQS 引腳的 OctalSPI NOR Flash,這時 FlexSPI DQS Pad 與外部存儲器相連。
- Note: 痞子衡有兩篇舊文 《串列NOR Flash的DQS信號功能》、《啟動含DQS的Octal Flash可不嚴格設Dummy Cycle》 跟這種配置相關。
三、loopbackFromSckPad選項意義
前面鋪墊了那麼多,終於來到本文的主題了,即下圖 FlexSPI->MCR0[RXCLKSRC] = 2 的情況,此時 Read Strobe 經由 SCK 引腳 ipp_ind_sck_fa/b 再 loopback 回來,此時有了 SCK 引腳繞一圈的延遲。
這種配置從應用角度與 FlexSPI->MCR0[RXCLKSRC] = 1(即 loopbackFromDqsPad) 差不多,也可用於 Multi-I/O SPI 傳輸模式(較高速 133MHz SDR 場合),適用不含 DQS 引腳的大容量 QuadSPI NOR Flash,但是這時候 FlexSPI DQS Pad 被解放出來了,這也是它的最主要意義。
別小看只是省了一個 DQS 引腳,也許你認為 i.MXRT I/O 那麼多,省一個引腳意義不大,但是如果某些 FlexSPI 引腳組不帶 DQS 信號,你又想配置 FlexSPI 以 60MHz 以上頻率去訪問 Flash,這時候 FlexSPI->MCR0[RXCLKSRC] = 2 選項就會幫上大忙了,見痞子衡舊文 《不支持DQS的FlexSPI引腳組連接串列NOR Flash註意事項》。
四、loopbackFromSckPad使用限制
FlexSPI->MCR0[RXCLKSRC] = 2 選項雖好,但有如下兩個實際使用限制:
- 存在信號完整性問題:主要出現在 SCK 頻率過高或者板級 PCB 上 SCK 信號走線過長時。
- SCK自由運行模式下不可用:對於某些 FPGA 應用,有時需要設置 FlexSPI->MCR0[SCKFREERUNEN] = 1,即 SCK 需要持續給外部設備內部 PLL 提供參考時鐘。
至此,i.MXRT中FlexSPI外設不常用的讀選通採樣時鐘源 - loopbackFromSckPad痞子衡便介紹完畢了,掌聲在哪裡~~~
歡迎訂閱
文章會同時發佈到我的 博客園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜索"痞子衡嵌入式"或者掃描下麵二維碼,就可以在手機上第一時間看了哦。
最後歡迎關註痞子衡個人微信公眾號【痞子衡嵌入式】,一個專註嵌入式技術的公眾號,跟著痞子衡一起玩轉嵌入式。
衡傑(痞子衡),目前就職於恩智浦MCU系統部門,擔任嵌入式系統應用工程師。
專欄內所有文章的轉載請註明出處:http://www.cnblogs.com/henjay724/
與痞子衡進一步交流或咨詢業務合作請發郵件至 [email protected]
可以關註痞子衡的Github主頁 https://github.com/JayHeng,有很多好玩的嵌入式項目。
關於專欄文章有任何疑問請直接在博客下麵留言,痞子衡會及時回覆免費(劃重點)答疑。
痞子衡郵箱已被私信擠爆,技術問題不推薦私信,堅持私信請先掃碼付款(5元起步)再發。