SDRAM對本身來講是個新東西,因此讀起來並不輕鬆。學習
這個RAM的分類有SRAM和DRAM,分別是靜態RAM和動態RAM,兩個的內部構造不同,能夠百度一下。而SDRAM則是同步的動態RAM,同步的好處就是與處理器控制匹配,操做起來就容易多。下面看看S3C2440的內存控制是怎麼樣的,下面截圖是一個概述。設計
S3C2440的內存圖根據是否由NAND FLASH來啓動有不一樣區別,下圖展現了2440復位後的內存分佈圖。這裏有個疑問,看見說能夠NOR FLASH啓動,還有SDRAM中運行程序,那麼這兩個是屬於那部分呢?之後深刻再說吧。內存
從圖能夠看出啓動不一樣時Boot Internal位置是不一樣的。同步
前文說到有個bank能夠靈活的配置,這個bank就是bank7,它的配置是依據bank6來進行的。下圖進行了說明:內存管理
bank0的數據線寬度是固定的16位或24位。由於bank0(內存地址中的0x0000_0000)用做啓動區,因此在上電以前就要肯定它的數據線寬度。原理
寬度有兩個引腳OM[0:1]的電平決定。百度
CPU的地址線與外圍SRAM,SDRAM內存地址線的鏈接也是有講究注意的。分別是8位、16位和32位。下圖說明:配置
這裏爲何8位就從A0開始,而其它的就從由於A1,A2分別開始。是這個緣由,以16位進行說明。首先CPU尋址空間,字節爲存儲容量的基本單位。一個16位數據線的SDRAM,能夠認爲它的存儲基本單位是2個字節。這樣對於16位SDRAM,A0:A1=01時,對應2440的A2:A1=01.A0好像就是2個字節的基數這個意思,能夠省略掉。個人板子是用到了兩片16位SDRAM構成32位,因此鏈接方式是最後一種。下面的截圖是個人原理圖中SDRAM的鏈接方法。程序
其中BA0與BA1與ADD24和ADD25相連,表明SDRAM最高地址位。由於兩個32M的SDRAM合併成64M空間,那麼按照計算就須要26根數據線。13根行地址線與9根列地址線=22根,加上這個SDRAM的存儲單元是2個字節,就又至關於多了一根地址線,最後BA0,BA1爲最高地址位。合起來就能夠尋址64M了。方法
跟內存控制的寄存器BWSCON,BANKCONx(x=0~5),BANKCONx(x=6~7),REFRESH,BANKSIZE,MRSRBx(x=6~7).下面分別簡要說明。
BWSCON(位寬和等待控制寄存器):
這個寄存器設定各個存儲塊數據寬度和WAIT使能。截圖一部分看看其中含義吧。
其中每四位控制一個BANK,注意的是BANK0由於是啓動區有些特殊。截圖以下:
DW只讀,有前文講到的OM引腳決定。
BANKCONx(x=0~5)(BANK控制寄存器):
該寄存器控制一些跟SDRAM的相關的時間參數。截圖以下:
01位PMC跟頁模式有關,暫時不知道幹什麼用的。(跟MMU有關?)
BANKCONx(x=6~7)(BAMK控制寄存器)
由於設計到能夠控制SDRAM,因此BANK6/7與前面5個不太同樣。
REFRESH刷新控制寄存器
這個寄存器的存在是爲SDRAM服務的,由於DRAM的特性決定了它須要不停的刷新來保存數據。
SDRAM行週期時間公式爲Trc = Tsrc + Trp
刷新時間公式爲上圖也有說明:刷新時間=(2^11-刷新計數值+1)/HCLK。好比咱們使用的SDRAM刷新週期=64ms/8192=7.8125us,HCLK=199MHz時,刷新計數值 = 2^11 - 100x7.8+1=1269。16進製爲0x4F5,則上圖寄存器中0到10位的Refresh Counter值爲0x4F5.
BANKSIZE存儲塊大小控制器
MRSRBx(x=6~7)SDRAM模式設置寄存器
這個主要是跟SDRAM有關。
只有CL[6:4]能夠修改。其它都是固定的。
上面的寄存器就是涉及到內存管理的一些重要寄存器。
由於個人機子配置的是兩塊SDRAM,共64M。因此主要的操做設計到SDRAM,而不是SRAM。
其實仍是對內存控制這裏仍是有不少不懂,只有之後隨着學習繼續理解了。未完待續。。。