一. 前言
前面的文章https://mp.weixin.qq.com/s/wC79XEXMAK-3SGX8JkrFKw,完整的介紹了PSRAM的相關內(nèi)容,比如接口時序等,但是該文章內(nèi)容較多,需要花費一些時間慢慢閱讀。對于一些開發(fā)人員可能只是想大概了解一下PSRAM的關鍵信息點,或者說遇到問題了不知如何查起,想直接看看有沒有一些常見的坑,來對照排查自己的問題,本文就是針對此而寫。本文重點介紹PSRAM時序中幾個關鍵的點,也是沒有調(diào)試過PSRAM的開發(fā)人員可能會理解錯誤的點,以及時序的training算法等。每一個知識點都是從工程實踐出發(fā),都是真金白銀的干貨,基本上這一些信息就包括了可能遇到的大部分問題了,先看這篇文章,基本就能避免各種坑了。
注意以下以APS256XXN為例,其他芯片不排除略有差異,但是關鍵時序不會有差異都是一樣的。
二.PSRAM關鍵知識點
2.1 總線寬度
默認是x8模式,可以通過寄存器修改為x16模式。
但是命令字和地址的發(fā)送始終是8位模式的,不過抓包可以看到此時高8位內(nèi)容會和低8位的內(nèi)容完全一樣。
2.2 地址空間
對于x16模式,因為其單位是x16bits即2B,所以頁內(nèi)偏移地址即列地址,只需要CA[9:0]10位就足夠,可以表示2048字節(jié),而x8模式需要CA[10:0]11位表示2048字節(jié),行地址則不管是x8還是x16都是RA[13:0]。
又由于是DDR模式,即雙邊沿都傳輸數(shù)據(jù),所以數(shù)據(jù)的最小傳輸單位是一個CLK,一個CLK就對應兩個總線寬度,對于x8模式是2B,對于x16模式就是4B,所以x8和x16模式最小的數(shù)據(jù)傳輸大小就是2B和4B,即列地址的bit0 CA[0]必須始終是0。
寄存器操作沒有以上限制可以從任意寄存器開始,但是也要注意由于是DDR所以一個CLK,PSRAM會發(fā)出連續(xù)兩個寄存器的值,CLK不停則連續(xù)的兩個寄存器重復發(fā)出。
即對應下表
比如讀MA0則依次返回MR0和MR1,CLK不停則MR0和MR1重復返回.
2.3 命令地址的鎖存
在CE#變?yōu)長OW之后,指令字節(jié)在CE#拉低后**第一****個** **CLK上升沿被鎖存** **,** 注意這里是第一個上升邊沿,如果CE#拉低后首先出現(xiàn)的是CLK的下降沿則這個下降沿會略過,也是沒問題的。
按照時序要求,指令字節(jié)需要一直保持到第一個CLK上升沿之后的下降沿,然后保持一個保持時間tHD,但是實際測試可能只需要保持到第一個CLK上升沿并且保持保持時間tHD就就夠了。實際應用還是建議完全按照手冊要求來,一直保持到下降沿之后的保持時間,這樣確保安全。這里還要注意CE#拉低到CLK拉高有一個最小的tCSP時間(2nS)要求,還有CLK上升沿之前數(shù)據(jù)的最小建立時間tSP。
如下所示
地址在第三、第四、第五和第六CLK邊沿(第二CLK上升沿、第二CLK下降沿、第三CLK上升邊沿、第三CL下降沿)被鎖存,以上邊沿計數(shù)是從CE#拉低之后的CLK上升沿開始作為第一個CLK邊沿計數(shù)。
如下是一個實際的應用中抓取到的波形,CE#拉低之后首先出現(xiàn)的是CLK的下降沿,這也是沒問題的
2.4 寫數(shù)據(jù)-DM
注意DM和DQS是復用的,都是發(fā)送方驅動,但是DQS和DM的含義完全是不一樣的。
DQS是讀數(shù)據(jù)時PSRAM驅動,用于表示數(shù)據(jù)就緒,控制器這邊根據(jù)DQS的邊沿延遲一定時間進行數(shù)據(jù)采樣。
而控制器發(fā)送數(shù)據(jù),PSRAM并不是通過DM來采樣的,DM表示的是數(shù)據(jù)是否MASK掉,PSRAM是通過CLK的邊沿來采樣的,CLK的邊沿采樣再來結合此時DM電平表示對應的字節(jié)是否要寫入,如果DM為高則MASK掉指定字節(jié)不寫入。
所以結合DM可以實現(xiàn)單字節(jié)的寫入。
由于寫數(shù)據(jù)時是CLK邊沿采樣,且DM和數(shù)據(jù)是同時變化的,要相對CLK的邊沿有數(shù)據(jù)建立時間和保持時間分別是tDS,tDH。
如圖所示
2.5 讀數(shù)據(jù)-DQS
注意讀數(shù)據(jù)不一樣不再通過CLK的邊沿鎖存數(shù)據(jù),而是通過DQS來鎖存數(shù)據(jù)了。
讀數(shù)據(jù)時PSRAM同時更新DQS和總線信號,但是兩者信號類型不一樣,一個是時鐘信號一個是總線數(shù)據(jù)信號,所以其物理上經(jīng)過的路徑就是不一樣的,到達引腳時存在時間差,這個時間差就是tDQSQ,比如對于166MHz這個值就是最大不超過0.5nS,所以接收方需要在DQS的邊沿延時該時間之后再采樣才能保證采樣到正確的數(shù)據(jù)。大部分讀不到數(shù)據(jù)基本都是接收方這個時間設置不對,正常來說接收方會有一個PHY可以通過寄存器配置該時間,接收training也就是不斷調(diào)整該時間然后確定一個合適的中間的值。
2.6 x8和x16的存儲映射
不管是x8還是x16模式頁的大小都是2K,但是x8模式和x16模式數(shù)據(jù)在頁內(nèi)的放置是不一樣的。
X8模式按照字節(jié)序列寫入頁內(nèi)的0~2047字節(jié)
X16模式則1字節(jié)寫入頁內(nèi)的01022處,另外字節(jié)寫入頁內(nèi)的10232047處。
所以要注意如果動態(tài)切換模式,則讀出的數(shù)據(jù)內(nèi)容就不一樣了。
2.7 讀寫數(shù)據(jù)的長度
普通模式讀寫數(shù)據(jù)最長由Burst Type決定,不能超過一個PAGE的大小;
寫最小長度是一個CLK對應的長度,x8模式就是一個CLK兩個邊沿2字節(jié),X16模式就是一個CLK兩個邊沿2x2=4字節(jié);讀沒有最小長度限制。寫數(shù)據(jù)可以結合DM來MASK寫入單字節(jié),而讀數(shù)據(jù)沒有MASK。讀寫數(shù)據(jù)的開始地址和長度要是2(x8)或者4(x16)字節(jié)對齊。
讀寫數(shù)據(jù)如果是使能了RXB且使用Linear Burst 讀寫模式則理論上讀寫最長字節(jié)數(shù)沒有限制,但是要受限于tCEM即CE拉低的時間限制
對于標準溫度最長CE可以拉低4uS,如果算200MHz時鐘,4uS有 800個CLK,不考慮命令地址,延遲等時間,800個CLK最多可以傳輸800x2x2個字節(jié)。
如果是擴展溫度1uS,算200MHz時鐘,4uS有200個CLK,不考慮命令地址,延遲等時間,200個CLK最多可以傳輸200x2x2個字節(jié)。
所以也不多,一般都是一次傳輸讀寫256個字節(jié)。
2.8 training
所謂的training就是針對讀和寫兩個關鍵的時序參數(shù)來進行
讀即DQS延遲tDQSQ時間之后再進行采樣
寫即數(shù)據(jù)在CLK邊沿tDS之前建立,都是數(shù)據(jù)建立時間的概念。
根本原因是因為時鐘信號和數(shù)據(jù)總線信號走的路徑不一樣,所以出現(xiàn)在引腳上的時刻也不一樣(內(nèi)部邏輯電路是時序邏輯電路都是在時鐘的邊沿進行數(shù)據(jù)更新的,理論上數(shù)據(jù)源是同步的)。
對于發(fā)送時,控制器的邏輯電路修改數(shù)據(jù)是在CLK邊沿進行的,但是傳播到引腳上時數(shù)據(jù)較CLK延后了,哪怕不延后數(shù)據(jù)也最多只能和時鐘保持同步,不能滿足數(shù)據(jù)建立時間要求,所以就要人為的在CLK的輸出路徑上加上延遲,以滿足建立時間的要求。
對于接收,同樣的道理,數(shù)據(jù)在出現(xiàn)在引腳上時已經(jīng)滯后DQS了,這個時間就是tDQSQ,所以不能DQS邊沿采樣了,需要延遲一段時間采樣,所以需要在DQS的輸入路徑上人為的添加延遲。
這兩個延遲是由PHY去控制的,會提供寄存器接口給軟件控制,軟件就是控制這兩個延遲時間來進行training。
所謂的training就是,不斷嘗試讀寫,通過判斷讀是否正確,來判斷參數(shù)是否合適,得到一個范圍的參數(shù),取中間值。修改這兩個時序如果能正確讀寫就認為這個參數(shù)可行,然后在所有可行的參數(shù)中取中間值,以獲得較高的冗余度。讀寫是否正確一般通過讀某個有固定值的寄存器來確定。
具體算法如下:
由于有兩個參數(shù),一個決定發(fā)送,一個決定接收,由于一次傳輸比如讀寄存器,需要先發(fā)送命令地址,然后讀,涉及到兩個過程,任意一個過程錯誤都不能讀到正確的數(shù)據(jù)。
所以兩個參數(shù)都需要遍歷嘗試,實際就是兩層嵌套遍歷。
一般可以讀內(nèi)容是固定的寄存器,比如廠商ID對應的寄存器,假設CLK延遲參數(shù)可以配置為099,DQS延遲參數(shù)可配置為099
那么組合就有100*100次嘗試,也可以增加遞增間隔以減少嘗試次數(shù)。
先固定CLK延遲,遍歷DQS延遲,記錄能讀到正確數(shù)據(jù)的DQS延遲范圍
再遞增CLK延遲,遍歷DQS延遲,記錄能讀到正確數(shù)據(jù)的DQS延遲范圍
在所有能讀到正確數(shù)據(jù)的DQS延遲范圍中選擇范圍最寬的,取其范圍的中間的DQS延遲值作為最終的DQS延遲值。
在所有能讀到正確數(shù)據(jù)的CLK延遲中取中間的CLK延遲值作為最終的CLK延遲值。
三. 實測波形
如下地址有使用邏輯分析抓包的實際PSRAM讀寫寄存器和數(shù)據(jù)的波形記錄,可以參考。
注意這些記錄波形是實際測試過程中抓取的,不是最終的最好狀態(tài),不能作為標準波形參考,標準波形需要參考手冊。
鏈接:https://pan.baidu.com/s/1HHGEvwz_NHT_tra4ONe-RQ?pwd=45b9
提取碼:45b9
四. 總結
以上分享了PSRAM接口一些關鍵的知識點,大部分是容易理解錯誤,且導致問題的點,基本上理解這些點就能解決大部分問題了,作為入門參考也可以先看這篇,先有個大概了解。作為遇到問題不知如何解決時也可以參考這篇文章,基本上能解決大部分問題。
審核編輯:湯梓紅
-
嵌入式
+關注
關注
5082文章
19126瀏覽量
305302 -
接口
+關注
關注
33文章
8605瀏覽量
151194 -
PSRAM
+關注
關注
0文章
35瀏覽量
13351 -
時序
+關注
關注
5文章
387瀏覽量
37335
發(fā)布評論請先 登錄
相關推薦
評論