S3C2440与SDRAM连接浅析

来源:互联网 发布:大学校园网络设计方案 编辑:程序博客网 时间:2024/06/04 18:39
S3C2440与SDRAM连接浅析
我们知道,S3C2440对外引出了27根地址线 ADDR0~ADDR26,如下图左侧所示,是不是只有27根?27根地址线所能寻址的最大范围为2^27=128MB。

仅仅128MB显然是不够的,所以又有了BANK,什么是BANK,按我个人的理解,就是分块或者是分页,当然这种说法可能不是太严谨,你只要能明白大概意思就可以了。

显然,对应上面我们应该也可以猜到,每个BANK的大小为128MB。有多少个BANK呢?8个,对应的CPU又引出了8根片选信号nGCS0~nGCS7。当访问某个BANKx的时候,相应的nGCSx的引脚设为低电平,选中外设,如下图所示:

128MB * 8 = 1GB,于是有了这1GB的连接外设的地址空间。但是S3C2440是一个32位的CPU,理论上可以使用的地址范围可以达到4GB,剩余的3G的空间除了部分用于CPU内部寄存器地址外,其余均未使用。

市面上很少有32位宽度的单片SDRAM,一般选择2片16位SDRAM扩展得到32位SDRAM。我的开发板TQ2440就是采用了两片32Mbyte的H57V2562GTR-60C(4Banks * 4MB* 16)并联组成。

先来了解下SDRAM的寻址原理:

SDRAM内部是一个存储阵列。可以把它想象成一个表格。和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元。这个表格我们称之为逻辑BANK(LogicalBank,简称L-Bank)。目前的SDRAM 基本都是4个L-Bank。寻址的流程就是先选中L-Bank,再指定行地址,最后指定列地址。这就是SDRAM的寻址原理。可见对内存的访问,一次只能是一个L-Bank工作。存储阵列示意图如下:

下面的相关讲解以我的H57V2562GTR-60C为例。查询其datasheet,截图如下:

RA0~RA12,共13根行地址线。

CA0~CA8,共9根列地址线。

BA0,BA1,2根L-Bank选择线。

从上表中我们能够看出,SDRAM的地址引脚是复用的,行、列地址共用A0~A12这13根地址线。在每次操作存储单元时,操作过程是将读写的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址。它们被锁存到芯片内部的行地址锁存器和列地址锁存器。到这里有些同学可能会有疑问,CPU怎么知道该地址是行地址还是列地址呢?我们先来看一张图,来自于TQ2440核心板原理图:

内存芯片型号上稍有差别,我们不去理会。

看图左上角,A0~A12与CPU的ADDR2~ADDR14相接,做为地址线。BA0、BA1与ADDR24、ADDR25连接,做为L-Bank的选择线。注意nSCS,通过连线LnSCS0我查到了与之连接的是CPU的nGCS6引脚,证明该SDRAM芯片是接在BANK6上的。

好了,回到我们刚才那个问题。图中的nSRAS、nSCAS便是用来标记一个地址是行地址还是列地址的。当nSRAS信号有效时,LADDR2~LADDR14上发出的是行地址信号,它对应32位地址空间的bit[23:11];当nSCAS信号有效时,LADDR2~LADDR10上发出的是列地址信号,他对应32位地址空间的bit[10:2]。

读到此时,又可引申出两个问题:

1.为什么与A0连接的是LADDR2而不是LADDR0?

答:首先我们需要知道,在CPU的寻址空间中,是按8bits即1字节为单位的。并且我们的S3C2440以32位的宽度外接SDRAM,故最小操作单位为32bits即4字节。比如当A0=1时,对应的LADDR[2:0]=100。不管地址是多少,LADDR[1:0]恒为0,所以A0接LADDR2。

同理,如果我们只有1片SDRAM,所以是16位的宽度,那么最小操作单位为2字节,对应的A0应该接LADDR1。

所以说,A0接哪根地址线是根据SDRAM的数据位宽度来定的。

2.根据什么原理判定与BA0、BA1连接的是LADDR24、LADDR25?

答:在搞清楚问题1的情况下,再来分析问题2。与BA0、BA1相连的两根地址线是寻址地址中的最高两位,故可以得出,连接LADDR24和LADDR25后,CPU总寻址2^26=64Mbyte,我的SDRAM是64Mbyte,刚刚好。

所以说,BA0、BA1接哪根地址线是根据SDRAM的容量大小来定的。

还要补充一点,首先我们将两片SDRAM看做一个整体,那么64Mbyte的SDRAM每个L-Bank大小应该为16Mbyte,怎样推算出来?每个L-Bank上有13根行地址线,9根列地址线,可寻址2^22=4M个,而由问题1我们得知,每单元大小为4Byte,所以每个L-Bank的大小为4M* 4byte = 16Mbyte。

最后,总结下CPU对SDRAM访问的几个步骤:

1.CPU发出的片选信号nSCS0有效,选中SDRAM芯片。

2.SDRAM中有四个L-Bank,需要两根地址信号来选中其中一个,本文中使用LADDR24和LADDR25作为选择信号。

3.对被选中的芯片进行统一的行/列寻址。

4.找到了存储单元后,被选中的芯片进行统一的数据传输。

 

未完,将会不定期更新本文。。。

由于理解尚浅,文中难免会有错误之处,欢迎留言指出^_^。同时希望因为自己的错误理解不会给您带来什么困扰,哈哈。我会一直进步的,写出更有含量的文章!新手上路,需要您的多多鼓励,谢谢!

转载于:http://www.liweifan.com/2011/12/19/embedded-system-s3c2440-sdram-link/谢谢作者。

0 0
原创粉丝点击