先介绍一下,我们用到的SDRAM是2个32M的SDRAM合起来的,每个SDRAM有4块,每一块分为行和列。
上面是我们用的SDRAM,16M*16也就是32M,A0-A8,一个9列,行地址为RA[12:0],列地址为CA[8:0],组成4M个存储单元
咱们看芯片手册上一个寄存器吧,因为是SDRAM是BANK6所以,我们也就只看BANK6
ST6里面的0/1各是什么意思呢,WBE[3:0]是什么呢,因为我们CPU发地址都是32位的发,也就是4byte,如果我们只想写1byte呢,
这WBE[3:0]对于这LnWE0-3;所以0就是开启想写哪一个字节就写哪个字节,也就是要屏蔽其他字节。
1就是读字节,也都一样。这里我们设置为0;
MT里面我们选择11选择SDRAM
因为是选择SDRAM,所以,我们只有管这里就好了
Trcd是发生行地址之后等多久发送列地址。 看SDRAM是芯片手册
SDRAM是内存类设备,CPU时钟我们一般用HCLK=100MHZ,1/100*1000*1000=10ns;Trcd我们选最大20ns,所以2clocks就好了
SCAN是列宽是多少,上面我们已经说了是9位。
刷新寄存器,如果我们不刷新,可能有些数据会丢失
REFEN 我们设置为1 ,TREFMD我们设置为0自动更新, |
tRP我们选择20ns,也就是2clocks,00
Tsrc: Trc=Tsrc+tRP 65 = Tsrc +20 所以Tsrc =45 这里我们就选3clocks吧,01
因为我们是HCLK等于100MHZ,所以
Refresh count = 211 + 1 - 100x7.8 = 1269 |
如果不是的话就是 64ms=(2^11-refresj_count +1)/HCLK;
好了,都选完了。
REFRESH =0x008404f5 |
下一个寄存器
7:1(能够一次性发多个地址)
5:1使能休眠模式
4:1(推荐)
【0:2】:001 (64MB)
BANKSIZE = 0xb1000000 |
继续
这个寄存器我们只要设置CL , CAS latency 是什么呢,就是当我们发送块序号,行地址,最后发送列地址后,SDRAM还需要等一段时间才能 返回数据给CPU ,这里我们选择CAS latency=2 CL = 010
MRSRB6 = 1 << 4; |