S3C2440 FLASH 介绍

我们知道,S3C2440对外引出了27根地址线 ADDR0~ADDR26,如下图左侧所示,是不是只有27根? 27根地址线所能寻址的最大范围为2^27=128MB。

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

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

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

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

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

SDRAM 内部是一个存储阵列。可以把它想象成一个表格。和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元。这个表格我们称之为逻辑BANK(Logical Bank,简称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的数据位宽度来定的。

PS:看完依然不明白,这是网上找的易懂的答案

16位存储器以半字方式操作,要求地址必须为偶数,也就是地址最低位为0,所以在电路设计中不用A0,可以防止读写数据地址操作出错。同理,32位存储器以字方式操作,要求地址为能够被4整除,也就是地址最低两位为0,所以同样将A1、A0设置为无效

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.找到了存储单元后,被选中的芯片进行统一的数据传输。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值