在了解了sdram的構成原理之后,我們來針對某一款ddr芯片來看看其的內部結構和操作方法,首先來針對一款ddr的芯片看看其硬件的組成的結構。現在以K4T1G084QQ這顆DDR2的芯片為例,此芯片采用的是設計為16MBit×8BANK×8I/Os,共128MByte
| 管腳功能 | 管腳名稱 | 類型 | 描述 |
| 時鍾信號 | CK/nCK | input | 系統時鍾差分輸入引腳,所有的地址和控制信號在CK的上升沿或者nCK的下降沿采樣,輸出數據在CK或者nCK的電平發生變化時被采樣 |
| 時鍾使能信號 | CKE | input | 內部時鍾使能信號,高電平有效,當系統處於掉電、掛機等狀態時關閉SDRAM |
| 片選信號 | nCS | input | 使能或者禁止所有的引腳,當該引腳為高電平時,所有命令失效 |
| 內部核心終結電阻信號 | ODT | input | 設置為高電平時使能終端電阻匹配 |
| 讀寫信號 | nWE | input | 低電平表示寫,高電平表示讀操作 |
| 行地址信號 | nRAS | input | 行地址信號 |
| 列地址信號 | nCAS | input | 列地址信號 |
| 輸入數據控制信號 | DM | input | 當向SDRAM寫入數據時來控制數據的輸入,在高電平時被采樣,如果有不想存入的數據,可以運用此引腳信號來屏蔽 |
| bank選擇控制信號 | BA0-BA2 | input | 這三個引腳決定SDRAM中哪一個Bank被選中激活 |
| 數據信號 | DQ[0:7] | input/output | 雙向數據輸入輸出引腳 |
| 數據輸入/輸出 控制位 | DQS/nDQS | input/output | 在數據讀模式下控制數據輸出 在數據寫模式下禁止寫數據 |
| 電源信號 | VDD/VDDQ/VDDL/VREF | input | 控制電源 |
| 地信號 | Vss/Vssq/Vssl | input | 地信號 |
對於計算機系統,我們不可能是一個bit一個bit的訪問,一般而言,32 bit的CPU可能是按照Byte(8個bit)、short int(16個bit)或者int(32個bit)進行數據訪問。基於這樣的概念,對於K4T1G084QQ這顆chip,輸出數據總線的寬度是8bit,如果要使用一個32bit的系統,那么可以采用4片連接的組成一個32位的數據,第1片的8位數據引腳連接至CPU的Xm1DATA0-Xm1DATA7;第2片的8位數據引腳連接至CPU的Xm1DATA8-Xm1DATA15;第3片的8位數據引腳連接至CPU的Xm1DATA16-Xm1DATA23;第4片的8位數據引腳連接至CPU的Xm1DATA24-Xm1DATA31,其命令和控制線采用公用的方式即可。
對於一款ddr,我們需要知道通過什么樣的方式來控制完成我們需要,我們來看看ddr的狀態,ddr的工作就是在這幾個狀態之間切換

在芯片上電后,芯片處於idle階段,上圖是需要進入各個階段的時候,應該需要進行那些基本的操作,對於ddr使用比較頻繁的幾個基本命令訪問方式如下
1. 自我刷新模式:當系統進入低功耗模式,只需要發送一條 SRF指令,主要用於休眠模式低功耗狀態下的數據保存,比較常見的應用是STR(Suspend to RAM,休眠掛起於內存)。就進入了該模式,此時不再依靠系統時鍾工作,而是根據內部的時鍾進行刷新操作。期間除了CKE之外的所有外部信號都是無效的(無需外部提供刷新指令),只有重新使CKE有效才能退出自刷新模式並進入正常操作狀態
2. 刷新模式:儲體中電容的數據有效是有時間限制的,所以為了保證數據的不丟失,所以要對ddr進行定時的刷新,SDRAM內部有一個行地址生成器(也稱刷新計數器)用來自動的依次生成行地址。由於刷新是針對一行中的所有存儲體進行。
3. MRS模式(mode register set):模式寄存器中的數據控制着 DDR2 SDRAM的操作模式.它控制着 CAS 延遲, 突發長度, 突發順序, 測試模式, DLL復位, WR等各種選項,支持着 DDR2 SDRAM 的各種應用. 模式寄存器的默認值沒有被定義, 所以上電之后必須按規定的時序規范來設定模式寄存器的值。
4. EMRS 擴展模式寄存器(1) 存儲着激活或禁止DLL的控制信息, 輸出驅動強度, ODT 值的選擇 和附加延遲等信息
5. 讀/寫操作:對 DDR2 SDRAM的訪問是基於突發模式的; 讀寫時,選定一個起始地址,並按照事先編程設定的突發長度(4或8)和突發順序來依次讀寫.訪問操作開始
一個激活命令, 后面緊跟的就是讀或者寫命令。和激活命令同步送達的地址位包含了所要存取的簇和行 (BA0, BA1 選定簇; A0-A13 選定行). 和讀或寫命令
同步送達的地址位包含了突發存取的起始列地址 ,並決定是否發布自動預充電命令。
其操作指令如下圖

那么我們怎么去實現一個ddr的驅動呢?下載一份ddr的spec來看看,一頭霧水,基本沒有可以配置地方,除了一些硬件管腳,電壓參數之外,全部是一些關於timing的參數設定,那么對於這塊全部落在ddr controller的身上,即ddr controller一方面要完成指令的操作,同時肩負着ddr timing的各個參數設定,同時這些參數時刻關系着我們程序的穩定性,那么對於ddr控制器,對於軟件重點的就是配置這些參數

