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

S3C2410 SDRAM寄存器初始化设置

时间:11-25 来源:互联网 点击:
几天前看初始化SDRAM代码时觉得比较困难,主要是因为之前没有接触过这方面,毫无经验,现在看来不难,麻烦在需要根据datasheet进行设置,好在是移植,很多强人的文章可参考。自己很容易忘事,就记录下来吧。

我的板子是s3c2410,使用两片容量为32MB、位宽16bit的HY57V561620CT-H芯片拼成容量为64M、32bit的SDRAM存储器。根据2410datasheet,要使用SDRAM需配置13个寄存器,以下逐个来看:

1、 BWSCON:Bus width & wait status control register总线位宽和等待状态控制寄存器。

此寄存器用于配置BANK0 – BANK7的位宽和状态控制,每个BANK用4位来配置,分别是:

● ST(启动/禁止SDRAM的数据掩码引脚。对于SDRAM,此位置0;对于SRAM,此位置1)

● WS(是否使用存储器的WAIT信号,通常置0为不使用)

● DW(两位,设置位宽。此板子的SDRAM是32位,故将DW6设为10)

特殊的是bit[2:1],即DW0,设置BANK0的位宽,又板上的跳线决定,只读的。我这板子BWSCON可设置为0x22111110。其实只需将BANK6对应的4位设为0010即可。

2、 BANKCON0 – BANKCON7

用来分别配置8个BANK的时序等参数。SDRAM是映射到BANK6和BANK7上的(内存只能映射到这两个BANK,具体映射多大的空间,可用BANKSIZE寄存器设置),所以只需参照SDRAM芯片的datasheet配置好BANK6和BANK7,BANKCON0 – BANKCON5使用默认值0x00000700即可。

对于BANKCON6和BANKCON7中的各个位的描述:

(1)MT(bit[16:15]):设置本BANK映射的物理内存是SRAM还是SDRAM,后面的低位就根据此MT的选择而分开设置。本板子应置0b11,所以只需要再设置下面两个参数

(2)Trcd(bit[3:2]):RAS to CAS delay(00=2 clocks,01=3 clocks,10=4 clocks),推2410手册上的荐值是0b01。我们PC的BIOS里也可以调节的,应该玩过吧。

(3)SCAN(bit[1:0]):Column address number(00 = 8-bit,01 = 9-bit,10= 10-bit),SDRAM列地址位数。查阅HY57V561620CT-H芯片手册得知此值是9,所以SCAN=0b01。

综合以上各值,BANKCON6 – 7设为0x00018005。

3、 REFRESH:刷新控制寄存器。

此寄存器的bit[23:11]可参考默认值,或自己根据经验修改,这里用0x008e0000,关键是最后的Refresh Counter(简称R_CNT,bit[10:0])的设置,2410手册上给出了公式计算方法。SDRAM手册上“8192 refresh cycles / 64ms”的描述,得到刷新周期为64ms/8192=7.8125us,结合公式,R_CNT=2^11 + 1 – 12 * 7.8125 = 1955。所以可得REFRESH=0x008e0000+1995=0x008e07a3。

4、 BANKSIZE:设置SDRAM的一些参数。其中BK76MAP(bit[2:0])配置BANK6/7映射的大小,可设置为010 = 128MB/128MB或001 = 64MB/64MB,只要比实际RAM大都行,因为bootloader和linux内核都可以检测可用空间的。BANKSIZE=0x000000b2。

5、 MRSRB6、MRSRB7:Mode register set register bank6/7

可以修改的只有CL[6:4](CAS latency,000 = 1 clock, 010 = 2 clocks, 011=3 clocks),其他的全部是固定的(fixed),故值为0x00000030。这个CAS在BIOS中应该也设置过吧,对PC的速度提升很明显哦J

至此,13个寄存器全部配置好了,下面就可以把代码复制到SDRAM中执行了,同样的程序速度要比片内SRAM运行的慢不少。

————————————————————

1。关于CPU和SDRAM的硬件连接参考s3c2410datasheet的“MEMORY (SROM/SDRAM) ADDRESS PIN CONNECTIONS”可以得知,那么复制4K以后的代码需要使用NANDFLASH控制器来读取NANDFLASH,以后的实验中将列举,本实验系统启动后将NANDFLASH开始的4K数据复制到SRAM中,然后跳转到0地址开始执行,然后初始化存储控制器,把程序本身从SRAM中复制到SDRAM中,最后跳转到SDRAM中运行,程序的标号:on_sdram,这个地址在连接程序时被确定为30000010,这个是SDRAM的地址,通过ldr pc,on_sdram,程序就可以跳转到SDRAM去了。那么on_sdram的值为什么等于31000010呢?原因在于Makefile中连接程序的命令为arm-softfloat-linux-gnu-ld -Ttext 30000000 head_yoyo.o leds_yoyo.o -o sdram_elf,意思就是代码段的起始地址为30000000,即程序的第一条指令( bl disable_watchdog)的连接地址为30000000,其他类推,其程序标号为on_sdram的值为30000010,虽然 bl disable_watchdog,bl memsetup, bl copy_steppingstone_to_sdram,的

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

网站地图

Top