SDRAM學習

1. 先看原理圖 和 UM 的 Memory_map,目標:找出合法地址
1.1 看原理圖可以知道,板子上一共有3個和內存相關的端口,但是隻有兩個是接DDR的。
1.2 看 UM 的 Mem_map 可以知道有兩個 DDR 的端口,DRAM0:0x2000_0000 - 0x3FFF_FFFF,DRAM1:0x4000_0000 - 0x7FFF_FFFF,整個內存地址爲:0x2000_0000 - 0x7FFF_FFFF。
1.2.1 通過地址,可以看出:DRAM0 端口最大可接 512MB,DRAM1 端口最大可接 1024MB,所以 S5PV210 最大可接 DRAM :1.5GB。


2. 再看原理圖的接線,目標:分析 地址總線,數據總線,控制線
2.1 地址總線:DRAM0:Xm1_ADDR0 - Xm1_ADDR13,一共 14 根,所以一個端口是 14 位地址。
2.2 數據總線:DRAM0:Xm1_DATA0 - Xm1_DATA31,一共 32 根,這也就是內存字寬的大小
2.3 控制線 :A0 - A3,一共 3 根用來選 Bank,其他基本上是複雜的時序控制

3. 再看原理圖實際的內存顆粒,目標:分析 地址總線,數據總線,控制線
3.1 首先直接可以看出,板子上一共用了 4 個內存顆粒,每個顆粒的名稱叫 K4T1G164QQ
3.1.1 K4T1G164QQ 這個名字說明,這個內存顆粒的大小是 1Gb = 128MB。
3.2 地址總線:每個顆粒的地址總線都是 14 根,並且名稱兩兩相同,說明兩兩並連,正好對上板子上內存端口的地址總線
3.3 數據總線:每個顆粒的數據總線都是 16 根,兩個顆粒並聯組成 32 根,正好對上板子上內存端口的地址總線。
3.4 控制線 :控制線也說明了兩兩並聯。
3.5 總結 :我們使用了 4 個內存顆粒,兩兩並聯,每個顆粒大小爲 128 MB,兩個爲 256MB。

4. 總結:
1. 由上面的信息,可以知道,我們 SOC 有兩個內存端口,地址範圍是 0x2000_0000 - 3FFF_FFFF,0x4000_0000 - 7FFF_FFFF,然後我們實際上個每個端口只接了 256MB 的大小,到此我們還不能真正知道可使用的物理地址。
2. 內存顆粒使用的地址是 14 位的。


5. 查閱內存顆粒的數據手冊 K4T1G164QQ,主要看 Block Diagram (128Mb x 8) 圖
4.1 我們對內存顆粒輸入 A0-A3,ADDR0-ADDR13,用來確定地址。
4.2 內存是一個矩陣,以我用的爲例,128Mb * 8 的內存顆粒,實際上是這個內存顆粒是由 8 個 Bank 構成,每個 Bank 大小是 128Mb,控制線裏的 A0 - A3 一共 3 根線用來選擇 Bank。
4.3 14 根 ADDR線 確定 Row-Address 和 Col-Adress,14 位的 Row-Address 和 10 位的 Col-Adress 可以組成 2^24 個地址,也就是 16M 個地址,而內存又是以字節編址的,所以實際確定的空間大小是 16MB,16MB = 128Mb。
4.4 總結:
我們可以看出確定內存地址的關鍵是:控制線的 A0-A3,地址線的ADDR0-ADDR13。

6. uboot 代碼閱讀 (DDR2初始化)

mem_ctrl_asm_init

Line:20 - 52
DMC0 Drive Strength

Line: 54 - 84
DMC1 Drive Strength

Line: 85 - 113
DMC0 DDL 設置相關


Line: 118 - 226 
DMC0 初始化 
需要注意一點:地址設置
Line:125 - 129 地址設置
ldr r1, =0x30F01313
str r1, [r0, #DMC_MEMCONFIG0]


ldr r1, =0x40F01313
str r1, [r0, #DMC_MEMCONFIG1]

MEMCONFIG0 指定當前 控制器 的有效地址,所以有效地址是 0x3000_0000 - 0x3FFF_FFFF
MEMCONFIG1 聲明下個 控制器 的有效地址,下個有效地址聲明是 0x4000_0000 - 0x4FFF_FFFF


// DMC0 初始化完成
///
//////////////////////////////////////////////////
///
// DMC1 初始化開始


Line:227 - 254
DMC1 的 DDL 設置

Line:260 - 370
DMC1 的初始化
Line:269 - 273 DMC1 地址設置
ldr r1, =0x40F01313
str r1, [r0, #DMC_MEMCONFIG0]


ldr r1, =0x00F01313
str r1, [r0, #DMC_MEMCONFIG1]
MEMCONFIG0 指定當前 控制器 的有效地址,所以有效地址是 0x4000_0000 - 0x4FFF_FFFF
MEMCONFIG1 添加下一個控制器的有效地址,但是下面並沒有控制器,所以這個添加的信息無用




其餘部分都註釋了。



詳細 DDR2 初始化可查看 瘋雨 的 玩轉DDR 文章












發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章