1 SDRAM原理分析
本節先介紹了SDRAM的基本原理,然後介紹了一個具體SDRAM芯片HY57V641620HG的特性和引腳描述。
1.1 SDRAM介紹
DRAM是動態存儲器Dynamic RAM的縮寫,SDRAM是Synchronous DRAM的縮寫,中文就是同步動態存儲器的意思。從技術角度上講,同步動態存儲器(SDRAM)是在現有的標準動態存儲器中加入同步控制邏輯(一個狀態機),利用一個單一的系統時鐘同步所有的地址數據和控制信號。使用SDRAM不但能提高系統表現,還能簡化設計、提供高速的數據傳輸。在功能上,它類似常規的DRAM,且也需時鐘進行刷新。可以說,SDRAM是一種改善了結構的增強型DRAM。SDRAM 的存儲單元可以理解爲一個電容,總是傾向於放電,爲避免數據丟失,必須定時刷新(充電)。由此可見,要在系統中使用SDRAM,就要求微處理器具有刷新控制邏輯,或在系統中另外加入刷新控制邏輯電路。SDRAM是多個Bank結構的,一般是一個Bank正在使用,其他Bank處於預充電狀態,這樣輪流讀寫和充電就不需要等待了,大大提高了存儲器的訪問速度。但是要實現這個功能,還必須增加對多個Bank的管理模塊,控制Bank來進行預充電,所以在在多個Bank的SDRAM中,會有多根Bank的選擇引腳。
1.2 HY57V641620HG的結構
HY57V641620HG是一個8MB的CMOS同步DRAM,尤其適合大容量存儲和高帶寬的存儲場合。HY57V641620HG分爲4個Bank,每個Bank大小爲2MB。它所有的輸入和輸出是和時鐘輸入上升沿同步的,且電平與LVTTL相兼容。內部數據通道提高了帶寬。特性如下:
l 單電源供電,電壓3.0V~3.6V
l 54引腳TSOP II封裝
l 所有引腳與LVTTL接口兼容
l 所有輸入輸出參考系統時鐘
l 具有UDQM或LDQM數據屏蔽功能
l 可編程脈衝寬度和脈衝類型
l 可編程CAS#反應時間
l 自動刷新和自我刷新功能
l 64ms 內4096個自動刷新週期
1 引腳分配圖
引腳描述如表所示。
表 RAM引腳描述
引腳 |
引腳名 |
描述 |
CLK |
時鐘 |
系統時鐘輸入 |
CKE |
時鐘使能 |
內部時鐘控制信號 |
CS# |
片選 |
禁止/使能除CLK、CKE和DQM的所有輸入 |
BA0、BA1 |
Bank地址 |
選擇某個Bank,00~11分別對應Bank0~Bank1 |
RAS# |
行地址選擇 |
RAS#爲行地址選擇,當爲低電平時行地址單元 使能 |
CAS# |
列地址選擇 |
CAS#爲行地址選擇,當爲低電平時行地址單元使能 |
WE# |
寫使能 |
WE#爲低時,允許寫操作 |
LDQM/UDQM |
數據輸入/輸出屏蔽 |
|
DQ0~DQ15 |
數據輸入/輸出 |
輸入和輸出數據 |
VDD/VSS |
電源/地 |
內部電路和輸入緩衝電源供電 |
VDDQ/VSSQ |
數據輸出電源/地 |
輸出緩衝電源供電 |
NC |
未連接 |
不使用,懸空即可 |
2 接口電路與程序設計
本節講述了HY57V641620HG SDRAM與S3C44B0X的電路連接方式和S3C44B0X上存儲器控制器寄存器的設置,對於SDRAM的讀寫操作只需一對讀寫宏就能完成,最後由在一個Main函數中測試了讀寫操作宏的正確性。
2.1 電路連接
要在系統中使用SDRAM,要求微處理器具有刷新控制邏輯,或在系統中另外加入刷新控制邏輯電路。S3C44B0X及其他一些ARM芯片在片內具有獨立的SDRAM刷新控制邏輯,可方便地與SDRAM相連接。
SDRAM連接電路圖如2所示,它接在Bank6上。HY57V641620HG分成4個Bank;每個Bank的容量爲1M×16位。Bank的地址由BA1和BA0決定,00對應Bank0、01對應Bankl、10對應Bank2、 11對應Bank3。在每個Bank中,分別用行地址脈衝選通RAS和列地址脈衝選通CAS進行尋址。HY57V641620HG的行地址取地址線A0~A11位,即RA0~RA11;列地址取地址線低8位,即CA0~CA7。SDRAM由S3C44B0X專用SDRAM片選信號nSCS0/nGCS6選通,地址空間爲0x0C000000~0x0C7FFFFF。
2 SDRAM連接電路圖
2.2 硬件和寄存器設置
由於HY57V641620HG接在Bank6上,首先應當設置BWCON寄存器的第27位~第24位,即ST6、WS6和DW6。ST6決定Bank6上的SRAM是否採用UB/LB,默認爲不採用,本實例默認即可,WS6決定Bank6的等待是否使能,默認爲禁止等待,本實例也默認即可。DW6時決定Bank6的數據總線寬度。根據HY57V641620HG,本實例將其配置爲16位的數據總線寬度,即DW6 = 01。
BANKCON寄存器中的MT位在第四章已經介紹過,將其配置爲SDRAM,即MT = 11。Trcd位設置爲00,即RAS#信號到CAS#信號的延遲時間爲2個時間週期。SCAN位根據HY57V641620HG芯片需設置爲8位列地址線。這裏還要根據處理器主頻來計算刷新計數器REFRESH[10:0]位。計算公式見第四章表4-8。
BANKSIZE寄存器中的SCLKEN位可以取默認值0,也可以爲1,在這取1,即減少功耗。BK76MAP位取默認值000剛好滿足要求,即32MB/32MB。各寄存器參數設置如下:
;BANKCON6寄存器參數
B6_MT EQU 0x3 ;SDRAM
B6_Trcd EQU 0x0 ;2個時鐘週期
B6_SCAN EQU 0x0 ;8bit
;REFRESH寄存器參數
REFEN EQU 0x1 ;刷新使能
TREFMD EQU 0x0 ;CBR/自動刷新
Trp EQU 0x0 ;2個時鐘週期
Trc EQU 0x1 ;5個時鐘週期
Tchr EQU 0x2 ;3個時鐘週期
;REFCNT = 2048 + 1 - MCLK(MHz) * 16
REFCNT EQU 1049 ;刷新週期爲16us, MCLK=64MHz 根據系統時鐘計算
;SDRAM的刷新數率
;BANKSIZE寄存器參數
SCLKEN EQU 0x1 ;減少功耗
BK67MAP EQU 0x000 ;Bank6和Bank7映射關係爲32MB/32MB
;MRSR寄存器參數
B6_WBL EQU 0x0 ;寫脈衝長度爲0
B6_TM EQU 0x00 ;模式寄存器設置
B6_CL EQU 0x010 ;CAS#延遲時間爲2個時間週期
B6_BT EQU 0x0 ;序列脈衝
B6_BL EQU 0x0 ;脈衝長度爲1
2.3 程序的編寫
ARM處理器能自動產生刷新、讀寫SDRAM的時序,所以本程序比較簡單,只要將字符“a”寫入0x0cf00000起始的10個地址空間的RAM中,再讀取出來校驗即可。注意0x0c000000爲SDRAM的起始地址,爲保護靠近0x0c000000的運行的程序,實例進行讀寫的空間要取大一些,這裏取0x0cf00000。程序主體如下:
#define WriteSdram(address,data) *((volatile U8 *)(address))=(U8)data //寫SDRAM宏
#define ReadSdram(address) *((volatile U8 *)(address)) //讀SDRAM宏
void Main(void)
{
……
UartPrintf("/n輸入回車開始SDRAM讀寫操作");
if(UartGetch()=='/r')
{
UartPrintf("/n正在SDRAM寫操作…");
j=0x0cf00000;
for(i=0;i<10;i++) //從0x0cf00000開始,寫入10個‘a’
{
WriteSdram(j,'a');
j++;
}
j=0x0cf00000;
UartPrintf("/n寫操作完畢,正在SDRAM讀操作…");
for(i=0;i<10;i++)
{
ReadData = ReadSdram(j); //從0x0cf00000開始,讀取10個‘a’
UartPrintf("/n地址%8x處讀取的數據是%c", j, ReadData);
j++;
}
UartPrintf("/n操作完畢!");
}
}
2.4 程序運行結果
3 小結
介紹HY57V641620HG SRAM的操作,不像對Flash Rom操作,還需要寫入命令字,對RAM的讀寫操作比較簡單,只要在相應的地址進行普通讀寫就行。使用SDRAM不但能提高系統表現,還能簡化設計、提供高速的數據傳輸。嵌入式一般需要或大或小的RAM空間來保證程序的運行需要。