我的系統需要用到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_1gx2bool oemgetextensiondram(lpdword pmemorystart, lpdword pmemorylength)
#endif
3.d:/wince600/platform/smdk6410/src/inc/oemaddrtab_cfg.inc
將最前面的定義修改為
[ bsp_ram_1gx2dcd 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_1gx2cmm 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把使用者表分拆成好幾個,這就是分表。分表還僅僅是一台機器上的事情,當表記錄到了...