Chinaunix首页 | 论坛 | 博客
  • 博客访问: 336307
  • 博文数量: 92
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 960
  • 用 户 组: 普通用户
  • 注册时间: 2009-08-21 19:38
文章分类

全部博文(92)

文章存档

2010年(71)

2009年(21)

我的朋友

分类: 嵌入式

2010-06-15 09:58:26

S3C2440存储单元——K4S561632 SDRAM

K4S561632 SDRAM

一片FLASH4bank组成,每个bank都是一个2^9*2^13行的矩阵,即4M空间,每个空间是16位的。

所以整个SDRAM的大小为:4M*16bit*4bank*2=512Mbit=64M字节。

数据宽度:32bit

ADDR2~ADDR14 13条地址线(因为读写都是以4个字节进行的,所以不会有ADDR0ADDR1

nSCAS是列选信号,使能时13条地址线给出列地址

nSRAS是行选信号,使能时13条地址线中的9条给出行地址

BA0BA1是由ADDR24ADDR25控制,进行4bank的选择

nWBE0~nWBE34字节的选择信号。

nWE是写使能

 

下载u_bootNAND FLASH和使用ADS之前都需要写配置文件,初始化存储单元寄存器

WATCHDOG TIMER SPECIAL REGISTERS

SetMem+32-Bit+0x53000000+0x00000000

关看门狗定时器

 

INTERRUPT MASK (INTMSK) REGISTER

SetMem+32-Bit+0x4A000008+0xFFFFFFFF

关中断

 

INTERRUPT SUB MASK (INTSUBMSK) REGISTER

SetMem+32-Bit+0x4A00001C+0x00007FFF

关子中断

 

BUS WIDTH & WAIT CONTROL REGISTER (BWSCON)

SetMem+32-Bit+0x48000000+0x2212D110

BWSCON寄存器设置总线宽度和等待时间,对8128M存储单元的配置,

Bank0接了NOR FLAH 如选中默认为16位。

Bank1接了IDE接口,NOR 32位,NAND16位。

Bank3接了DM9000网卡驱动,使用UB/LB,并且使能芯片等待。

Bank6接了SDRAM 32

 

BANK CONTROL REGISTER (BANKCONN: NGCS0-NGCS5)

SetMem+32-Bit+0x4800000C+0x00002E50

SetMem+32-Bit+0x48000010+0x00002E50

SetMem+32-Bit+0x48000014+0x00002E50

SetMem+32-Bit+0x48000018+0x00002E50

设置bank2~bank5的时序,这里是根据S3C2440A使用手册设置的

Tacp=2c Tach=1c Tcoh=1c Tacc=10c Tcos=1c Tacs=1c

 

BANK CONTROL REGISTER (BANKCONn: nGCS6-nGCS7)

SetMem+32-Bit+0x4800001C+0x00018005

SetMem+32-Bit+0x48000020+0x00018005

设置bank6bank7SDRAM,并设置其列地址数为9,时序设置如下:

Tacs=0c Tcos=0c Tacc=1c Tcoh=0c Tcah=0c

 

REFRESH CONTROL REGISTER

SetMem+32-Bit+0x48000024+0x00960542

设置SDRAM的刷新频率(就是行列的扫描时间)Tsrc=5c, Trp=3c, 模式设置为自动扫描

2^11+1-HCLKMHz*SDRAM刷新周期(us=0x542

算的SDRAM刷新周期为15.6us

 

BANKSIZE REGISTER

SetMem+32-Bit+0x48000028+0x00000032

设置bank6bank7 128M, SCLK is active only during the access, SDRAM power down mode enable

 

SDRAM MODE REGISTER SET REGISTER (MRSR)

SetMem+32-Bit+0x4800002C+0x00000030

SetMem+32-Bit+0x48000030+0x00000030

 

 

在系统使用SDRAM之前,需要对S3C2440的存储器控制器进行初始化。其中对与SDRAMBank6)相关的寄存器进行了特殊的设置,以使SDRAM能够正常工作。由于C语言程序使用的数据空间和堆栈空间都定位在SDRAM上,因此,如果没有对SDRAMBank6)的正确初始化,系统就无法正确启动。下面介绍与SDRAM相关的寄存器设置。

 

1  总线宽度&等待控制寄存器(BWSCON0x48000000

在这个寄存器中,可以配置BANK1~BANK7DWWSSTDW决定了数据总线宽度;WS是等待状态是否使能,如果此位为1WAIT信号可以用于延长nOE信号的有效时间;ST决定是否使用UB/LB(SRAM相关)。此寄存器还可以读取(不能写)BANK0的数据总线宽度。

对于SDRAM,只需要设置BANK6BANK7DW相关位,此处设置为32位。BWSCON(0x48000000)=0x22xxxxxx,后面的24位设置和FLASH有关,一个例子是设置为0x22111120

 

2  BANK控制寄存器(BANKCONN

BANK0~BANK5的控制寄存器相同,复位值均为0x0700。包括对Tacs(nGCSn前的地址建立时间)Tcos(nOE信号有效前的片选建立时间)Tacc(访问周期,当WAIT使能时,Tacc必须大于等于4个时钟周期)Tcoh(nOE后的片选保持时间)Tcah(nGCSn后的地址保持时间)Tacp(Page模式下的访问周期)PMC(Page模式配置)

 

BANK6BANK7的控制寄存器相同。如果存储器类型为ROM或者SRAM,情况与BANK0~BANK5类似,如果存储器类型为SDRAM,则需要设置Trcd(RASCAS的延时)SCAN(列地址位数),根据我们使用的SDRAM以及S3C2440HCLKSDRAM时钟由系统的HCLK提供)时钟情况,Trcd3个时钟,列地址位数是9,则BANKCON6(0x4800001C)=0x00018005BANKCON7(0x48000020)=0x00018005

 

3  SDRAM刷新控制寄存器(REFRESH)

包括REFEN(刷新使能),此位一般设置为1TREFMD位(SDRAM刷新模式),初始值为0TrpSDRAM RAS预充电时间),此位需要根据时钟HCLK与选用的SDRAM芯片决定,一般设置为23个时钟;Tsrc位(SDRAM半行周期时间),由Trc-Trp得到,TrcTrp的值由时钟和SDRAM芯片决定;REFRESH COUNTER位(SDRAM刷新计数值),刷新计数值=2^11+1-HCLK*SDRAM刷新时间(刷新时间参考S3C2440SDRAM技术手册)。

 

4  BANK SIZE寄存器(BANKSIZE

BURST_EN位是ARM核突发模式使能位,设为01均可,为了提高效率,此处可以设为1SCKE_ENSDRAM掉电模式使能控制,设为1SCLK_EN,设为1SCLK仅在访问周期才被激活;BK76MAPBANK6BANK7的内存映射,我们使用24B*4M*16bitSDRAM组成32256MB存储器,而且BANK6BANK7大小要相等,所以此处设为2,即128MB/128MBBANKSIZE(0x48000028)=0x00000032

 

5  SDRAM模式寄存器集合寄存器(MRSR

WBL位,突发写长度,一般设为0,突发写长度固定;TM位,测试模式,一般设为00,模式寄存器集合(固定);CL位,CAS延时,根据SDRAM芯片和HCLK时钟计算;BT位,突发类型,一般设为0,连续的(固定);BL位,突发长度,一般设为000(固定的)。MRSR(0x4800002C)=0x00000030(0x48000030)=0x00000030

 

 

 

 

阅读(5268) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~