mini2440的SDRAM分析


  首先是2440的存儲控制器:

  暫時不管是從nand啟動還是nor啟動,因為我現在只關注內存,從上圖可以看到由2440的Memory Controller可以尋址的范圍是0x0000,0000---0x4000,0000,總共是1G,這1G又分為8個bank,bank0-bank7,每個bank為128M, 8*128M=1G。其中bank0-bank5這6個bank是只能接SROM,那么什么是SROM,2440數據手冊的221頁說明了,SROM是ROM或者SRAM。

  

通用存儲設備:

  內存存儲設備的存儲方式:ROM,RAM

    ROM(Read-Only Memory):只讀存儲器,是一種只能讀出事先所存數據的固態半導體存儲器。其特性是一旦儲存資料就無法再將之改變或刪除。通常用在不需經常變更資料的電子或電腦系統中,資料並且不會因為電源關閉而消失。如:PC里面的BIOS。

    RAM(Random Access Memory) :隨機訪問存儲器,存儲單元的內容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器。可以理解為,當你給定一個隨機有效的訪問地址,RAM會返回其存儲內容(隨機尋址),它訪問速度與地址的無關。這種存儲器在斷電時將丟失其存儲內容,故主要用於存儲短時間內隨機訪問使用的程序。計算機系統里內存地址是一個四字節對齊的地址(32位機),CPU的取指,執行,存儲都是通過地址進行的,因此它可以用來做內存。

 

  RAM按照硬件設計的不同,隨機存儲器又分為DRAM(Dynamic RAM)動態隨機存儲器和SRAM(Static RAM) 靜態隨機存儲器。

    DRAM它的基本原件是小電容,電容可以在兩個極板上短時間內保留電荷,可以通過兩極之間有無電壓差代表計算機里的0和1,由於電容的物理特性,要定期的為其充電,否則數據會丟失。對電容的充電過程叫做刷新,但是制作工藝較簡單,體積小,便於集成化,經常做為計算機里內存制作原件。比如:PC的內存,SDRAM, DDR, DDR2, DDR3等,缺點:由於要定期刷新存儲介質,存取速度較慢。

    SRAM它是一種具有靜止存取功能的內存,不需要刷新電路即能保存它內部存儲的數據。因此其存取速度快,但是體積較大,功耗大,成本高,常用作存儲容量不高,但存取速度快的場合,比如CPU的L1 cache,L2cache(一級,二級緩存) ,寄存器。

 

 

  由於價格和存儲量的限制,mini2440上作為內存的就是DRAM,從上圖看得出,只有bank6,bank7才能接DRAM,那么我猜想控制bank6,7的Memory Controller對應的寄存器肯定有一個控制刷新的部分,其他幾個不具備,因為不需要。再看看mini2440上的內存芯片怎么和2440接線的,它使用了2塊16位寬的SDRAM:

  

  從上圖來看,芯片包括了最基本的地址線,數據線,對比2塊芯片,發現它們相同的地址線是連在一起的,都是A0-A12,共13根地址線,而數據線一塊是連接2440的LDATA0---LDATA15,一個是LDATA16-LDATA31,再看看2440的引腳:

  可以看出,2440的數據線是DATA0-DATA31,可以接收的數據寬度是32位,而它的地址線是ADDR0--ADDR26,一共是27根,那么2^27就是128M,正好是內存控制器一個bank的大小。再聯系SDRAM和2440的接線方式,發現數據線32根分別由2塊芯片對接,2塊芯片分別用16根,而地址線只用了13根,2^13=8K,那怎么可能做到尋址128M呢?何況SDRAM上居然是從LADDR2開始接線的。那么就得看看SRAM的手冊,看看它是怎么被尋址的。

  

  mini2440上SDRAM型號是H57V2562GTR,是一個256Mb的16位位寬的DRAM,注意這里是256Mb,是小b,所以總共是256/8=32MB。看看SDRAM內部的結構功能框圖:

