S3c2440的sdram

首先要明白幾個概念,S3C2440是處理器,是芯片,其中包含了ARM核和各種硬件控制器,這些控制器中就包括內存控制器,而處理器要想使用內存硬件就需要程序員通過代碼把該內存設備的參數告訴內存控制器,這也就是內存初始化要做的事情,下面我們從CPU地址空間,sdram工作原理和內存控制器的寄存器設置三方面來說明如何使用sdram
1.CPU的地址空間
S3C2440使用了ADDR0-ADDR26,共27根地址線,即可尋址128M。同時使用nGCS0-nGCS7,共8根選片信號線,也就是說8個片選,每個都有128M的尋址範圍,共有1G的尋址空間,即地址範圍爲0x0-0x40000000。nGCSx引腳在拉低的時候有效,這裏的nGCSx和ADDRx都是S3C2440的引腳
同時每個片選對應一個bank,共8個bank,sdram只能焊接在bank6和bank7上。

2.SDRAM的工作原理
0)SDRAM基本概念
mini2440開發板使用了兩片32M字節,16bit位寬的SDRAM,並聯形成32bit位寬的64M字節內存,實際上SDRAM是一個存儲陣列,對於這裏使用的SDRAM的容量,一般表示爲4Mbit * 16bit * 4Bank,其中16bit表示位寬,4Bank表示有4個L-Bank。所謂位寬,表示該內存芯片一次讀寫的數據寬度,所以這裏我們可以看作在4M範圍內,每個地址都有16bit存儲空間。SDRAM採用行地址和列地址的方式來索引一個存儲單元,因爲4M等於2的22次方,所以行地址和列地址加起來需要等於22根地址線才能訪問到4M的範圍
1)SDRAM的讀操作順序
SDRAM芯片的地址線只有A0-A12,一共13根地址線,通過複用地址線依次發送行地址和列地址,其時序如下:
a.發出L-Bank片選信號和片選地址BA0,BA1的同時,發出RAS行選通信號和行地址
b.在經過tRCD(RAS到CAS的延遲時間)之後,同時發出讀命令和列地址
c.CL(CAS Latency,CAS潛伏期,即在發出列地址後到第一筆數據輸出之間的時間)個時鐘之後,讀數據依次出現在數據總線上。
d.在讀操作的最後,需要向SDRAM發送預充電(PRECHARGE)命令,以關閉該行
e.在經過tRP(PRECHARGE命令後,經過tRP時間之後才能再次訪問該行)時間之後,可以開始下次讀寫操作。

2)SDRAM的寫操作順序
a.發出L-Bank片選信號和片選地址BA0,BA1的同時,發出RAS行選通信號和行地址
b.在經過tRCD(RAS到CAS的延遲時間)之後,同時發出寫命令和列地址,同時待寫數據送DQ引腳
c.在最後一個數據寫入後的tWR後,向SDRAM發送預充電(PRECHARGE)命令,以關閉該行
d.在經過tRP(PRECHARGE命令後,經過tRP時間之後才能再次訪問該行)時間之後,可以開始下次讀寫操作。

3)突發
爲了批量讀寫,引入突發操作,指定起始列地址和突發長度,就可以獲取指定長度的內存數據

4)刷新
刷新是定期的對所有L-Bank中的相同行進行充電。充電的週期是電容的有效保存器的上限64ms,也就是說每一行的循環週期是64ms。若SDRAM有4096行,那麼刷新速度就是4096/64ms。
刷新分爲兩種一種是Auto Refresh(AR),一種是Self Refresh(SR),按照PC133的標準,刷新需要佔用9個時鐘週期,在此期間所有的工作命令只能等待,無法執行。如果SDRAM有8192行,那麼每行在64/8192=0.007815ms內將會刷新一次,假設HCLK的時鐘頻率爲100MHz,一個時鐘週期=1/100M秒=1/100000ms,那麼0.007815ms就等於781個時鐘週期,在這781個時鐘週期內有9個週期用於刷新,其他用於執行讀寫操作。

5)SDRAM與CPU的連線
在S3C2440的datasheet裏內存芯片的A0-A12地址線引腳,與CPU的A2-A14地址線依次連接,爲什麼內存芯片的地址引腳不是與CPU的地址引腳按照序號一一對應的呢?這是因爲S2C2440採用兩塊16bit位寬的芯片並聯爲一塊32bit位寬的內存,所以需要四字節對齊,每次獲取數據的時候,一塊芯片讀寫四字節的高二字節,另外一塊芯片讀寫四字節的低二字節,A14:A2組成的地址可以看作是以4字節爲單位的地址空間的索引,把這個索引連接到內存芯片上,以這個索引爲地址訪問內存芯片,分別得到兩個字節,並組成四字節數據。也就是說,A14:A2這個索引對應的4字節,是以此爲索引分別訪問內存芯片得到的兩個兩字節組成的,例如地址0x04的A14:A2=1,把它連接到內存芯片後,分別以1爲地址訪問內存芯片各得到兩個字節,這兩個字節組成了最終的4字節數據。
前面說過4M的地址空間需要22根地址線,行地址使用了A12:A0,共13根地址線,列地址就要使用A8:A0,共9根地址線。對應的,行地址輸入的是CPU地址線的A14:A2,列地址輸入的是A23:A15,A25:A24爲L-Bank的片選信號,連接內存芯片的BA0,BA1引腳,也就是說地址被分爲三部分,片選信號,行地址,列地址
另外,內存芯片的LDQM和UDQM引腳分別用來讀寫低字節和高字節數據,通過分別設置兩塊芯片的這兩個引腳,可以讀寫4字節中的單個字節。

3.SDRAM控制器的設置
以S3C2440爲例
1)BWSCON
設置Bank6和Bank7的位寬
2)BANKCON6,BANKCON7
設置Bank6和Bank7上的存儲器類型
設置tRCD
設置SCAN(SDRAM Column Address Number),即列地址數
3)REFRESH寄存器
設置刷新開關
設置刷新模式,AR還是SR
設置tRP(預充電時間)
設置tSRC(單行充電時間),tRC就是前面說明的9個時鐘,且有等式tRC=tSRC+tRP --------------------------------
設置刷新計數,refresh_counter = 2^11 +1 - refresh_period * HCLK ----------------------------------
4)BANKSIZE
設置是否開啓突發模式
設置是否使用SCKE作爲省電模式信號------------------------------
設置存儲器工作頻率
設置Bank6/7的容量-----------------------------
5)MRSR
設置CL
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章