您的位置:首页 > 其它

DDR地址另外配置+DDR初始化参数更改2

2016-12-27 17:45 113 查看
《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org

将0x20000000更改到0x30000000,

好处就是和DRAM1以0x40000000开头的地址,连到一起了,

DDR初始化代码在lowlevel_init.S中,

是不动的,即对相应寄存器操作是不变的,

变得是对寄存器中写的值得更改,

而这个值是以宏定义的形式存在的,

所以我们更改这个值就可以了,

#define DMC0_MEMCONFIG_0 0x20E01323

改为如下

#define DMC0_MEMCONFIG_0 0x30E01323

此时相当于硬件更改到30开头的,

但是与之对应的软件部分还没更改,

#define MEMORY_BASE_ADDRESS 0x20000000

改为如下

#define MEMORY_BASE_ADDRESS 0x30000000

而上面这句话的使用地方,我们前面才提到,

在这里,

#define CONFIG_NR_DRAM_BANKS    2          /* we have 2 bank of DRAM */

//#define SDRAM_BANK_SIZE         0x20000000    /* 512 MB */

#define SDRAM_BANK_SIZE         0x10000000    /* 256 MB */

#define PHYS_SDRAM_1            MEMORY_BASE_ADDRESS /* SDRAM Bank #1 */

#define PHYS_SDRAM_1_SIZE       SDRAM_BANK_SIZE

//#define PHYS_SDRAM_2            (MEMORY_BASE_ADDRESS + SDRAM_BANK_SIZE) /* SDRAM Bank #2 */

#define PHYS_SDRAM_2            0x40000000

#define PHYS_SDRAM_2_SIZE       SDRAM_BANK_SIZE

虚拟地址映射表中的更改,

从start.s中去找,

找到_mmu_table_base,

接着找到lowlevel.init.s中的mmu_table,

// .set __base,0x200

修改为
.set __base,0x300

这是整体的,顺便看下虚拟地址设置,

/* .rept 0xc00 - 0xb00
.word 0x00000000
.endr */

.set __base,0xB00
.rept 0xc00 - 0xb00
FL_SECTION_ENTRY __base,3,0,0,0
.set __base,__base+1
.endr

//.set __base,0x200
.set __base,0x300
// 256MB for SDRAM with cacheable
.rept 0xD00 - 0xC00
FL_SECTION_ENTRY __base,3,0,1,1
.set __base,__base+1
.endr

最好改,如果我们没有使能MMU就,完蛋了,

 /* base address for uboot */

#ifdef CONFIG_ENABLE_MMU

#define CFG_UBOOT_BASE 0xc3e00000

#else

//#define CFG_UBOOT_BASE 0x23e00000

#define CFG_UBOOT_BASE 0x33e00000

#endif

结果只出现了一个OK,

上面说到效果进了一步,但是还是有问题,

改这里,是上面修改过的地方,

#define DMC0_MEMCONFIG_0 0x30E01323

修改后

#define DMC0_MEMCONFIG_0 0x30F01323,

这是另一个地方,

#ifdef CONFIG_MCP_SINGLE

ulong virt_to_phy_smdkc110(ulong addr)

{
if ((0xc0000000 <= addr) && (addr < 0xd0000000))
//return (addr - 0xc0000000 + 0x20000000);
return (addr - 0xc0000000 + 0x30000000);
else
printf("The input address don't need "\"a virtual-to-physical translation : %08lx\n", addr);
return addr;

}

然后这一部分就算ok了,

//return (addr - 0xc0000000 + 0x20000000);
return (addr - 0xc0000000 + 0x30000000);

这个20开头改30应该能联想到前面吧,

DDR初始化没问题,但是DDR的这些参数,对其它方面间接产生了影响,
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  u-boot 移植