基於ARM的RAM存儲器接口設計

SDRAM在系統中主要用作程序的運行空間,數據及堆棧區。當系統啓動時,處理器首先從復位地址起始處開始讀取啓動代碼,在完成系統的初始化後,程序代碼一般應調入SDRAM中運行,以提高系統的運行速度,同時,系統堆棧、用戶堆棧以及運行數據也都放在SDRAM中。

1  SDRAM原理分析

本節先介紹了SDRAM的基本原理,然後介紹了一個具體SDRAM芯片HY57V641620HG的特性和引腳描述。

1.1  SDRAM介紹

DRAM是動態存儲器Dynamic RAM的縮寫,SDRAMSynchronous DRAM的縮寫,中文就是同步動態存儲器的意思。從技術角度上講,同步動態存儲器(SDRAM)是在現有的標準動態存儲器中加入同步控制邏輯(一個狀態機),利用一個單一的系統時鐘同步所有的地址數據和控制信號。使用SDRAM不但能提高系統表現,還能簡化設計、提供高速的數據傳輸。在功能上,它類似常規的DRAM,且也需時鐘進行刷新。可以說,SDRAM是一種改善了結構的增強型DRAMSDRAM 的存儲單元可以理解爲一個電容,總是傾向於放電,爲避免數據丟失,必須定時刷新(充電)。由此可見,要在系統中使用SDRAM,就要求微處理器具有刷新控制邏輯,或在系統中另外加入刷新控制邏輯電路。SDRAM是多個Bank結構的,一般是一個Bank正在使用,其他Bank處於預充電狀態,這樣輪流讀寫和充電就不需要等待了,大大提高了存儲器的訪問速度。但是要實現這個功能,還必須增加對多個Bank的管理模塊,控制Bank來進行預充電,所以在在多個BankSDRAM中,會有多根Bank的選擇引腳。

1.2  HY57V641620HG的結構

HY57V641620HG是一個8MBCMOS同步DRAM,尤其適合大容量存儲和高帶寬的存儲場合。HY57V641620HG分爲4Bank,每個Bank大小爲2MB。它所有的輸入和輸出是和時鐘輸入上升沿同步的,且電平與LVTTL相兼容。內部數據通道提高了帶寬。特性如下:

l         單電源供電,電壓3.0V~3.6V

l         54引腳TSOP II封裝

l         所有引腳與LVTTL接口兼容

l         所有輸入輸出參考系統時鐘

l         具有UDQMLDQM數據屏蔽功能

l         可編程脈衝寬度和脈衝類型

l         可編程CAS#反應時間

l         自動刷新和自我刷新功能

l         64ms 4096個自動刷新週期

1  引腳分配圖

引腳描述如表所示。

                            RAM引腳描述

引腳

引腳名

描述

CLK

時鐘

系統時鐘輸入

CKE

時鐘使能

內部時鐘控制信號

CS#

片選

禁止/使能除CLKCKEDQM的所有輸入

BA0BA1

Bank地址

選擇某個Bank00~11分別對應Bank0~Bank1

RAS#

行地址選擇

RAS#爲行地址選擇,當爲低電平時行地址單元

使能

CAS#

列地址選擇

CAS#爲行地址選擇,當爲低電平時行地址單元使能

WE#

寫使能

WE#爲低時,允許寫操作

LDQM/UDQM

數據輸入/輸出屏蔽

 

DQ0~DQ15

數據輸入/輸出

輸入和輸出數據

VDD/VSS

電源/

內部電路和輸入緩衝電源供電

VDDQ/VSSQ

數據輸出電源/

輸出緩衝電源供電

NC

未連接

不使用,懸空即可

2  接口電路與程序設計

本節講述了HY57V641620HG SDRAMS3C44B0X的電路連接方式和S3C44B0X上存儲器控制器寄存器的設置,對於SDRAM的讀寫操作只需一對讀寫宏就能完成,最後由在一個Main函數中測試了讀寫操作宏的正確性。

2.1  電路連接

要在系統中使用SDRAM,要求微處理器具有刷新控制邏輯,或在系統中另外加入刷新控制邏輯電路。S3C44B0X及其他一些ARM芯片在片內具有獨立的SDRAM刷新控制邏輯,可方便地與SDRAM相連接。

SDRAM連接電路圖如2所示,它接在Bank6上。HY57V641620HG分成4Bank;每個Bank的容量爲1M×16位。Bank的地址由BA1BA0決定,00對應Bank001對應Bankl10對應Bank2 11對應Bank3。在每個Bank中,分別用行地址脈衝選通RAS和列地址脈衝選通CAS進行尋址。HY57V641620HG的行地址取地址線A0~A11位,即RA0~RA11;列地址取地址線低8位,即CA0~CA7SDRAMS3C44B0X專用SDRAM片選信號nSCS0/nGCS6選通,地址空間爲0x0C000000~0x0C7FFFFF

 

2  SDRAM連接電路圖

2.2  硬件和寄存器設置

由於HY57V641620HG接在Bank6上,首先應當設置BWCON寄存器的第27~24位,即ST6WS6DW6ST6決定Bank6上的SRAM是否採用UB/LB,默認爲不採用,本實例默認即可,WS6決定Bank6的等待是否使能,默認爲禁止等待,本實例也默認即可。DW6時決定Bank6的數據總線寬度。根據HY57V641620HG,本實例將其配置爲16位的數據總線寬度,即DW6 = 01

BANKCON寄存器中的MT位在第四章已經介紹過,將其配置爲SDRAM,即MT = 11Trcd位設置爲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     ;Bank6Bank7映射關係爲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中,再讀取出來校驗即可。注意0x0c000000SDRAM的起始地址,爲保護靠近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空間來保證程序的運行需要。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章