首先是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