微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > S3C2410 SDRAM寄存器初始化设置

S3C2410 SDRAM寄存器初始化设置

时间:11-25 来源:互联网 点击:

0-5有点不同:
a.MT([16:15]):用于设置本BANK外接的是SRAM还是SDRAM:SRAM-0b00,SDRAM-0b11
b.当MT=0b11时,还需要设置两个参数:
Trcd([3:2]):RAS to CAS delay(00=2 clocks,01=3 clocks,10=4 clocks),由于使用的是HY57V561620(L)T-H,查看其手册具体在“DEVICE OPERATING OPTION TABLE”,在100M的工作频率下的推荐值为3clocks,所以设为推荐值0b01。
SCAN([1:0]):SDRAM的列地址位数,(00 = 8-bit,01 = 9-bit,10= 10-bit)对于本开发板使用的SDRAM HY57V561620(L)T-H(Column Address : CA0 ~ CA8),列地址位数为9,所以SCAN=0b01。
如果使用其他型号的SDRAM,您需要查看它的数据手册来决定SCAN的取值:00-8位,01-9位,10-10位.

REFRESH:设为0x008e0000+ R_CNT 其中R_CNT用于控制SDRAM的刷新周期,占用REFRESH寄存器的[10:0]位,它的取值可如下计算(SDRAM时钟频率就是HCLK):
R_CNT = 2^11 + 1 – SDRAM时钟频率(MHz) * SDRAM刷新周期(uS)
在未使用PLL时,SDRAM时钟频率等于晶振频率12MHz;
SDRAM 的刷新周期在SDRAM的数据手册上有标明,在本开发板使用的SDRAM HY57V561620(L)-H的数据手册上,可看见这么一行“8192 refresh cycles / 64ms”:所以,刷新周期=64ms/8192 = 7.8125 uS。
对于本实验,R_CNT = 2^11 + 1 – 12 * 7.8125 = 1955, REFRESH=0x008e0000 + 1955 = 0x008e07a3
Trp([21:20]):设置为0即可
Tsrc([19:18]):设置默认值即可。

BANKSIZE:
位[7]=1:Enable burst operation (0=ARM核禁止突发传输,1=ARM核支持突发传输)
位[5]=1:SDRAM power down mode enable(0=不使用SCKE信号令SDRAM进入省电模式,1=使用SCKE信号令SDRAM进入省电模式)
位[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]没有使用。

MRSRBx:
能让我们修改的只有位[6:4](CL=CAS latency,查看SDRAM的DATASHEET)这是SDRAM时序的一个时间参数,SDRAM 不支持CL=1的情况,所以位[6:4]取值为010(CL=2)或011(CL=3)。开发板保守的值为0b11。

NOTE:
In Power_OFF mode, SDRAM has to enter SDRAM self-refresh mode.

1
18
19 #define rGPFCON (*(volatile unsigned long *)0x56000050)
20 #define rGPFDAT (*(volatile unsigned long *)0x56000054)

#define GPF4_OUTP (0x01<8)
23 #define GPF5_OUTP (0x01<10)
24 #define GPF6_OUTP (0x01<12)
25 #define GPF7_OUTP (0x01<14)
26
27 void wait(unsigned long time)
28 {
29 for(;time>0;time--);
30 }
31
32 int main()
33 {
34
35 rGPFCON = GPF4_OUTP|GPF5_OUTP|GPF6_OUTP|GPF7_OUTP;
36
37 while(1)
38 {
39 wait(30000);
40 rGPFDAT = (~1<4);
41 wait(30000);
42 rGPFDAT = (~1<5);
43 wait(30000);
44 rGPFDAT = (~1<6);
45 wait(30000);
46 rGPFDAT = (~1<7);
47
48 }
49 }

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top