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