http://topic.eeworld.net/u/20081121/16/4ba50dc9-fe31-48b9-acce-0619bb010372.html?27857
和这个帖子的情况基本相同,从里面看到不少东西,但我们的两个平台实现上好像有些差距。config.bib和oemaddrtab都差不多。我们的平台是这样实现的。
void NKStartup (struct KDataStruct * pKData)
{
...
...
OEMInit(); // initialize firmware
// flush I&D TLB
OEMCacheRangeFlush (NULL, 0, CACHE_SYNC_FLUSH_TLB);
KernelFindMemory();
...
...
}
OEMInit();中没有找到OEMGetExtensionDram,在KernelFindMemory中找到了,如下:
KernelFindMemory(void){
...
...
//
// Ask OEM if extension RAM exists.
//
if (g_pOemGlobal->pfnEnumExtensionDRAM) {
cExtSections = (*g_pOemGlobal->pfnEnumExtensionDRAM)(MemSections, MAX_MEMORY_SECTIONS - 1);
DEBUGCHK(cExtSections < MAX_MEMORY_SECTIONS);
} else if (OEMGetExtensionDRAM (&MemSections[0].dwStart, &MemSections[0].dwLen)) {
cExtSections = 1;
} else {
cExtSections = 0;
}
dwRAMStart = pTOC->ulRAMStart;
dwRAMEnd = g_pOemGlobal->dwMainMemoryEndAddress;
mainpages = (PAGEALIGN_DOWN(g_pOemGlobal->dwMainMemoryEndAddress) - PAGEALIGN_UP(pTOC->ulRAMFree+MemForPT))/VM_PAGE_SIZE - 4096/VM_PAGE_SIZE;
...
...
}
同样存在无法启动的问题。
栈,MMU映射表,config.bib中各段空间大小都要设置的
寄存器中的colomn,row address;memory map都挺重要的。
1. ram的硬件寄存器配置有没有问题?
在eboot下测试一下
2. mmu配置
参照别人的配一下
如果我什么也不动,直接用128的那些配置是可以直接运行的,说明寄存器的配置是兼容的,应该不用修改。就是地址映射的问题太多。而且给我的感觉是那么多内容必须一次性改好才能运行起来。
IF :DEF: BSP_DDR256MB
DCD 0x80000000, 0xB8000000, 256 ; ZYLONITE DDR SDRAM (256 MB).
。。。
。。。
。。。
DCD 0x9A400000, 0xB8000000, 4 ; to avoid prefetch failure, 0xBC00_0000 must have same virtual/physical address.
各位大侠,最后一项的设置意义是什么呀,在一开始的时候0xB8000000不是已经映射过了吗?
好了很长时间也没找到DDR在哪里初始化的。关键是那个MDCNFG不知道在哪配的。哪位兄弟有DMC对DDR的配置实例代码。另外MMU还要重新配置吗,感觉不需要吧。多谢!