博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
S3C2440与SDRAM连接浅析
阅读量:4052 次
发布时间:2019-05-25

本文共 2274 字,大约阅读时间需要 7 分钟。

我们知道,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的数据位宽度来定的。

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

 

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

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

转载于:谢谢作者。

你可能感兴趣的文章
export default 和 export 区别
查看>>
exports、module.exports 到底是咋回事
查看>>
环境分支-git版本管理
查看>>
uni-app 全局变量
查看>>
instanceof 的原理是什么
查看>>
js判断空对象的几种方法
查看>>
var/let/const区别
查看>>
函数式柯里化的理解?
查看>>
时间戳转化为年月日时分秒
查看>>
配置ssh公钥
查看>>
git clone拉代码的时候出现permission denied 没有权限的问题解决
查看>>
前端-vue-文件上传(图片、word,ppt,pdf,excel,txt等文件流)
查看>>
word,PDF,excel、ppt等文件上传,视频上传查看等
查看>>
java 不用递归写tree
查看>>
springboot2 集成Hibernate JPA 用 声明式事物
查看>>
fhs-framework jetcache 缓存维护之自动清除缓存
查看>>
SpringBoot 动态编译 JAVA class 解决 jar in jar 的依赖问题
查看>>
fhs_framework springcloud使用统一的控制器来接收rpc调用请求教程,无需每个rpc接口都写控制器
查看>>
fhs-framework springboot mybatis 解决表关联查询问题的关键方案-翻译服务
查看>>
Springboot + easyui + mybatis 高级搜索功能实现
查看>>