Memory controller 即 存儲控制器用來産生外部存儲器使用所需的控制信号。
它具有如下特點:
1:可通過軟體程式設計選擇的大小端模式。
2:8個128M的BANK,總共1GB大小。
3:除了BANK0隻能選擇16/32位的資料寬度外,其他BANK可自由選擇8bit、16bit,32bit
4:BANK0~BANK5比較相似,可外接rom,sram等外設;
BANK6~BANK7除了提供與BANK0~BANK5的一些功能外,還特别提供了SDRAM所需的配置。
5:BANK6跟BANK7的大小可通過程式設計選擇,但是注意,BANK6與BANK7必須大小相同
位址劃分如下:
S3C2440能尋址4G位址空間,0x0000_0000~0x3FFF_FFFF這1G的位址空間為外部外圍裝置的尋址空間,0x4800_0000~0x5FFF_FFFF為處理器内部的寄存器位址尋址區。S3C2440共有ADDR0~ADDR26,27跟位址線,可尋址128Byte。那它是怎麼尋址到外部1G空間的呢?原來每個Bank都有一個片選信号nGCSn,通過這8個片選信号,便能尋址128Byte*8=1GByte。
如上圖所示,s3c2440有兩種啟動方式,從NORFLASH啟動,從NANDFLASH啟動。
系統複位後,pc自動指向0位址開始執行程式,在mini2440開發闆上Norflash接在Bank0上,起始位址為0x0000_0000.當OM[1:0]=01,10時,程式即從Norflsh啟動,由于Norflash是可在晶片内執行(XIP,execute in place),程式可直接在flash閃存中運作。
當OM[1:0]=00時系統即從Nandflash啟動,Nandflash沒有接在Bank0上,它由專門的Nand flash Controller控制,無法具體尋址,但是複位後pc自動從0位址開始執行程式,那麼程式如何運作到nandflash中去呢?原來在s3c2440中有一個大小為4k的sram(stepping stone),它自動将nandflash中的前4k程式拷貝到該sram中運作,一般情況下,這4k程式需要初始化sdram等外設,并将剩餘的nandflash中的代碼拷貝到sdram中去,而後程式跳轉到sdram中運作。
在使用SRAM時需要配置如下13個寄存器:
各寄存器的具體設定參考具體的外設。
mini2440的配置如下
DCD (0+(B1_BWSCON<<4)+(B2_BWSCON<<8)+(B3_BWSCON<<12)+(B4_BWSCON<<16)+(B5_BWSCON<<20)+(B6_BWSCON<<24)+(B7_BWSCON<<28))
DCD ((B0_Tacs<<13)+(B0_Tcos<<11)+(B0_Tacc<<8)+(B0_Tcoh<<6)+(B0_Tah<<4)+(B0_Tacp<<2)+(B0_PMC)) ;GCS0
DCD ((B1_Tacs<<13)+(B1_Tcos<<11)+(B1_Tacc<<8)+(B1_Tcoh<<6)+(B1_Tah<<4)+(B1_Tacp<<2)+(B1_PMC)) ;GCS1
DCD ((B2_Tacs<<13)+(B2_Tcos<<11)+(B2_Tacc<<8)+(B2_Tcoh<<6)+(B2_Tah<<4)+(B2_Tacp<<2)+(B2_PMC)) ;GCS2
DCD ((B3_Tacs<<13)+(B3_Tcos<<11)+(B3_Tacc<<8)+(B3_Tcoh<<6)+(B3_Tah<<4)+(B3_Tacp<<2)+(B3_PMC)) ;GCS3
DCD ((B4_Tacs<<13)+(B4_Tcos<<11)+(B4_Tacc<<8)+(B4_Tcoh<<6)+(B4_Tah<<4)+(B4_Tacp<<2)+(B4_PMC)) ;GCS4
DCD ((B5_Tacs<<13)+(B5_Tcos<<11)+(B5_Tacc<<8)+(B5_Tcoh<<6)+(B5_Tah<<4)+(B5_Tacp<<2)+(B5_PMC)) ;GCS5
DCD ((B6_MT<<15)+(B6_Trcd<<2)+(B6_SCAN)) ;GCS6
DCD ((B7_MT<<15)+(B7_Trcd<<2)+(B7_SCAN)) ;GCS7
DCD ((REFEN<<23)+(TREFMD<<22)+(Trp<<20)+(Trc<<18)+(Tchr<<16)+REFCNT)
DCD 0x32 ;SCLK power saving mode, BANKSIZE 128M/128M
DCD 0x30 ;MRSR6 CL=3clk
DCD 0x30 ;MRSR7 CL=3clk