2440与SDRAM连接的几点理解

2440与SDRAM连接的几点理解

作者:田凯文
日期:2011-6-6 14:59:16 
PS:本人总结,备于日后查阅,如若转载,请注明出处
QQ:1324343063

 

最近在分析uboot中关于6410的 cpu_init.s,这是对DDR的配置,由于DDR是SDRAM的升级,所以就先看了一下SDRAM,以下是最近的总结。

看下图:

 

 

 

 

这是64M(32M+32M),SDRAM的原理图

1、为什么2440或2410中地址线都是从ADDR2中开始连接的?

2440或2410中地址线都是从ADDR2中开始连接的,即A0-ADDR2、An- ADDR(n+2)、这是因为ARM是32位处理器所以它一次处理数据都是以32位为单位的,也就是说它读或者写数据时,地址只能为0x0、0x04、0x08、。。。即4字节对齐,因为一般DDR的数据线都为16位,所以为了得到32位的数据,一般都是将2个DDR连在一起,它们的地址相同,所以对已DDR而言是一个地址对应4个字节(因为一个DDR对应2个字节,两个DDR就对因4个字节),但是对于CPU而言一个地址只对应1个字节,所以这里就存在一个地址转换问题,即使CPU的0~3地址里的数据对应DDR的0地址数据,CPU的4~7地址的数据对应DDR的1地址的数据,所以CPU的0地址对应DDR的0地址,0X04地址对应DDR中1地址,0x08地址对应DDR中2地址,可以看出,DDR的地址刚好是CPU寻址向右移动两位,所以2440或2410中地址线都是从ADDR2开始连接的。

 

 

 

 

 

 

2、为什么寻32M只用了13根地址线?

要想了解这个首先的从DRAM的结构说起,下图是关于DRAM的内部结构图:


可以看到一片DRAM其实是由4片4Mx16的存储块组成,其中4M指的是4Mbit个存储单元,16指的是每个存储单元存储的位数,即2个字节,由此可知,bank0和bank1就是用来选择4片存储块的,bank0和bank1是用来确定是那个存储块,在K4S561632C中有4个bank,00代表bank0, 01代表bank1, 10代表bank2, 11代表bank3,需要知道的是这4片存储块是相互独立的,并且每个存储块都是阵列结构,所谓阵列结构指的是它是由行列组成的,行列是什么请看下图:


我们可以把一个bank看做是由一个个方格组成的存储块,而方格的个数就是4Mbit,每个方格的容量则为16bit,你要想确定一个方格的地址首先要确定它的行地址,再确定它的列地址,两线相交确定一点,这一点就是你要的地址。

一般SDRAM的地址线都采用分时复用原则,即先送行地址,再送列地址,K4S561632C这款芯片Row address : RA0 ~ RA12, Column address : CA 0 ~ CA8,即前9个地址线是复用的。

所以寻址的时候先发送RA0 ~ RA12行地址,在发送CA 0 ~ CA8列地址,而RA0 ~ RA8和CA 0 ~ CA8用的其实是同一个管脚,按照行地址13个,列地址9个,算,最多能寻址2^22,即4194304个地址,换算成Mbit刚好是4Mbit,即一个bank的大小,这就是为什么寻32M只用了13根地址线的原因。

 

3、为什么bank0和bank1与2440的ADDR24和ADDR25连接?

前面我们已经了解到bank0和bank1是用来选择存储块的,32M的空间需要25根地址线寻址,但是对于K4S561632C只需要24根,因为它每个存储单元存储2个字节,我们来分一下,这24根地址线的前13根行地址,紧接着的9根为列地址,那么最后两根是干嘛?显而易见它是bank地址,用来选择存储块,所以BANK0接23, BANK1接24,但是由于我们是从ADDR2开始连得原因前面已经解释过了,所以每个地址加2.最后的地址连接方法,就是ADDR2~ ADDR14对应行地址, ADDR15~ ADDR23对应列地址,(由于管脚的分时复用其实是DDR2~ ADDR14对应行地址, ADDR2~ ADDR10对应列地址)ADDR24~ ADDR25对应BANK0~ BANK1,这就是bank0和bank1与2440的ADDR24和ADDR25连接的原因。

 

 

补充:可以看到最上面那副图,是由两片K4S561632C组合在一起的,这样做的效果是什么?

我们已经知道1片K4S561632C有4个bank,两片K4S561632C就有8个bank了,当连接一个K4S561632C时,一个地址对应2个字节,现在连接了两片K4S561632C那么,一个地址就对应4个字节了,即一个字,总共64MB,当一个地址存放1个字节,我们需要64Mbit个地址才能达到64MB的容量,现在容量不变,每个地址里存放的字节数增多了,那么必然需要的地址数就减少了,根据存储容量(BYTE)=地址数*每个地址能存的字节数,可知当每个地址里存放的字节数增大4倍时,我们的地址数会变为原来的1/4, 当一个地址存放4个字节,我们只需要16Mbit个地址就能达到64MB的容量,16Mbit代表24根地址线(2^24=16Mbit=16*1024*1024),但是对于2440而言,一个地址只能对应1个字节,即是以BYTE为单位的,比如现在定义一个数组并对它进行初始化:uchar a[]={0,1,2,3};假设0存放在地址a处,那么1就存放在a+1处, 2就存放在a+2处, 3就存放在a+3处,也就是说对于2440而言每个地址只存放一个字节, ,所以对于2440而言,寻址64MB的内存需要26根地址线,如果我们把这4个字节存放进上面的SDRAM中,其实他们都是存放在一个地址里的,0和1存放在左边的K4S561632C中,2和3存放在右边的K4S561632C中,存放的地址都相同,可以看出2440寻址64MB的SDRAM时用到了26根线(最高两位刚好是25~24印证了问题3),但是这64MB的SDRAM实际只需要24根线就可以寻完(因为2440中的4个地址相当于SDRAM中的1个地址),所以2440中最后两根地址线就没什么用了(印证了问题1)。  



http://blog.mcuol.com/User/TKWTKW/Article/53417_1.htm

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值