备注:基于SMDK2450_WinCE60_PM_REL_1.13_090105的BSP包移植
DDR2 SDRM:K4T51163QG
由于此BSP包是基于64MB的内存来设计的,而我们采用的是两片64MB(总共128MB)的DDR2,所以我们首要的工作是可以修改已支持128MB的DDR2,下面是针对此问题修改的记录:
1. SMDK2450\SRC\INC\s3c2450.inc
根据S3C2451中MOBILE DRAM CONTROLLER的描述可知其支持mobile SDRAM、mobile DDR和mobile DDR2,BSP包中也相应支持这三种内存芯片,在s3c2450.inc中有对应的参数设置,BSP包默认的值mobile SDRAM,这个要根据实际的情况来选择,比如之前的设置如下:
GBLL mSDR ; 256Mbit x16 x2ea = 512Mbit mem size
;GBLL mDDR ; 256Mbit x16 x2ea = 512Mbit mem size
;GBLL DDR2 ; 256Mbit x16 x2ea = 512Mbit mem size
改为
;GBLL mSDR ; 256Mbit x16 x2ea = 512Mbit mem size
;GBLL mDDR ; 256Mbit x16 x2ea = 512Mbit mem size
GBLL DDR2 ; 256Mbit x16 x2ea = 512Mbit mem size
对MOBILE DRAM CONTROLLER寄存器参数的设置需要紧密结合内存芯片的参数要求来配置,需要重点注意寄存器BANKCFG的设置,如下:
BANKCFG[RASBW0]和BANKCFG[RASBW1]
图1
我们知道RASBW0和RASBW1分别是指每个bank的列地址的位宽,我们采用的SDRAM如下图所示:
图2
由图2可知此SDRAM的存储结构是32Mbit*16,再结合下图:
图3
有图3可知行地址是13位,列地址是10位,这样就可以确定RASBW0和RASBW1的值,MOBILE DRAM CONTROLLER寄存器其他参数的设置一定要严格按照内存芯片的技术参数来确定,否则很有可能导致系统起不来,或者是如果处理器主频改变之后导致系统不稳定。
2. SMDK2450\SRC\INC\oemaddrtab_cfg.inc
在修改之前g_oalAddressTable表的定义如下
g_oalAddressTable
[ {TRUE}
DCD 0x80000000, 0x30000000, 64 ; 64 MB DRAM BANK 6
; DCD 0x84000000, 0x10000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 2
…………………………
现在我们采用的是128MB的内存,这部分相应改为
DCD 0x80000000, 0x30000000, 128 ; 128 MB DRAM BANK 6
那么这里的0x30000000是怎么确定的呢?见S3C2451中memory map图:
图4
由图4也可知,S3C2451支持的单片内存芯片最大为128MB,而它最大的支持内存地址寻址空间是256MB,这也是WINCE6.0及之前版本系统支持的最大内存空间。
3. SMDK2450\SRC\BOOTLOADER\STEPLDR\startup.s
把ldr r9, =0x04000000 ; 64MB of RAM.
改为
ldr r9, =0x08000000 ; 128MB of RAM.
备注:基于SMDK2450_WinCE60_PM_REL_1.13_090105的BSP包移植
DDR2 SDRM:K4T51163QG
由于此BSP包是基于64MB的内存来设计的,而我们采用的是两片64MB(总共128MB)的DDR2,所以我们首要的工作是可以修改已支持128MB的DDR2,下面是针对此问题修改的记录:
1. SMDK2450\SRC\INC\s3c2450.inc
根据S3C2451中MOBILE DRAM CONTROLLER的描述可知其支持mobile SDRAM、mobile DDR和mobile DDR2,BSP包中也相应支持这三种内存芯片,在s3c2450.inc中有对应的参数设置,BSP包默认的值mobile SDRAM,这个要根据实际的情况来选择,比如之前的设置如下:
GBLL mSDR ; 256Mbit x16 x2ea = 512Mbit mem size
;GBLL mDDR ; 256Mbit x16 x2ea = 512Mbit mem size
;GBLL DDR2 ; 256Mbit x16 x2ea = 512Mbit mem size
改为
;GBLL mSDR ; 256Mbit x16 x2ea = 512Mbit mem size
;GBLL mDDR ; 256Mbit x16 x2ea = 512Mbit mem size
GBLL DDR2 ; 256Mbit x16 x2ea = 512Mbit mem size
对MOBILE DRAM CONTROLLER寄存器参数的设置需要紧密结合内存芯片的参数要求来配置,需要重点注意寄存器BANKCFG的设置,如下:
BANKCFG[RASBW0]和BANKCFG[RASBW1]
图1
我们知道RASBW0和RASBW1分别是指每个bank的列地址的位宽,我们采用的SDRAM如下图所示:
图2
由图2可知此SDRAM的存储结构是32Mbit*16,再结合下图:
图3
有图3可知行地址是13位,列地址是10位,这样就可以确定RASBW0和RASBW1的值,MOBILE DRAM CONTROLLER寄存器其他参数的设置一定要严格按照内存芯片的技术参数来确定,否则很有可能导致系统起不来,或者是如果处理器主频改变之后导致系统不稳定。
2. SMDK2450\SRC\INC\oemaddrtab_cfg.inc
在修改之前g_oalAddressTable表的定义如下
g_oalAddressTable
[ {TRUE}
DCD 0x80000000, 0x30000000, 64 ; 64 MB DRAM BANK 6
; DCD 0x84000000, 0x10000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 2
…………………………
现在我们采用的是128MB的内存,这部分相应改为
DCD 0x80000000, 0x30000000, 128 ; 128 MB DRAM BANK 6
那么这里的0x30000000是怎么确定的呢?见S3C2451中memory map图:
图4
由图4也可知,S3C2451支持的单片内存芯片最大为128MB,而它最大的支持内存地址寻址空间是256MB,这也是WINCE6.0及之前版本系统支持的最大内存空间。
3. SMDK2450\SRC\BOOTLOADER\STEPLDR\startup.s
把ldr r9, =0x04000000 ; 64MB of RAM.
改为
ldr r9, =0x08000000 ; 128MB of RAM.