SRAM还是SDRAM:SRAM-0b00,SDRAM-0b11
b.当MT=0b11时,还需要设置两个参数:
Trcd([3:2]):RAS to CAS delay,设为推荐值0b01
SCAN([1:0]):SDRAM的列地址位数,对于本开发板使用的SDRAM HY57V561620CT-H,列地址位数为9,所以SCAN=0b01。如果使用其他型号的SDRAM,您需要查看它的数据手册来决定SCAN的取值:00-8位,01-9位,10-10位
REFRESH控制寄存器:
REFRESH地址:x48000024
REFRESH(SDRAM refresh control register):设为0x008e0000+ R_CNT
地址0其中R_CNT用于控制SDRAM的刷新周期,占用REFRESH寄存器的[10:0]位,它的取值可如下计算(SDRAM时钟频率就是HCLK):
R_CNT = 2^11 + 1 – SDRAM时钟频率(MHz) * SDRAM刷新周期(uS)
在未使用PLL时,SDRAM时钟频率等于晶振频率12MHz;SDRAM的刷新周期在SDRAM的数据手册上有标明,在本开发板使用的SDRAM HY57V561620CT-H的数据手册上,可看见这么一行“8192 refresh cycles / 64ms”:所以,刷新周期=64ms/8192 = 7.8125 uS。
对于本实验,R_CNT = 2^11 + 1 – 12 * 7.8125 = 1955,
REFRESH=0x008e0000 + 1955 = 0x008e07a3
BANKSIZE寄存器:
BANKSIZE 地址0x48000028
BURST_EN [7] ARM核突发操作允许
0--禁止突发操作
1--允许突发操作
Reserved[6] 不使用
SCKE_EN [5] SCKE允许控制
0=SDRAM SCKE 禁止
1=SDRAM SCKE 允许
SCLK_EN [4] SCLK仅在减少功耗期间SDRAM存取周期内允许,当SDRAM不进行
存取时,SCLK变L电平
0=SCLK总是激活
1=SDRAM仅在存取期间激活(推荐)
Reserved[3] 不使用
BK76MAP[2:0] BANK6/7存储映射
010=128MB/128MB 001=64MB/64MB
000=32MB/32MB 111=16MB/16MB
110=8MB/8MB 101=4MB/4MB
100=2MB/2MB
位[7]=1:Enable burst operation
位[5]=1:SDRAM power down mode enable
位[4]=1:SCLK is active only during the access (recommended)
位[2:1]=010:BANK6、BANK7对应的地址空间与BANK0-5不同。BANK0-5的地址空间都是固定的128M,地址范围是 (x*128M)到(x+1)*128M-1,x表示0到5。但是BANK7的起始地址是可变的,您可以从S3C2410数据手册第5章“Table 5-1. Bank 6/7 Addresses”中了解到BANK6、7的地址范围与地址空间的关系。本开发板仅使用BANK6的64M空间,我们可以令位 [2:1]=010(128M/128M)或001(64M/64M):这没关系,多出来的空间程序会检测出来,不会发生使用不存在的内存的情况——后面 介绍到的bootloader和linux内核都会作内存检测。
位[6]、位[3]没有使用
SDRAM模式寄存器设置寄存器(MRSR):
MRSRB6地址0x4800002C
MRSRB7 地址0x48000030
能让我们修改的只有位[6:4](CL),SDRAM HY57V561620CT-H不支持CL=1的情况,所以位[6:4]取值为010(CL=2)或011(CL=3)。
|