1. 程式人生 > >DDR(六)DDR2初始化原始碼分析_2

DDR(六)DDR2初始化原始碼分析_2

14-25步的SDRAM有些就讓人摸不著頭腦了,因為說得不詳細(因為詳細了可就有的說了涉及的知識非常多,不過做的不好的就是沒有提示在哪裡可以得到相關資料),而且暫存器的配置說明講額也不是很清楚

這些步驟主要是對暫存器DirectCmd的操作,貼上這個的暫存器的操作:

cmd_type和cmd_chip 按照相關的命令設定就可以了,而後面的  cmd_bank    cmd_addr  就說的不清不楚了,根本就不知道該如何配置,如:17. Issue an EMRS2 command using the DirectCmd register to program the operating parameters.,表中明明沒有與EMSR2的命令啊!!

原來這幾個項基本上是為MRS和EMRS這兩個命令服務的,這兩個命令操作這幾個暫存器:模式暫存器(MSR)、擴充套件模式暫存器(1)(EMRS(1))、擴充套件模式暫存器(2)(EMRS(2))、擴充套件模式暫存器(3)(EMRS(3)),所以EMSR2命令其實是表示使用EMSR命令對擴充套件模式暫存器(2)進行操作,其他操作類似

程式設計(擴充套件)模式暫存器
為了增強使用靈活性, 突發長度, 突發型別, /CAS延遲, DLL 復位功能, 寫恢復時間(WR) 都是可以定義的變數。通過預先程式設計模式寄存
此之外, DLL 禁止功能, 驅動電阻, 附加 CAS 延遲, ODT(終結電阻), 單線選通, 和 OCD(片外驅動電阻調整) 同樣也是可以定義的變
模式暫存器就可以設定它們. 模式暫存器或者擴充套件模式暫存器的內容可以通過對他們進行重新設定來改變它們 .如果使用者只是想改變寄存
也必須通過MRS或EMRS命令對全部暫存器位進行重新設定。
MRS, EMRS和t DLL 復位這些命令並不會影響儲存陣列的內容,這意味著上電後的任意時間執行初始化操作不會改變儲存的內容 。(資料上的解釋,瞭解一下)

到這裡,應該可以猜測表中cmd_bank    cmd_addr 這兩欄的作用了,cmd_bank這欄決定了使用哪一個MRS和EMRS命令,如MRS、EMSR1或EMSR2或EMSR3;cmd_add這一項的每一位則對應了相應的設定,具體使用下面繼續介紹。(參考了一份”DDR2 SDRAM操作時序規範“的資料,我才弄明白了這回事,下面有應用資料內容)

DDR2 SDRAM 模式暫存器設定 (MRS)
模式暫存器中的資料控制著 DDR2 SDRAM的操作模式.它控制著 CAS 延遲, 突發長度, 突發順序, 測試模式, DLL復位, WR等各種選項,支援著 DDR2
SDRAM 的各種應用. 模式暫存器的預設值沒有被定義, 所以上電之後必須按規定的時序規範來設定模式暫存器的值. 通過將  CS, RAS, CAS, WE, BA0 ,
BA1置低來發布模式暫存器設定命令, 運算元通過地址腳 A0 ~ A15同步送出. DDR2 SDRAM 在寫模式暫存器之前,應該通過拉高CKE而完成了所有簇的裕充
電。模式暫存器設定命令的命令週期  (tMRD)必須滿足完成對模式暫存器的寫操作。在進行正常操作時,只要所有的簇都已經處於預充電完成狀態,模式寄存
器都可以使用同一命令重新設定. 模式暫存器不同的位表示不同的功能. A0 ~ A2 設定突發長度是4還是8。 突發長度的譯碼規則與DDR SDRAM相同. A3定義
了突發地址順序。A4 ~ A6定義了CAS延遲。. DDR2不支援半時鐘延遲。 A7 設定測試模式. A8設定 DLL 復位。 對通常的 MRS操作,A7必須設定為低。
A9 ~ A11定義了寫恢復時間WR. 詳細情況見下面的示意圖:

從上面的表格就很清楚了,BA2、BA1、BA0對應的是cmd_bank 欄,A15-A0則對應了cmd_addr ;

