6410新增2片mDDR RAM的修改記錄

2021-05-21 17:13:27 字數 3617 閱讀 7017

我的系統需要用到2片mddr的ram,型號為k4x1g323pd,32mx32 mobile ddr sdram。
看datasheet,6410的ram控制器可以控制2片ram,chip0實體地址為0x50000000,chip1實體地址為0x60000000.
兩片ram的容量為0x08000000.在物理上位址不連續。
在網上找到修改ram容量和記憶體擴充套件的一些資料,做了下參考
http://blog.csdn.net/zhandoushi1982/archive/2009/11/09/4789009.aspx
http://blog.21ic.com/user1/801/archives/2010/66583.html
http://blog.csdn.net/gooogleman/archive/2009/03/19/4004153.aspx
經過兩天的努力,終於找到了解決的方法。
難點有兩個:1.ram控制器初始化的配置
2.由於我用的ram位址不連續,需要記憶體擴充套件
附上解決的詳細方法:
1.d:/wince600/platform/smdk6410/src/inc/memparam_mddr.inc
此檔案配置ram初始化的引數
新增chip1的選擇
use_dmc1_chip0        setl    

[    bsp_ram_1gx2

use_dmc1_chip1        setl   

|use_dmc1_chip1        setl   

]

配置ram的一些基本引數。2chip,row,col,type都得對一下

[    bsp_ram_1gx2

dmc1_mem_cfg        equ    ((1<<21)+(0<<18)+(2<<15)+(0<<14)+(0<<13)+(0<<7)+(0<<6)+(2<<3)+(2<<0))    ; colum a0~a9

|dmc1_mem_cfg        equ    ((1<<30)+(0<<21)+(0<<18)+(2<<15)+(0<<14)+(0<<13)+(0<<7)+(0<<6)+(2<<3)+(2<<0))    ; colum a0~a9

]

配置位址。datasheet上說的非常不詳細,除錯了很久才得出正確結論。
0x50表示chip0對應實體地址為0x50000000,0x60表示chip1對應實體地址為0x60000000
chip0的位址段位0x50000000-0x57ffffff,所以為0xf8
chip1的位址段為0x60000000-0x67ffffff,所以也為0xf8
此檔案新增以下內容
#ifdef bsp_ram_1gx2

bool oemgetextensiondram(lpdword pmemorystart, lpdword pmemorylength)

#endif

3.d:/wince600/platform/smdk6410/src/inc/oemaddrtab_cfg.inc

將最前面的定義修改為
[    bsp_ram_1gx2

dcd     0x80000000, 0x50000000,  128     ; 128 mb dram

dcd     0x88000000, 0x60000000,  128     ; 128 mb dram

|dcd     0x80000000, 0x50000000,  128     ; 128 mb dram

]4.修改config.bib檔案

if bsp_ram_1gx2

cmm         8e500000    00300000        reserved

display     8e800000    00c00000        reserved

mfc_jpeg    8f400000    00c00000        reserved

else

cmm         86500000    00300000        reserved

display     86800000    00c00000        reserved

mfc_jpeg    87400000    00c00000        reserved

endif bsp_ram_1gx2

注意!!一定不要修改

#define     ramlen       09500000    ; 141mb (will be auto-sized from the end of nk)
系統會起不來。
5.d:/wince600/platform/smdk6410/src/inc/image_cfg.h
#ifdef bsp_ram_1gx2

#define image_cmm_buffer_offset         (0x0e500000)

#else

#define image_cmm_buffer_offset         (0x06500000)

#endif

#ifdef bsp_ram_1gx2

#define image_framebuffer_offset        (0x0e800000)

#else

#define image_framebuffer_offset        (0x06800000)

#endif

#ifdef bsp_ram_1gx2

#define image_mfc_buffer_offset         (0x0f400000)

#else

#define image_mfc_buffer_offset         (0x07400000)

#endif

6.d:/wince600/platform/smdk6410/smdk6410.bat
新增set bsp_ram_1gx2=1
7.在幾個相關的sources檔案裡新增定義
d:/wince600/platform/smdk6410/src/bootloader/eboot/sources
d:/wince600/platform/smdk6410/src/bootloader/stepldr/sources
d:/wince600/platform/smdk6410/src/oal/oallib/sources
!if "$(bsp_ram_1gx2)" == "1"

cdefines=$(cdefines) -dbsp_ram_1gx2

adefines=$(adefines) -pd "bsp_ram_1gx2 setl "

!else

adefines=$(adefines) -pd "bsp_ram_1gx2 setl "

!endif

修改完後,直接rebuild current bsp就ok了。注意先更新stepldr,再更新nk。

2 S3C6410 裸機開發 LED

相信不要學習微控制器,嵌入式系統的愛好者都是從點亮led 開始的,大家都也形成了這樣的乙個習慣性思維,其實這是熟悉一款微控制器或微處理器的最好的起步方法,gpio 對於 微處理器來說是相對簡單但有時最基本和最重要的,所以,從led 開始學習,可以很好的熟悉這款微處理器的一些特性和程式設計方法,好了,...

mvc 框架 2 配置新增

我們之前已經將簡單的mvc框架封狀出來了 那麼現在我們對我們封裝的mvc框架進行填充,首先我們從配置項上下手 需求 將路由以及連線資料變數設定成配置檔案 檔案 core lib conf.php 配置檔案 core config 放置對應配置檔案 那麼首先讀取配置檔案的思路 1 首頁我們要在core...

從大資料談起2 分片和分層

在網際網路的發展過程中,當開始碰到資料庫訪問瓶頸時,僅僅是單張資料表到了一定的容量時,比如某網際網路公司有了千萬級別的使用者時,查詢操作就開始變慢。之後某位牛x的技術人員想出了乙個很好的解決方案,就是分表,按照使用者的id把使用者表分拆成好幾個,這就是分表。分表還僅僅是一台機器上的事情,當表記錄到了...