由于S3C2410是32位处理器(指令一次能够操作32位数据(运算器一次可以处理32位数据);通用寄存器多是32位寄存器;处理器内部数据通道也是32位的;处理器外部数据总线宽度通常是32位的,地址总线宽度只是代表CPU寻址范围大小,与CPU是多少位的无关,也即32位CPU的地址总线不一定是32根的,例如对于s3c2410,每一个Bank对应27根地址线,寻址能力为128MB,全部8个Bank总的寻址能力为1GB),所以为了最大限度的发挥其性能,内存最好也是32位(指数据宽度)的,(当然,在s3c2410的8个bank中,除了Bank0只能选择16/32数据位宽外,其余的7个Bank均可以单独选择8/16/32位宽的存储系统)然而市面上很少有32位宽度的单片SDRAM,所以一般都采取两片16位的SDRAM进行位扩展得到32位的SDRAM。
低16位数据SDRAM连接图
高16位数据SDRAM连接图
由上两图可见,本系统扩展后的内存系统为16M×32Bit的(此处32Bit是指数据位宽度,而非地址位,可以理解SDRAM数据位宽度与地址线的条数无关,明白数据线和地址线的区别,对于下面地址线的连接方式的理解非常重要)。
一、A0~A12地址线
Ø 首先要明白这一点,在CPU的寻址空间中,字节(8位)是表示存储容量的唯一单位。(所以为什么对于51单片机来说,其16根地址线的寻址能力为64KB,注意:其单位是Byte—字节)
Ø 而对于上述已经进行扩展了的32位SDRAM存储系统,可以认为它的每一个存储单元都是4个字节的(单位是4个字节=1个字),因此当它的地址线A1:A0=01时,处理器上对应的地址线应为A3:A2=01(因为CPU的寻址空间是以Byte为单位的)。
Ø 正因为如此,SDRAM的A0引脚接到了S3C2410的A2地址线上。
Ø 以此类推,SDRAM的A12~A1引脚依次接到了2410的A14~A3地址线上。
Ø 可以认为将CPU地址线左移两位,即乘以4(32/8)。
Ø 同样的,对于16位数据位宽的SDRAM系统而言,需要将SDRAM的A0引脚连接到2410的A1地址线上面。
二、BA0~BA1地址线
Ø K4S561632D是4M×16Bit×4Banks,共32MB
Ø DRAM芯片在构造上的特点是,芯片上的地址引脚是复用的。(在存取DRAM芯片的某单元时,其操作过程是将存取的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址,它们被锁存到芯片内部的行地址锁存器和列地址锁存器中。可以想象,在芯片内部,各存储单元是按照矩阵结构排列的。行地址信号通过片内译码选择一行,列地址信号通过片内译码选择一列,这样就决定了选中的单元)。 /RAS是行地址锁存信号,该信号将行地址锁存在芯片内部的行地址锁存器中;/CAS是列地址锁存信号,该信号将列地址锁存在芯片内部的列地址锁存器中。
Ø K4S561632D共有13根地址线(A0~A12)。行地址线为A0~A12,共13根;列地址线为A0~A8,共9根,可见K4S561632D一个Bank的存储容量为213×29=222=4M。(对于DRAM来说,13根地址线的最大编址空间为226=64M,可见此处K4S561632D还是留有余量的,其最大容量可以扩充到64M)
Ø BA0~BA1是Bank选择地址线。Banks可以理解为一片16M×16Bit 的K4S561632D内部是由4片容量为4M的16Bit SDRAM扩展而成的,即16M×16Bit =4M×4Banks×16Bit。 BA0~BA1即为该4片SDRAM的片选信号。可见BA0~BA1代表了K4S561632D的最高位。
K4S561632D芯片管脚说明
综上,BA0~BA1代表了SDRAM的最高地址位。因为CPU的寻址空间是以字节(Byte)为单位的,本系统SDRAM容量为16MWord=64MByte,那就需要A25~A0(64M=226)地址线来寻址,所以BA1~BA0地址线应该接到2410的A25~A24引脚上。
当然,由上面分析可知,DRAM内存的地址线是行地址线与列地址线复用的,所以地址线的数目并不需要26条。
三、DQM信号
如前所述,32位的SDRAM存储单元以4Byte为单位进行数据访问的时候,内存会忽略CPU的A1和A0地址线(事实上,2410的A1和A0地址线也根本没接到SDRAM的芯片上)。
但是处理器如果需要访问地址偏移量为01的单个字节,就需要DQM(Data Mask)信号进行帮助,这个信号接在2410的nWEB线上。DQM信号由处理器根据当前的访问情况发出,如果当前的访问只需要低16字节,那么nWEB0和nWEB1线就会有效。
以下是一位读者的理解
板上用的是现代的sdram芯片4M×16b×4Bank,即32MB,按理说应该有25根地址线,但芯片上只提供了13根地址线,2根bank选择线(BA0,BA1),两个片选信号,这怎么寻址啊?
从CPU或者操作系统的角度看: 一个地址对应一个byte
从SDRAM(HY57V561620)的角度看: 一个地址对应2个BYTE
故: 行地址线RA0-RA12 + 列地址线CA0-CA8 + 2根bank选择线(BA0,BA1)= 24
16M个16b, 寻址16M个16b只需要24跟线。
一般应用中,通常将2块SDRAM并联起来一起使用,这样的话: 一个SDRAM地址对应4个BYTE
2片 组合使用时:A0 ~A12 对应 CPU地址总线的ADDR2~ADDR14 BA0~BA1 ADDR24~ADDR25(2片的连接一样)
注意:ADDR0~ADDR1没有使用,因为SDRAM地址对应4个字节,而CPU地址对应1个字节,所以有错位
在CPU总线上给出一个地址如0x3,转换到SDRAM时就是0X0了,因为ADDR0~ADDR1没有连过来
CPU给一个地址,数据总线会将得到由2组DQ0~DQ15组合而成32位数据,要得到CPU地址0X3的一个字节的数据,CPU会根据CPU的地址进行相应的转变,而得到一个字节的地址
由于S3C2410是32位处理器(指令一次能够操作32位数据(运算器一次可以处理32位数据);通用寄存器多是32位寄存器;处理器内部数据通道也是32位的;处理器外部数据总线宽度通常是32位的,地址总线宽度只是代表CPU寻址范围大小,与CPU是多少位的无关,也即32位CPU的地址总线不一定是32根的,例如对于s3c2410,每一个Bank对应27根地址线,寻址能力为128MB,全部8个Bank总的寻址能力为1GB),所以为了最大限度的发挥其性能,内存最好也是32位(指数据宽度)的,(当然,在s3c2410的8个bank中,除了Bank0只能选择16/32数据位宽外,其余的7个Bank均可以单独选择8/16/32位宽的存储系统)然而市面上很少有32位宽度的单片SDRAM,所以一般都采取两片16位的SDRAM进行位扩展得到32位的SDRAM。
低16位数据SDRAM连接图
高16位数据SDRAM连接图
由上两图可见,本系统扩展后的内存系统为16M×32Bit的(此处32Bit是指数据位宽度,而非地址位,可以理解SDRAM数据位宽度与地址线的条数无关,明白数据线和地址线的区别,对于下面地址线的连接方式的理解非常重要)。
一、A0~A12地址线
Ø 首先要明白这一点,在CPU的寻址空间中,字节(8位)是表示存储容量的唯一单位。(所以为什么对于51单片机来说,其16根地址线的寻址能力为64KB,注意:其单位是Byte—字节)
Ø 而对于上述已经进行扩展了的32位SDRAM存储系统,可以认为它的每一个存储单元都是4个字节的(单位是4个字节=1个字),因此当它的地址线A1:A0=01时,处理器上对应的地址线应为A3:A2=01(因为CPU的寻址空间是以Byte为单位的)。
Ø 正因为如此,SDRAM的A0引脚接到了S3C2410的A2地址线上。
Ø 以此类推,SDRAM的A12~A1引脚依次接到了2410的A14~A3地址线上。
Ø 可以认为将CPU地址线左移两位,即乘以4(32/8)。
Ø 同样的,对于16位数据位宽的SDRAM系统而言,需要将SDRAM的A0引脚连接到2410的A1地址线上面。
二、BA0~BA1地址线
Ø K4S561632D是4M×16Bit×4Banks,共32MB
Ø DRAM芯片在构造上的特点是,芯片上的地址引脚是复用的。(在存取DRAM芯片的某单元时,其操作过程是将存取的地址分两次输入到芯片中,每一次都由同一组地址线输入。两次送到芯片上去的地址分别称为行地址和列地址,它们被锁存到芯片内部的行地址锁存器和列地址锁存器中。可以想象,在芯片内部,各存储单元是按照矩阵结构排列的。行地址信号通过片内译码选择一行,列地址信号通过片内译码选择一列,这样就决定了选中的单元)。 /RAS是行地址锁存信号,该信号将行地址锁存在芯片内部的行地址锁存器中;/CAS是列地址锁存信号,该信号将列地址锁存在芯片内部的列地址锁存器中。
Ø K4S561632D共有13根地址线(A0~A12)。行地址线为A0~A12,共13根;列地址线为A0~A8,共9根,可见K4S561632D一个Bank的存储容量为213×29=222=4M。(对于DRAM来说,13根地址线的最大编址空间为226=64M,可见此处K4S561632D还是留有余量的,其最大容量可以扩充到64M)
Ø BA0~BA1是Bank选择地址线。Banks可以理解为一片16M×16Bit 的K4S561632D内部是由4片容量为4M的16Bit SDRAM扩展而成的,即16M×16Bit =4M×4Banks×16Bit。 BA0~BA1即为该4片SDRAM的片选信号。可见BA0~BA1代表了K4S561632D的最高位。
K4S561632D芯片管脚说明
综上,BA0~BA1代表了SDRAM的最高地址位。因为CPU的寻址空间是以字节(Byte)为单位的,本系统SDRAM容量为16MWord=64MByte,那就需要A25~A0(64M=226)地址线来寻址,所以BA1~BA0地址线应该接到2410的A25~A24引脚上。
当然,由上面分析可知,DRAM内存的地址线是行地址线与列地址线复用的,所以地址线的数目并不需要26条。
三、DQM信号
如前所述,32位的SDRAM存储单元以4Byte为单位进行数据访问的时候,内存会忽略CPU的A1和A0地址线(事实上,2410的A1和A0地址线也根本没接到SDRAM的芯片上)。
但是处理器如果需要访问地址偏移量为01的单个字节,就需要DQM(Data Mask)信号进行帮助,这个信号接在2410的nWEB线上。DQM信号由处理器根据当前的访问情况发出,如果当前的访问只需要低16字节,那么nWEB0和nWEB1线就会有效。
以下是一位读者的理解
板上用的是现代的sdram芯片4M×16b×4Bank,即32MB,按理说应该有25根地址线,但芯片上只提供了13根地址线,2根bank选择线(BA0,BA1),两个片选信号,这怎么寻址啊?
从CPU或者操作系统的角度看: 一个地址对应一个byte
从SDRAM(HY57V561620)的角度看: 一个地址对应2个BYTE
故: 行地址线RA0-RA12 + 列地址线CA0-CA8 + 2根bank选择线(BA0,BA1)= 24
16M个16b, 寻址16M个16b只需要24跟线。
一般应用中,通常将2块SDRAM并联起来一起使用,这样的话: 一个SDRAM地址对应4个BYTE
2片 组合使用时:A0 ~A12 对应 CPU地址总线的ADDR2~ADDR14 BA0~BA1 ADDR24~ADDR25(2片的连接一样)
注意:ADDR0~ADDR1没有使用,因为SDRAM地址对应4个字节,而CPU地址对应1个字节,所以有错位
在CPU总线上给出一个地址如0x3,转换到SDRAM时就是0X0了,因为ADDR0~ADDR1没有连过来
CPU给一个地址,数据总线会将得到由2组DQ0~DQ15组合而成32位数据,要得到CPU地址0X3的一个字节的数据,CPU会根据CPU的地址进行相应的转变,而得到一个字节的地址