前段时间为了处理一个从128M升级到256M的DDR问题,搞的是焦头烂额。最终在他人评论的情况下总算试出来了正确成果,下来还得自己总结下。
自己的硬件渠道才选用的是6410的DMC1即32位的DRAM操控器,两个16位128M的DDR的地址线是共在一同连在6410的16根地址线上,数据线是并在一同成32位连在6410上,其它操控脚对应接上。软件之前写入128M运转OK,改成256M呈现页面分配过错导致fatal error而死机。最终发觉是少改了一个当地。
归纳起来有以下三个当地要结语:
1,UBOOT中的smdk6410.h
#define MEMORY_BASE_ADDRESS
….
#define CONFIG_NR_DRAM_BANKS 1
#define PHYS_SDRAM_1
#define PHYS_SDRAM_1_SIZE 0x10000000 //rico
首要只用了DMC1一个BANK,其次SDRAM的巨细要改成256M。
2,UBOOT中的smdk6410.h
#define DMC1_MEM_CFG
#define DMC1_MEM_CFG2
#define DMC1_CHIP0_CFG
0x50<<8)+(0xF0<<0))
#define DMC_DDR_32_CFG
DDR的时序参数照规格书结语即可。此处阐明的是DDR初始化时要写入DDR操控器的几个寄存器参数,包含位宽,片选要求等等。我之前导致死机的过错在于片选有过错,所以改成256M后导致页面地址寻址过错。
3,Kernel中的.config
可以用vi .config进入。确保CONFIG_SMDK6410_RAMSIZE_256M翻开,替换掉CONFIG_SMDK6410_RAMSIZE_128M即可。体现在arch\arm\mach-s3c6400\include\mach\Memory.h:
#ifdef CONFIG_SMDK6410_RAMSIZE_256M
#define PHYS_SIZE
#else
#define PHYS_SIZE