背景
此篇文章根据前篇文章 深入理解sdram之基本特性的理解讲解每个寄存器的含义以及配置方法BWSCON
BWSCON中每4位控制位控制一个BANK,最高位对应BANK7,接下来的4位对应BANK6,一次类推
STx: 禁止/启动 数据掩码引脚,关于数据掩码在前篇文章分析过,这里sdram为0,SRAM为1
WSx: wait信号使能位,这里这时为0,关于wait信号的说明在datasheet里有详细的记载
DWx: 没什么好说的,位宽,这里为32位 , 即 0x10BANKCONx(x值为0->5)
1.对于bank0->bank5来讲,用默认值即可,即0x0700
2.BANKCONx(x值为6->7)
我们看到如果要接sdram的话,这里MT应设置为11
Trcd: 即读数据时行地址->列地址之间硬件的反应时间,这里推荐位 3clocks
SCAN: 01- REFRESH
上图的红色标准为选择的情况,至于参数的意思在上一篇文章中有详细的介绍
这里要注意两点:
1.Refresh Counter:
2.关于Tsrc的配置问题
为什么Tsrc要配置7个clocks呢? 大家都知道,在配置完时钟后,即使用PLL后,SDRAM时钟频率为100MHz, 查询K4S561632手册后发现
Trc = 66ns –> 7个clocks
Trp = 20ns–> 2个clocks
也就是说Tsrc = Trc-Trp 5个clocks,
而实际我们配置寄存器
Tsrc = 7个clocks, Trc = 2个clocks (Trc = 9个clocks)那会不会工作产生异常呢?
其实,这就是对这个寄存器的理解了,往高了配没什么问题
首先,要知道,我们配置的这个寄存器是内存控制器,并非sdram硬件, 我们是要告诉这个内存控制器关于sdram这个硬件的工作特性,换句话说
实际上: 以SDRAM时钟频率为100MHz前提下
实际硬件参数:
完成一个行有效周期 Trc为 66ns,换句话说,就是从指令发送开始66ns之内就可以完成一次读写, 即7个clocks
完成预充电的时间为Trp为20ns,即2个clocks
我们设置寄存器的参数,也就是内存控制器认为sdram的参数
我们告诉内存控制器 Trc需要9个clocks,即90ns
Trp是2个clocks, 即20ns
产生的时序如下
由上图可知,实际上并不影响数据的读取,就是慢一点
因为控制器向sdram发读取命令的时间点为T0,但是sdram硬件在T7时间点就完成了工作
但是控制器认为sdram完成的时点在T9(早在T7就完成了), 所以并不影响数据在次读取,
同理,我们在写裸机时,没有配置时钟PLL的情况下是12MHz,所以其时钟周期都达到了ms的级别..所以在一个时钟周期内读取数据就能完成,其实配置多少都无所谓了。。
在啰嗦一句,比如在T0时控制器发送读取指令,sdram需要等待66ns就能返回数据,但是这66ns还不到一个时钟周期,所以还没到一个时钟周期数据就读完了,但是由于裸机配置了Trc为9个clocks,那就等到很多ms后控制器才读取/写入下一个数据 - BANKSIZE
上面设置关于SCKE这个信号使SDRAM进入节能模式,这个是在硬件连接的时候就已经确定
关于BK76MAP,设置sdram大小,jz2440是外接64M的sdram - MRSR
这里肯定是支持突发模式了,但是很多参数都是固定的,比如(Fixed:固定) BL,突发长度为1,感觉为1的话就没什么意义了,但办法,2440的内存控制器只支持这个了.查询sdram硬件手册发现tRcd为20ns所以CL为2个clocks,这里设置为3个clocks,也没啥毛病,多了比少了强
寄存器就这样配置完毕
关于sdram,还有很多其它的特性,比如全页操作,关于更多的特性,推荐一份资料,有兴趣的大家可参考:
http://download.csdn.net/detail/mxgsgtc/9836413
深入理解sdram之寄存器配置
最新推荐文章于 2024-06-24 01:00:47 发布