學生在進行開發時,經常對記憶體這塊有疑問,下面将使用exynos4412晶片的華清開發闆(fs4412)為例作為講解。
使用到的手冊如下:
FS4412_CoreBoard_V2.pdf
FS4412-DevBoard-V5.pdf
SEC_Exynos4412_Users Manual_Ver.1.00.00.pdf
簡述
exynos4412存儲分下面幾塊:
iROM:啟動鏡像區,存放三星預置的程式,也叫bl0
iRAM :内部記憶體區,加載通過OM選擇後的啟動程式,通常加載bl1、bl2
SMC:靜态記憶體區,Static Read Only Memory Controller ,通常用于映射外部總線上裝置,如網卡等,該區域被分為4個bank,每個16M(對應硬體手冊xm0開頭的)
SFR:特殊功能寄存器區,通常用于映射SOC内部裝置,如GPIO等
DMC:動态記憶體區,就是我們通常意義上的記憶體。
ps:動态記憶體(由于動态記憶體本身不供電,需要不斷供電重新整理,儲存資料,是以叫動态記憶體)(對應硬體手冊xm1和xm2開頭的)
硬體原理(SMC)
Exynos4412中有1個獨立的SMC,分為4個bank
沒有行位址和列位址,整個晶片可用記憶體大小:2^8bit=256/16=16Byte
外部裝置片選時,隻能選0或者1.
硬體原理(DMC)
Exynos4412中有兩個獨立的DRAM控制器,分别叫DMC0和DMC1,可以接2組不同的DDR記憶體。DMC0和DMC1分别支援大1.5GB的DRAM,它們都支援DDR2/DDR3和LPDDR2等,512 Mb, 1 Gb, 2 Gb, 4 Gb and 8 Gbit的記憶體裝置,支援16/32bit的位寬。DRAM0 對應的位址是0x4000_0000~0xAFFF_FFF共1.5GB,DRAM1 對應的位址是0xA000_000~0x0000_0000共1.5GB。
4412的1GB的DRAM是由4片大小為256M*16的DDR3晶片組合而成(檢視晶片型号可以得到)
晶片型号:K4B4G1646B-HYXX
第一位: K表示記憶體
第二位:4表示falsh類型 DRAM
第三位:B表示DDR3
第4~5位. Density(注:實際機關應該是bit,而不是Byte),我們的是4Gbit=4G/16(資料位)=256MByte
第6~7位. organization:資料線引腳個數,我們的是16
分析完成,開發闆上共有4片這樣的記憶體晶片,總容量就是256M*4=1G
這四片DDR 晶片被分成了兩兩一組,組成32位資料,四片都是挂接到DMC0處
總圖如下:
分解圖如下(隻列了一半):
從上兩圖可以看出,這四片DDR 晶片被分成了兩兩一組,組成32位資料,四片都是挂接到DMC0處,如下:
· 左邊一片16位,右邊16位,組成32位資料
· 全部晶片片選挂到CS0:
· bank線數:
3路線(BA0-BA2),有2^3組合,也就是一個晶片上,bank有8個
· 位址線
位址線數:15(A0-A14)
ps:一個晶片記憶體大支援:2^(bank線數+位址線)=2^33=8Gbit/16=512MByte
· 行列位址線
nRAS,nCAS:複用位址線行和列選擇,同一時刻隻能有一種位址線使用(不是行就是列),我們的闆子上晶片有256M(2^28),28-3(bank)-15(行位址)=10(列位址)
· 尋址流程
這個操作順序是,先片選,CS拉低,然後,當RAS拉低時,表示傳過的是行位址,是A0-A14,15位;當CAS拉低時,表示傳過來的是列位址,是A0-A9,列位址多的幾位是預留的用來擴充記憶體,一個晶片記憶體多可以擴充到512M。
記憶體劃分多個bank原因
由于DDR是不自備充電電路的,是以,每隔一段時間,記憶體控制器就會重新整理一次電路,也就是要充一次電,如果隻有一個Bank,那麼結果就是在某一時刻,要麼都充電,要麼都不充電。
像上面這樣分成了8個Bank,當我對000充電的時候,我還可以在010或是剩下的别的Bank中讀取資料,這樣就減小了等待的時間,不用說當電路重新整理時,不能讀取資料了。
exynos闆子上,每個bank大小= 256M/8=32M(1個晶片上有2^3個bank)
記憶體計算方法
SDRAM容量計算
計算可尋址單元的數量(32位)
位址線數(管腳數):11(A0-A10)
bank線數:2(BA0-BA1) 可以組合出2^2個 bank
大行線數=211(例如位址線的編号,11個管腳線,組合有211種)
大列線數=211(例如位址線的編号,11個管腳線,組合有211種)
一個bank中總單元數=211x 211
晶片中總單元數=(bank個數)×(一個bank中總單元數)
= 22 x 211 x 211
= 224
備注:
因為行線與列線上傳輸的資料是經過編碼(組合方式)的,而不是直接的行号和列号,
也就是說每個bank裡有213 個行和 29 個列,并非隻有13行和9列。
是以要尋址的單元在第(2行線資料 )行,第( 2列線資料)列。
例如bank0,行線資料是0 0000 0010 0000,列線資料是0 0000 1000,
意思是要擷取行32,列8的單元的資料,而不是行5,列3的資料。
如果行線資料是 0 0010 1101 0110,列線資料是0 0011 1010,意思是擷取行726,列58的單元的資料。
例如一個32MB的SDRAM晶片中有4個Logic-bank(邏輯bank),位寬16bit(即每個單元是16bits),位址線13條,大行線數13,大列線數9。計算得:
一個bank的單元數= 213 x 29= 4194304(即4M)。
晶片總單元數=4Banks × 4M units = 16M units 。
晶片總位數=16M units × 16bits/per_unit = 256M bits 。
晶片總位元組數=256M bits/8 = 32M Bytes 。
記憶體初始化流程
在三星提供的資料手冊《SEC_Exynos4412_Users Manual_Ver.1.00.00》的第1046頁提供給了一段關于LPDDR2-S4的初始化步驟,LPDDR2表示低功耗DDR2,DDR3的初始化過程應和這個一樣,我們就按這個過程來初始化DDR3
嵌入式物聯網需要學的東西真的非常多,千萬不要學錯了路線和内容,導緻工資要不上去!
分享大家一個資料包,差不多150多G。裡面學習内容、面經、項目都比較新也比較全!
掃碼進群領資料