项目中遇到需要把64M SDRAM升级到128M的情况,我们板子上是两片32M的K4S561632C,而K4S511632C是64M的,直接更换不需要重新画PCB。原理图参见TQ2440—V2核心板,将对应电阻重焊后,就可将原来接到A24,A25引脚上的地址线换到A25,A26上。
u-boot中board/samsung/hfrk2440/lowlevel_init.S中:
#define BWSCON 0x48000000
/* BWSCON */#define DW8 (0x0)#define DW16 (0x1)#define DW32 (0x2)#define WAIT (0x1<<2)#define UBLB (0x1<<3)
#define B6_BWSCON (DW32) //两片16位SDRAM并成32位#define B7_BWSCON (DW32)
#define B6_MT 0x3 /* SDRAM */
/* Determine the memory type for bank6 and bank7. 00 = ROM or SRAM 01 = Reserved (Do not use) 10 = Reserved (Do not use) 11 = Sync. DRAM */#define B6_Trcd 0x1 /* 3clk *//*在发送列读写命令时必须要与行有效命令有一个间隔,这个间隔被定义为tRCD,即RAS to CAS Delay(RAS至CAS延迟),也可以理解为行选通周期,这应该是根据芯片存储阵列电子元件响应时间(从一种状态到另一种状态变化的过程)所制定 的延迟.S3C2440的FCLK最大的频率值为400Mhz,HCLK最大为133Mhz,PCLK最大为67Mhz。再查一下关于这些个时钟频率的使用就可以知道,内存方面,是由HCLK来控制的。那么经过简单的计算就可以知道,内存的一个时钟周期,最短为7.519ns(1s/133M)。再看一下K4S561632E-UC75的数据手册,关于Trcd的值的描述,K4S561632E-UC75的内存,这个值,最少需要20ns。如果 Trcd为2clk,则时间不够,差一点儿,所以只能填3clk。如果最短的时间都能满足,那么当内存工作在比133Mhz低的情况下,就更能满足了,所以这里的Trcd为3clk。*/#define B6_SCAN 0x1 /* 9bit *//* K4S561632H的内存地址的Column Address为(CA0 ~ CA8),即9bit,所以值为0x1,对应64M SDRAM。 K4S511632H的内存地址的Column Address为(CA0 ~ CA9),即10bit,所以值为0x2,对应128M SDRAM。*/#define B7_MT 0x3 /* SDRAM */#define B7_Trcd 0x1 /* 3clk */#define B7_SCAN 0x1 /* 9bit */
/* REFRESH parameter */#define REFEN 0x1 /* Refresh enable */#define TREFMD 0x0 /* CBR(CAS before RAS)/Auto refresh *//* SDRAM Refresh Mode 0 = CBR/Auto Refresh 1 = Self Refresh In self-refresh time, the SDRAM control signals are driven to the appropriate level. */#define Trc 0x3 /* 7clk */#define Tchr 0x2 /* 3clk */
#if defined(CONFIG_S3C2440)#define Trp 0x2 /* 4clk */#define REFCNT 1012#else#define Trp 0x0 /* 2clk */#define REFCNT 1269
/* 根据HCLK设置SDRAM的刷新参数,主要有REFCNT寄存器。由于我所用的开发板的HCLK设置为100Mhz,根据SDRAM芯片(K4S561632数据手册上注:64ms refresh period (8K Cycle))的参数计算REFCNT寄存器的值。计算公式如下:R_CNT=2^11+1-SDRAM时钟频率(MHz)*SDRAM刷新周期(us)*/#endif
u-boot的include/configs/hfrk2440.h/*----------------------------------------------------------------------- * Physical Memory Map */#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM *//* 它是由nGCS确定,两片SDRAM的CS都接到了nGCS0上 */#define PHYS_SDRAM_1 0x30000000 /* SDRAM Bank #1 *//* SDRAM的物理基地址,blank6的地址就是0x30000000 */#define PHYS_SDRAM_1_SIZE 0x04000000 /* 64 MB *//* SDRAM的大小,根据板子硬件配置,如果是128M,则应该是0x08000000 */#define PHYS_FLASH_1 0x00000000 /* Flash Bank #1 */
#define CONFIG_SYS_FLASH_BASE PHYS_FLASH_1
/*-----------------------------------------------------------------------*/
相关参考http://hi.baidu.com/
