存储控制器简单的说来由13个存储相关的寄存器控制,这十三个寄存器的也是启动代码必须要设置初始值的寄存器。
借助于UPNET2410-S ,我来分析下其相关的作用。下面这段代码是摘自VIVI中的一部分。他们就是UPNET2410要设置的值。
/* initial values for DRAM */
/*#define vBWSCON 0x22111120*/
#define vBWSCON 0x22111110
#define vBANKCON0 0x00000700
#define vBANKCON1 0x00000700
#define vBANKCON2 0x00000700
#define vBANKCON3 0x00000700
#define vBANKCON4 0x00000700
#define vBANKCON5 0x00000700
#define vBANKCON6 0x00018005
#define vBANKCON7 0x00018005
#define vREFRESH 0x008e0459
#define vBANKSIZE 0xb2
#define vMRSRB6 0x30
#define vMRSRB7 0x30
首先 BWSCON 这个寄存器叫做位宽和等待配置寄存器,英文名字根据我的猜测应该是BUS WIDTH and SLEEP CONFIGURE ,他的作用很明显是配置存储空间的位宽和相应的等待时间。这里的等待时间应该指的是nWAIT信号,而位宽则是指各个BANK的位宽。这个寄存器还包含了一个功能,就是设置SDRAM的数据掩码引脚,当使用的SDRAM时候应该设置为0.
UPNET2410的板子的硬件配置,从上面设置的值看,SDRAM设置成32位,其他的是16位。
BANK1-5的配置可以看S3C2410的用户手册进行设置,我想讲的是BANK6-7。
由于BANK6-7映射的SDRAM所以设置会稍微不同点,根据S3C2410手册和SDRAM( HY57V561620B(L/S)T )手册设置.下面是UPNET使用的SDRAM的一些特性,这些特性在设置寄存器的时候用的到。
• Auto refresh and self refresh
• 8192 refresh cycles / 64ms
• Programmable Burst Length and Burst Type
- 1, 2, 4, 8 or Full page for Sequential Burst
- 1, 2, 4 or 8 for Interleave Burst
• Programmable CAS Latency ; 2, 3 Clocks
在BANKCON6-7中16:15位设置外接存储器的类型 。01->SDRAM 00->SRAM,Trcd TIME for RAS to CAS DELAY,根据S3C2410用户手册上
RAS to CAS delay
00 = 2 clocks 01 = 3 clocks 10 = 4 clocks
设置其为01,3 clock.
1:0位为SCAN位,在UM(S3C2410 USER MANUAL 下面以此简称)上描述如下:
Column address number
00 = 8-bit 01 = 9-bit 10= 10-bit
查看SDRAM芯片文档,有如下 :
Row Address : RA0 ~ RA12, Column Address : CA0 ~ CA8
可知应该设置为01.
那么整个寄存器的值就是上面的0x00018005
REFRESH 寄存器则是设置SDRAM的刷新功能。 这里主要设置的就是一个刷新计数就是0:10位。下面是UM中的计算刷新计数的方法。
SDRAM refresh count value.
Refresh period = (211-refresh_count+1)/HCLK
Ex) If refresh period is 15.6 us and HCLK is 60 MHz,
the refresh count is as follows:
Refresh count = 211 + 1 - 60x15.6 = 1113
那么根据上面的 8192 refresh cycles / 64ms 可知道刷新时间为64/8192=7.8125us。UPNET2410-S的时钟频率一般设置在200MHz,而HCLK一般是100MHz,所以这里得到的值应该是 211+1-100*7.8125 = 1268 = 0x4f4 所以应该设置为0x00ac00+0x4f4。
BANKSIZE寄存器:设置突然传输、SDRAM时钟信号,使能信号、BANK的大小。0xB2应该满足UPNET2410的硬件需求。
最容易使人忘记的MRSR寄存器, MODE REGISTER SET REGISTER 设置模式寄存器的寄存器。主要设置一个列周期延迟,根据芯片文档,可以设置为3 CLOCK .