6410添加2片mDDR RAM的修改记录

来源:互联网 发布:.net像php那样数据库类 编辑:程序博客网 时间:2024/05/17 21:43
    我的系统需要用到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    {TRUE}
 [    BSP_RAM_1GX2
USE_DMC1_CHIP1        SETL    {TRUE}
 |
USE_DMC1_CHIP1        SETL    {FALSE}
 ]
配置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
DMC1_CHIP0_CFG        EQU    ((1<<16)+(0x50<<8)+(0xF8<<0))    ; BRC (Linear Address Mapping), OnDRAM can't Use RBC (A Port Only for Modem!!!)
 [    BSP_RAM_1GX2
DMC1_CHIP1_CFG        EQU    ((1<<16)+(0x60<<8)+(0xF8<<0))    ; BRC (Linear Address Mapping), OnDRAM can't Use RBC (A Port Only for Modem!!!)
 ]
2.D:/WINCE600/PLATFORM/SMDK6410/SRC/OAL/OALLIB/init.c
此文件添加以下内容
#ifdef BSP_RAM_1GX2
BOOL OEMGetExtensionDRAM(LPDWORD pMemoryStart, LPDWORD pMemoryLength)
{
 *pMemoryStart = 0x88000000;
 *pMemoryLength   = 0x08000000;//128M
    OALMSG(OAL_FUNC, (TEXT("OEMGetExtensionDRAM/n/r")));
 return TRUE;
}
#endif
3.D:/WINCE600/PLATFORM/SMDK6410/SRC/INC/oemaddrtab_cfg.inc
将最前面的定义修改为
  [    BSP_RAM_1GX2
        DCD     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_1GX2
    CMM         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 {TRUE}"
!else
ADEFINES=$(ADEFINES) -pd "BSP_RAM_1GX2 SETL {FALSE}"
!endif

修改完后,直接Rebuild Current BSP就OK了。注意先更新STEPLDR,再更新NK。
原创粉丝点击