新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 6410平臺(tái)上配置Linux的DDR參數(shù)

6410平臺(tái)上配置Linux的DDR參數(shù)

作者: 時(shí)間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
前段時(shí)間為了解決一個(gè)從128M升級(jí)到256M的DDR問題,搞的是焦頭爛額。最后在別人討論的情況下終于試出來了正確結(jié)果,下來還得自己總結(jié)下。

自己的硬件平臺(tái)才采用的是6410的DMC1即32位的DRAM控制器,兩個(gè)16位128M的DDR的地址線是共在一起連在6410的16根地址線上,數(shù)據(jù)線是并在一起成32位連在6410上,其它控制腳對(duì)應(yīng)接上。軟件之前寫入128M運(yùn)行OK,改成256M出現(xiàn)頁面分配錯(cuò)誤導(dǎo)致fatal error而死機(jī)。最后發(fā)覺是少改了一個(gè)地方。

本文引用地址:http://butianyuan.cn/article/201611/319060.htm

綜合起來有以下三個(gè)地方要確認(rèn):

1,UBOOT中的smdk6410.h
#define MEMORY_BASE_ADDRESS 0x50000000
....
#define CONFIG_NR_DRAM_BANKS 1 //rico 1016
#define PHYS_SDRAM_1 MEMORY_BASE_ADDRESS
#define PHYS_SDRAM_1_SIZE 0x10000000 //rico for DDR size
首先只用了DMC1一個(gè)BANK,其次SDRAM的大小要改成256M。

2,UBOOT中的smdk6410.h
#define DMC1_MEM_CFG ((1<<30)+(0<<21)+(0<<18)+(2<<15)+(0<<14)+(0<<13)+(0<<7)+(0<<6)+(3<<3)+(2<<0))
#define DMC1_MEM_CFG2 ((1<<11)+(3<<8)+(1<<6)+(0<<4)+(0<<2)+(1<<0))
#define DMC1_CHIP0_CFG ((1<<16)+(
0x50<<8)+(0xF0<<0))
#define DMC_DDR_32_CFG 0x0
DDR的時(shí)序參數(shù)照規(guī)格書確認(rèn)即可。此處說明的是DDR初始化時(shí)要寫入DDR控制器的幾個(gè)寄存器參數(shù),包括位寬,片選要求等等。我之前導(dǎo)致死機(jī)的錯(cuò)誤在于片選有錯(cuò)誤,所以改成256M后導(dǎo)致頁面地址尋址錯(cuò)誤。

3,Kernel中的.config

可以用vi .config進(jìn)入。保證CONFIG_SMDK6410_RAMSIZE_256M打開,替換掉CONFIG_SMDK6410_RAMSIZE_128M即可。體現(xiàn)在archarmmach-s3c6400includemachMemory.h:
#ifdef CONFIG_SMDK6410_RAMSIZE_256M
#define PHYS_SIZE (256 * 1024 * 1024)
#else
#define PHYS_SIZE (128 * 1024 * 1024)



關(guān)鍵詞: 6410平臺(tái)LinuxDDR參

評(píng)論


技術(shù)專區(qū)

關(guān)閉