SDRAM(Synchronous Dynamic Random Access Memory,同步動態(tài)隨機存儲器)也就是通常所說的內(nèi)存。內(nèi)存的工作原理、控制時序、及相關控制器的配置方法一直是嵌入式系統(tǒng)學習、開發(fā)過程中的一個難點。我們從其硬件的角度來分析其原理,然后再引出SDRAM的驅動編寫過程。
內(nèi)存是代碼的執(zhí)行空間,以PC機為例,程序是以文件的形式保存在硬盤里面的,程序在運行之前先由操作系統(tǒng)裝載入內(nèi)存中,由于內(nèi)存是RAM(隨機訪問存儲器),可以通過地址去定位一個字節(jié)的數(shù)據(jù),CPU在執(zhí)行程序時將PC的值設置為程序在內(nèi)存中的開始地址,CPU會依次的從內(nèi)存里取址,譯碼,執(zhí)行,在內(nèi)存沒有被初始化之前,內(nèi)存好比是未建好的房子,是不能讀取和存儲數(shù)據(jù)的,因此我們要想讓MTOS運行在內(nèi)存里必須進行內(nèi)存的初始化。
通用存儲設備:
在介紹內(nèi)存工作原理之前有必要了解下存儲設備的存儲方式:ROM,RAM
lROM(Read-Only Memory):只讀存儲器,是一種只能讀出事先所存數(shù)據(jù)的固態(tài)半導體存儲器。其特性是一旦儲存資料就無法再將之改變或刪除。通常用在不需經(jīng)常變更資料的電子或電腦系統(tǒng)中,資料并且不會因為電源關閉而消失。如:PC里面的BIOS。
lRAM(Random Access Memory):隨機訪問存儲器,存儲單元的內(nèi)容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器??梢岳斫鉃?,當你給定一個隨機有效的訪問地址,RAM會返回其存儲內(nèi)容(隨機尋址),它訪問速度與地址的無關。這種存儲器在斷電時將丟失其存儲內(nèi)容,故主要用于存儲短時間內(nèi)隨機訪問使用的程序。計算機系統(tǒng)里內(nèi)存地址是一個四字節(jié)對齊的地址(32位機),CPU的取指,執(zhí)行,存儲都是通過地址進行的,因此它可以用來做內(nèi)存。
RAM按照硬件設計的不同,隨機存儲器又分為DRAM(Dynamic RAM)動態(tài)隨機存儲器和SRAM(Static RAM)靜態(tài)隨機存儲器。
lDRAM:它的基本原件是小電容,電容可以在兩個極板上短時間內(nèi)保留電荷,可以通過兩極之間有無電壓差代表計算機里的0和1,由于電容的物理特性,要定期的為其充電,否則數(shù)據(jù)會丟失。對電容的充電過程叫做刷新,但是制作工藝較簡單,體積小,便于集成化,經(jīng)常做為計算機里內(nèi)存制作原件。比如:PC的內(nèi)存,SDRAM, DDR, DDR2, DDR3等,缺點:由于要定期刷新存儲介質(zhì),存取速度較慢。
lSRAM:它是一種具有靜止存取功能的內(nèi)存,不需要刷新電路即能保存它內(nèi)部存儲的數(shù)據(jù)。因此其存取速度快,但是體積較大,功耗大,成本高,常用作存儲容量不高,但存取速度快的場合,比如CPU的L1 cache,L2cache(一級,二級緩存),寄存器。
為了滿足開發(fā)的需要MINI2440在出廠時搭載了三種存儲介質(zhì):
(1)NOR FLASH(2M):ROM存儲器,通常用來保存BootLoader,引導系統(tǒng)啟動
(2)NAND FLASH(256M,型號不一樣,Nandflash大小不一樣):保存操作系統(tǒng)映像文件和文件系統(tǒng)
(3)SDRAM(64M):內(nèi)存,執(zhí)行程序
lNORFLASH:它的特點是支持XIP芯片內(nèi)執(zhí)行(eXecute In Place),這樣應用程序可以直接在Flash閃存內(nèi)運行,不必再把代碼讀到系統(tǒng)RAM中,也就是說可以隨機尋址。NOR FLASH的成本較高。
lNAND FLASH:它能提供極高的單元密度,可以達到高存儲密度,并且寫入和擦除的速度也很快。其成本較低,不支持XIP??勺銮度胧嚼锏臄?shù)據(jù)存儲介質(zhì)。如:手機存儲卡,SD卡等。
1.1.1S3C2440存儲器地址段(Bank)S3C2440對外引出了27根地址線ADDR0~ADDR26,它最多能夠尋址128MB,而S3C2440的尋址空間可以達到1GB,這是由于S3C2440將1GB的地址空間分成了8個BANKS(Bank0~Bank7),其中每一個BANK對應一根片選信號線nGCS0~nGCS7,當訪問BANKx的時候,nGCSx管腳電平拉低,用來選中外接設備,S3C2440通過8根選信號線和27根地址線,就可以訪問1GB。如圖2-48所示。
圖2-48 S3C2440存儲器BANK
如圖所示,左側圖對應不使用Nandflash啟動時(通過跳線設置),存儲器Bank分布圖,通常在這種啟動方式里選擇Norflash啟動,將Norflash焊接在Bank0,系統(tǒng)上電后,CPU從Bank0的開始地址0x00000000開始取指運行。
上圖右側是選擇從Nandflash引導啟動(通過跳線設置),系統(tǒng)上電后,CPU會自動將Nandflash里前4K的數(shù)據(jù)復制到S3C2440內(nèi)部一個4K大小SRAM類型存儲器里(叫做Steppingstone),然后從Steppingstone取指啟動。
其中Bank0~Bank5可以焊接ROM或SRAM類型存儲器,Bank6~Bank7可以焊接ROM,SRAM,SDRAM類型存儲器,也就是說,S3C2440的SDRAM內(nèi)存應該焊接在Bank6~Bank7上,最大支持內(nèi)存256M,Bank0~Bank5通常焊接一些用于引導系統(tǒng)啟動小容量ROM,具體焊接什么樣存儲器,多大容量,根據(jù)每個開發(fā)板生產(chǎn)商不同而不同,比如MINI2440開發(fā)板將2M的Norflash焊接在了Bank0上,用于存放系統(tǒng)引導程序Bootloader,將兩片32M,16Bit位寬SDRAM內(nèi)存焊接在Bank6和Bank7上,并聯(lián)形成64M,32位內(nèi)存。
由于S3C2440是32位芯片,理論上講可以達到4GB的尋址范圍,除去上述8個BANK用于連接外部設備,還有一部分的地址空間是用于設備特殊功能寄存器,其余地址沒有被使用。
表2-14 S3C2440設備寄存器地址空間
外接設備
起始地址
結束地址
存儲控制器
0x48000000
0x48000030
USB Host控制器
0x49000000
0x49000058
中斷控制器
0x4A000000
0x4A00001C
DMA
0x4B000000
0x4B0000E0
時鐘和電源管理
0x4C000000
0x4C000014
LCD控制器
0x4D000000
0x4D000060
NAND FLASH控制器
0x4E000000
0x4E000014
攝像頭接口
0x4F000000
0x4F0000A0
UART
0x50000000
0x50008028
脈寬調(diào)制計時器
0x51000000
0x51000040
USB設備
0x52000140
0x5200026F
WATCHDOG計時器
0x53000000
0x53000008
IIC控制器
0x54000000
0x5400000C
IIS控制器
0x55000000
0x55000012
I/O端口
0x56000000
0x560000B0
實時時鐘RTC
0x57000040
0x5700008B
A/D轉換器
0x58000000
0x58000010
SPI
0x59000000
0x59000034
SD接口
0x5A000000
0x5A000040
AC97音頻編碼接口
0x5B000000
0x5B00001C
1.1.2SDRAM內(nèi)存工作原理SDRAM的內(nèi)部是一個存儲陣列。陣列就如同表格一樣,將數(shù)據(jù)“填”進去。在數(shù)據(jù)讀寫時和表格的檢索原理一樣,先指定一個行(Row),再指定一個列(Column),我們就可以準確地找到所需要的單元格,這就是內(nèi)存芯片尋址的基本原理,如圖2-49所示。
圖2-49內(nèi)存行,列地址尋址示意圖
這個單元格(存儲陣列)就叫邏輯Bank(Logical Bank,下文簡稱L-Bank)。由于技術、成本等原因,不可能只做一個全容量的L-Bank,而且最重要的是,由于SDRAM的工作原理限制,單一的L-Ban k將會造成非常嚴重的尋址沖突,大幅降低內(nèi)存效率。所以人們在SDRAM內(nèi)部分割成多個L-Bank,目前基本都是4個(這也是SDRAM規(guī)范中的最高L-Bank數(shù)量),由此可見,在進行尋址時就要先確定是哪個L-Bank,然后在這個選定的L-Bank中選擇相應的行與列進行尋址。因此對內(nèi)存的訪問,一次只能是一個L-Bank工作。如圖2-50:
圖2-50內(nèi)存存儲單元
當對內(nèi)存進行操作時(見下圖),先要確定操作L-Bank,因此要對L-Bank進行選擇。在內(nèi)存芯片的外部管腳上多出了兩個管腳BA0, BA1,用來片選4個L-Bank。如前所述,32位的地址長度由于其存儲結構特點,分成了行地址和列地址。通過下面的內(nèi)存結構圖可知,內(nèi)存外接管腳地址線只有13根地址線A0~A12,它最多只能尋址8M內(nèi)存空間,到底使用什么機制來實現(xiàn)對64M內(nèi)存空間進行尋址的呢?SDRAM的行地址線和列地址線是分時復用的,即地址要分兩次送出,先送出行地址(nSRAS行有效操作),再送出列地址(nSCAS列有效操作)。這樣,可以大幅度減少地址線的數(shù)目,提高器件的性能和制作工藝復雜度。但尋址過程也會因此而變得復雜。實際上,現(xiàn)在的SDRAM一般都以L-Bank為基本尋址對象的。由L-Bank地址線BAn控制L-Bank間的選擇,行地址線和列地址線貫穿連接所有的L-Bank,每個L-Bank的數(shù)據(jù)的寬度和整個存儲器的寬度相同,這樣,可以加快數(shù)據(jù)的存儲速度。同時,BAn還可以使未被選中的L-Bank工作于低功耗的模式下,從而降低器件的功耗。
圖2-51 HY57561620內(nèi)部結構圖
開發(fā)板內(nèi)存控制器管腳接線(以MINI2440開發(fā)板為例):
(1)確定BA0、BA1的接線
表2-15 BA0、BA1接線
Bank Size:外接內(nèi)存容量大?。℉Y57561620是4Mbit*16bit*4Bank*2Chips/8=64MB)
Bus Width:總線寬度 (兩片16位HY57561620,并聯(lián)成32位)
Base Component:單個芯片容量(bit)(256Mb)
Memory Configration:內(nèi)存配置((4M*16*4banks)*2Chips )
由硬件手冊Bank Address管腳連接配置表可知,使用A[25:24]兩根地址線作為Bank片選信號,正好兩根接線可以片選每個存儲單元的4個BANKS。
(2)確定其它接線
SDRAM內(nèi)存是焊接在BANK6~BANK7上的,其焊接管腳,如圖2-52:
圖2-52 S3C2440 16位寬內(nèi)存芯片
上圖是S3C2440提供的兩片16位芯片并聯(lián)連接示意圖,An是CPU地址總線,其中A2~A14為內(nèi)存芯片尋址總線,之所以地址尋址總線從A2開始是因為內(nèi)存地址都是按字節(jié)對齊的,,A24,A25為L-Bank片選信號,Dn為CPU數(shù)據(jù)總線,其它為對應控制信號線。
表2-16內(nèi)存芯片各管腳說明
外接管腳名
內(nèi)接管腳名
全稱
描述
A2~A14
A0~A12
Address
地址線
D0 ~D31
DQ0~