DDR2 SDRAM 擴充套件模式暫存器設定
EMRS(1)
擴充套件模式暫存器(1) 儲存著啟用或禁止DLL的控制資訊, 輸出驅動強度, ODT 值的選擇 和附加延遲等資訊. 擴充套件暫存器(1)的預設值沒有被定義, 因此,
上電之後,擴充套件模式暫存器(1)的值必須按正確的步驟來設定。 寫擴充套件模式暫存器(1)是通過拉低CS, RAS, CAS, WE ,置襖 BA0, 同時控制地址線
A0 ~ A13的狀態。 在寫擴充套件模式暫存器(1)之前,DDR2 SDRAM 應該通過將 CKE拉高完成所有簇的預充電。擴充套件模式暫存器(1)設定命令的命令周
期  (tMRD)必須滿足完成對擴充套件模式暫存器(1)的寫操作。在進行正常操作時,只要所有的簇都已經處於預充電完成狀態,擴充套件模式暫存器(1)都可以使
用同一命令重新設定.. A0控制著DLL 啟用或禁止。 A1被用於啟用資料輸出驅動能力為一半。A3~A5 決定著附加延遲, A2和 A6 用語 ODT 值的選定,
A7~A9 用於控制 OCD, A10 被用於禁止  DQS#, A11 被用於 RDQS 的啟用。
DLL 啟用/禁止
對通常的操作, DLL必須被啟用。在上電初始化過程中,必須啟用  DLL, 在開始正常操作時,要先關閉DLL。在進入自我重新整理操作時,DLL會被自動禁止,
當結束自我重新整理時,DLL會被自動啟用。一旦 DLL被啟用(隨之將復位),為了使外部時鐘和內部始終達到同步,在釋出讀命令之前必須至少要過200個
時鐘週期。沒有等待同步可能會導致tAC 或 tDQSCK引數錯誤。
EMRS(2)
擴充套件模式暫存器r(2)控制著重新整理和相關的特性。擴充套件模式暫存器(2)的預設值沒有被定義, 因此在上電後,必須按規定的時序對擴充套件模式暫存器 (2) 進行設定。通
過拉低S, RAS, CAS, WE,置高 BA1 拉低 BA0來發布擴充套件模式暫存器(2)的設定命令。同時控制地址線A0 ~ A15的狀態. 在寫擴充套件模式暫存器(2)之前,
DDR2 SDRAM 應該通過將 CKE拉高完成所有簇的預充電。擴充套件模式暫存器(2)設定命令的命令週期  (tMRD)必須滿足完成對擴充套件模式暫存器(2)的寫
操作。在進行正常操作時,只要所有的簇都已經處於預充電完成狀態,擴充套件模式暫存器(2)都可以使用同一命令重新設定.

上圖有些位沒有使用,是保留位

有了上面的知識提示,應該就可以比較沒有障礙得對SDRAM進行初始化,資料中的SDRAM的初始化過程與DATASHEET裡面的步驟基本相同,貼上來:

上電和初始化時序
1. 對於上電和初始化來說,下列時序是必須的。(應該說的是DATASHEET裡面的第1步)
供電且保持CKE 低於 0.2*VDDQ , ODT*1 要處於低電平狀態 (所有的其餘腳可以都沒有定義.) 電源上升沿不可以有任何翻轉,上升沿時間不能大於 200mS;
並且要求在電壓上升沿過程中滿足, VDD>VDDL>VDDQ且 VDD-VDDQ<0.3 volts.
- VDD
*2, VDDL
*2 和 VDDQ必須由同一個電源晶片供電, 並且
- VTT 最大隻能到 0.95 V, 並且
- Vref 要時刻等於 VDDQ/2.,緊跟VDDQ變化。
或者
-在給 VDDL上電的同時或之前就給VDD
*2
.上電
-在給  VDDQ上電的同時或之前就給VDDL
*2
上電
-在給VTT & VREF上電的同時或之前就給VDDQ上電.
上面的兩個條件至少要滿足一個。
2. 開始時鐘訊號並保持訊號穩定.
3.在穩定電源和時鐘(CK, /CK)之後至少200s, 然後釋出 NOP 或者取消選定命令  &拉高CKE.
4. 等待至少 400ns然後釋出預充電所有簇命令.在等待的400ns過程中要釋出NOP或者取消選定命令.
5. 釋出 EMRS(2)命令. (EMRS(2) 命令, 需要將 BA0拉低, 將 BA1拉高.)
6. 釋出 EMRS(3) 命令. (為了釋出EMRS(3)命令,將 BA0和 BA1拉高.)
7.釋出 EMRS命令以啟用 DLL. (為了釋出"DLL啟用" 命令,將 A0拉低, BA0拉高 並且將 BA1-2和 A13-A15置低.)
8. 釋出MRS命令實現  “DLL復位”
*2.
(為了釋出DLL 復位命令, 需要將 A8拉高 並使 BA0-1為低)
9. 釋出預充電所有簇命令。
10. 至少釋出兩次自動重新整理命令.
11. 將 A8拉低,釋出模式暫存器設定命令(MRS)對晶片進行初始化操作. (也就是不對 DLL復位,程式設計晶片的操作引數)
12.在第8步之後至少過200個時鐘週期,執行OCD 校準 ( 片外驅動電阻調校 ).
如果不使用OCD校準, EMRS OCD 校準模式結束命令 (A9=A8=A7=0) 必須在EMRS OCD預設命令 (A9=A8= A7=1)之後釋出,用來設定EMRS的其它操
作引數。
13. 現在, DDR2 SDRAM 就準備好可以進行普通的操作了。.
*1) 為了保證 ODT關閉, VREF必須有效 並且 ODT腳必須拉低.
*2) 如果 VDDL或VDD 的電平值在正常操作過程中人為改變, (例如e, 為了 VDD 相交測試, 或者節省功率)
則必須執行“DLL 復位”.