這款DRAM內部的存儲單元首先是由4個稱作BANK的單元組成(圖中Memory Cell Array),然后每個BANK單元上是由一個存儲矩陣組成,通過XY軸定位到最小尋址粒度的一個單元,也就是一個16bit的存儲單元。然后把這個16bit的單元里面的數據放到數據輸出口上。打個比方,假設一塊DRAM是一個Excel文件,那么它的bank就是Excel的一個sheet,由橫坐標(ABCDEF.......)和縱坐標(12345....)定位一個最基本的單元格,這個單元格就是DRAM的基本存儲單元,這款DRAM是16位寬的,所以基本存儲單元就是16bit。再看看左下角的Address Buffers,A0-A12,13根地址線,BA0-BA1,2根BANK選擇線。圖中顯示一個Memory Cell Array大小是4M * 16 bit,16bit是芯片的基本尋址單元,所以要求地址線要有4M的尋址能力,2^22 = 4M,也就是說需要22根地址線才能做到,但是這里只提供了A0-A12,13根線。如何做到呢?答案是地址線復用。可以看到State Machine那個功能塊有RAS、CAS這樣兩根線(RAS: Row Address Select,CAS:Column Address Select),它們低電平有效。RAS有效時,A0-A12上的地址就是Row Addess,地址信號A0-A12 ---> Address Buffers--->Address Register ---->Row Pre Decoder--->X decorders,同理CAS有效時,A0-A12上就是Column Address,不過此時這款SDRAM只有9個Column地址有效,地址信號A0-A8 ---> Address Buffers--->Address Register ---->Column Pre Decoder--->Y decorders。這樣13+9 = 22,22根地址線就通過時分復用的方式出來了。

上圖中只演示了在一個Memory Cell Array內尋址的過程,其實在這之前還有:片選(CS)--->Memory Cell Array號(BA[0:1])選中某塊SDRAM的某個Memory Cell Array。

細看DRAM的介紹:

原來只有行地址用了13位,列地址只用了9位,那么通過計算一共是2^(13+9+2+1)=32MB,和芯片的規格一致,那么這樣解釋就合理了。2440怎么使用這2塊SDRAM的呢?是用2塊拼接起來,一個來存儲低16位,一個存儲高16位。假設地址0x30000000,尋址它怎么得到這個存儲單元的內容呢?首先它是屬於1G這個范圍內,然后又是處於BA,Array0,行0,列0。

由此可見僅僅需要29位就可以定位一個access cell,這也就是為什么mini2440地址線只接了A2開始的13位到SDRAm上,由於2440的存儲控制器每次只能以4byte對齊訪問,一個int的4個byte分別存儲在2個芯片上,然后4byte的數據讀到存儲控制器,地址還未用到的最低2位在存儲控制器里面決定是用哪個byte。這就是一個byte的尋址過程。

  2440SDRAM可以使用16位寬的2片拼接,或者8位的4片拼接,32位的1片。顯然如果是2片時,這2片的大小必須要一樣大的,否則多出來的就會只能存16bit,其他的位會丟失掉,4片也是同樣的。

  H57V2562GTR,SDRAM管腳說明

外接管腳名

內接管腳名

全稱

描述

A2~A14

A0~A12

Address

地址線

D0 ~D31

DQ0~DQ31

Data Input/Output

數據線

A24,A25

BA0,BA1

Bank Address

L-BANK片選信號

DQM0~DQM3

LDQM, UDQM

Data Input/Output Mask

高,低字節數據掩碼信號

SCKE

SCKE

Clock Enable

輸入時鍾有效信號

SCLK

SCLK

Clock

輸入時鍾

nSCS0

nSCS

General Chip Select

片選信號(它與nGCS6是同一管腳的兩個功能)

nSRAS

nSRAS

Row Address Strobe

行地址選通信號

nSCAS

nSCAS

Column Address Strobe

列地址選通信號

nWE

newnWE

Write Enable

寫入有效信號

 看2片SDRAM和2440的接線可以看出來,它們只有數據腳和LDQM UDQM引腳不同,這2個引腳來決定數據引腳上高8位和低8位的有效性,由於2440內存控制器只能發出4byte對齊的數據給SDRAM(data線的連接固定了),那么我如果只想存儲或者讀取一個byte,怎么辦?由這2個引腳來控制,它來決定16位寬的高低8位的有效性,確保不想改的byte內容不變。

 

 

參考自:

http://blog.csdn.net/mr_raptor/article/details/6555786


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM