天天看點

exynos4412記憶體分析(一)

學生在進行開發時,經常對記憶體這塊有疑問,下面将使用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

exynos4412記憶體分析(一)

沒有行位址和列位址,整個晶片可用記憶體大小: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。

exynos4412記憶體分析(一)

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處

總圖如下:

exynos4412記憶體分析(一)

分解圖如下(隻列了一半):

從上兩圖可以看出,這四片DDR 晶片被分成了兩兩一組,組成32位資料,四片都是挂接到DMC0處,如下:

· 左邊一片16位,右邊16位,組成32位資料

exynos4412記憶體分析(一)

· 全部晶片片選挂到CS0:

exynos4412記憶體分析(一)

· bank線數:

3路線(BA0-BA2),有2^3組合,也就是一個晶片上,bank有8個

exynos4412記憶體分析(一)

· 位址線

位址線數:15(A0-A14)

exynos4412記憶體分析(一)

ps:一個晶片記憶體大支援:2^(bank線數+位址線)=2^33=8Gbit/16=512MByte

· 行列位址線

nRAS,nCAS:複用位址線行和列選擇,同一時刻隻能有一種位址線使用(不是行就是列),我們的闆子上晶片有256M(2^28),28-3(bank)-15(行位址)=10(列位址)

exynos4412記憶體分析(一)

· 尋址流程

這個操作順序是,先片選,CS拉低,然後,當RAS拉低時,表示傳過的是行位址,是A0-A14,15位;當CAS拉低時,表示傳過來的是列位址,是A0-A9,列位址多的幾位是預留的用來擴充記憶體,一個晶片記憶體多可以擴充到512M。

記憶體劃分多個bank原因

由于DDR是不自備充電電路的,是以,每隔一段時間,記憶體控制器就會重新整理一次電路,也就是要充一次電,如果隻有一個Bank,那麼結果就是在某一時刻,要麼都充電,要麼都不充電。

exynos4412記憶體分析(一)

像上面這樣分成了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

exynos4412記憶體分析(一)

嵌入式物聯網需要學的東西真的非常多,千萬不要學錯了路線和内容,導緻工資要不上去!

分享大家一個資料包,差不多150多G。裡面學習内容、面經、項目都比較新也比較全!

掃碼進群領資料

exynos4412記憶體分析(一)