UDQM、LDQM:数据输入输出屏蔽引脚。
用于在读模式下控制输出缓冲,在写模式下屏蔽输入数据。
LDQM,UDQM这些信号线是为了实现字节访问和半字访问,LDQM控制低八位,UDQM控制高八位,这样当要按字节写的时候,就把高八位屏蔽掉。
介绍SDRAM电路设计之前先了解下SDRAM的寻址原理。SDRAM内部是一个存储阵列,可以把它想象成一个表格,和表格的检索原理一样,先指定行,再指定列,就可以准确找到所需要的存储单元,这是内存芯片寻址的基本原理,这个表格称为逻辑Bank。由于技术、成本等原因,不可能只做一个全容量的Bank,而且由于SDRAM工作原理限制,单一的Bank会造成非常严重的寻址冲突,大幅降低内存效率,所以在SDRAM内部分割成多个Bank,目前的SDRAM基本都是4个Bank。存储阵列示意如图1所示:
图1 SDRAM存储阵列示意图
图2 SDRAM引脚配置方案
图2是S3C2440A手册提供的SDRAM bank地址的配置方案,维护系统使用的SDRAM是HY57V561620FTP-H,它的规格是4*4M*16bit(使用两片是为了配置成32位的总线宽度),BANK大小是4M*16=64MB,总线宽度是32位,器件大小是4*BANK大小=256Mb,寄存器配置就是(4M*16*4B)*2,根据图2可知,SDRAM上的BANK地址引脚(BA[1:0])与S3C2440的A[25:24]相连。
图3 S3C2440A控制地址总线连接
图3是寄存器控制地址总线连接方式,我们使用2片SDRAM配置成32位的总线宽度,所以SDRAM上的A[12:0]接到S3C2440的A[14:2]引脚。具体的SDRAM电路连接如图4所示:
图4 SDRAM电路连接图
SDRAM的地址引脚是复用的,在读写SDRAM存储单元时,操作过程是将读写地址分两次输入到芯片中,每一次由同一组地址线送入,两次送入到芯片上去的地址分别称为行地址和列地址,它们被锁存到芯片内部的行地址锁存器和列地址锁存器。下面是该芯片的部分信号说明:
nSRAS:SDRAM行地址选通信号
nSCAS:SDRAM列地址选通信号
nSCS:SDRAM芯片选择信号(选用Bank6作为sdram空间,也可以选择Bank7)
nWBE[3:0]:SDRAM数据屏蔽信号
SCLK0[1]:SDRAM时钟信号
SCKE:SDRAM时钟允许信号
LDATA[0:31]:32位数据信号
LADDR[2:14]:行列地址线
LADDR[25:24]:bank选择线
SDRAM(Synchronous Dynamic Random Access Memory,同步动态随机存储器)也就是通常所说的内存。在我们现在所用的PC机中,所指的内存,其实就是SDRAM,只不过是他的升级版,如DDR内存,DDR2内存,DDR3内存等等,大部分显卡上的显存也是SDRAM的。
内存是代码的执行空间,以PC机为例,程序是以文件的形式保存在硬盘里面的,程序在运行之前先由操作系统装载入内存中,由于内存是RAM(随机访问存储器),可以通过地址去定位一个字节的数据,CPU在执行程序时将PC的值设置为程序在内存中的开始地址, CPU会依次的从内存里取址,译码,执行,在内存没有被初始化之前,内存好比是未建好的房子,是不能读取和存储数据的,因此我们要想让程序运行在内存里必须进行内存的初始化。
在介绍内存工作原理之前有必要了解下存储设备的存储方式:ROM,RAM
ROM(Read-Only Memory):只读存储器,是一种只能读出事先所存数据的固态半导体存储器。其特性是一旦储存资料就无法再将之改变或删除。通常用在不需经常变更资料的电子或电脑系统中,资料并且不会因为电源关闭而消失。如:PC里面的BIOS。
RAM(Random Access Memory) :随机访问存储器,存储单元的内容可按需随意取出或存入,且存取的速度与存储单元的位置无关的存储器。可以理解为,当你给定一个随机有效的访问地址,RAM会返回其存储内容(随机寻址),它访问速度与地址的无关。这种存储器在断电时将丢失其存储内容,故主要用于存储短时间内随机访问使用的程序。计算机系统里内存地址是一个四字节对齐的地址(32位机),CPU的取指,执行,存储都是通过地址进行的,因此它可以用来做内存。
RAM按照硬件设计的不同,随机存储器又分为DRAM(Dynamic RAM)动态随机存储器和SRAM(Static RAM) 静态随机存储器。
DRAM:它的基本原件是小电容,电容可以在两个极板上短时间内保留电荷,可以通过两极之间有无电压差代表计算机里的0和1,由于电容的物理特性,要定期的为其充电,否则数据会丢失。对电容的充电过程叫做刷新,但是制作工艺较简单,体积小,便于集成化,经常做为计算机里内存制作原件。比如:PC的内存,SDRAM, DDR, DDR2, DDR3等,缺点:由于要定期刷新存储介质,存取速度较慢。
SRAM:它是一种具有静止存取功能的内存,不需要刷新电路即能保存它内部存储的数据。因此其存取速度快,但是体积较大,功耗大,成本高,常用作存储容量不高,但存取速度快的场合,比如CPU的L1 cache,L2cache(一级,二级缓存) ,寄存器。
为了满足开发的需要jz2440在出厂时搭载了三种存储介质:
(1)NOR FLASH(2M):ROM存储器,通常用来保存BootLoader,引导系统启动
(2)NAND FLASH(256M,型号不一样,Nandflash大小不一样):保存操作系统映像文件和文件系统
(3)SDRAM(64M):内存,执行程序
NOR FLASH:它的特点是支持XIP芯片内执行(eXecute In Place),这样应用程序可以直接在Flash闪存内运行,不必再把代码读到系统RAM中,也就是说可以随机寻址。NOR FLASH的成本较高。
NAND FLASH:它能提供极高的单元密度,可以达到高存储密度,并且写入和擦除的速度也很快。其成本较低,不支持XIP。可做嵌入式里的数据存储介质。如:手机存储卡,SD卡等。
S3C2440地址空间:
S3C2440对外引出了27根地址线ADDR0~ADDR26,它最多能够寻址128MB,而S3C2440的寻址空间可以达到1GB,这是由于S3C2440将1GB的地址空间分成了8个BANKS(Bank0~Bank7),其中每一个BANK对应一根片选信号线nGCS0~nGCS7,当访问BANKx的时候,nGCSx管脚电平拉低,用来选中外接设备, S3C2440通过8根选信号线和27根地址线,就可以访问1GB。如下图所示:
SDRAM存储结构:
先来介绍一下CPU提供的一组用于SDRAM的信号:
1. SDRAM的时钟有效信号SCKE;
2. SDRAM的时钟信号SCLK0,SCLK1;
3. 数据掩码信号DQM0,DQM1,DQM2,DQM3;
4. SDRAM片选信号nSCS0(它与nGCS6是同一引脚的两个功能);
5. SDRAM行地址选通脉冲信号nSRAS;
6. SDRAM列地址选通脉冲信号nSCAS;
7. 写允许信号nWE(它不是专用于SDRAM的)。
SDRAM的内部是一个存储阵列,阵列就类似于表格一样,有行、列之分,这样我们要访问(读、写)一个单元,就要先指定一个行地址,一个列地址,这样就找到了该单元,这就是SDRAM的寻址的基本原理。这里的单元我们一般称为存储单元,而整个表格称为逻辑BANK(Logical Bank , L-BANK),一般每个SDRAM都会有4个L-BANK。SDRAM的逻辑结构如下图所示:
jz2440是选用2片HY57V561620FTP-H组成64MB、32位的内存,每片32MB容量、16位数据总线。原理图如下:
在图中可以看到,行地址、列地址共用地址线ADDR2~ADDR14(BANK6位宽为32,ADDR0、1没有使用),使用nSRAS、nSCAS两个信号来区分它们。在jz2440开发板中,使用两根地址线ADDR24、ADDR25作为L-Bank的选择信号;SDRAM芯片K4S561632的行地址数为13,列地址数为9,所以当nSRAS信号有效时,ADDR2~ADDR14上发出的是行地址信号,它对应32位地址空间的bit[23:11];当nSCAS信号有效时,ADDR2~ADDR10发出的是列地址信号,它对应32位地址空间的bit[10:2]。
重点关注SDRAM芯片K4S561632地址线 A0~A12的说明:
该芯片每一个Bank有13行(RA0~RA12),9列(CA0~CA8),行寻址时使用A0~A12,列寻址分时复用,只使用了CA0~CA8。nRAS、nCAS引脚,用于标识当前是行寻址还是列寻址,从而实现地址线的分时复用。
jz2440开发板是由两块16位的SDRAM芯片并联组成32位的位宽,与CPU的32根数据线DATA0~DATA1相连。SDRAM是连接在BANK6上的,起始地址为0x30000000,所以SDRAM的访问地址为0x30000000~0x33FFFFFF,大小为64MB。
看了上面那些内容,里面有某些东西令我百思不得其解,可能是自己太笨了,不过最后还是想明白了。
1、为什么两块SDRAM芯片并联起来,容量大小是64MB呢?
原因是这样的:SDRAM芯片有4个bank,每个bank的行地址数是13、列地址数是9,由两块16位的SDRAM芯片并联组成32位的位宽,与CPU的32根数据线DATA0~DATA1相连。则其存储空间为(2^13*2^9*4*32bit)/8 = 2^26*8bit/ 8 = 2^26 Byte = 64MB
2、为什么SDRAM芯片的A0地址引脚连接的是ARM芯片的A2引脚呢?
根据上一问可知,该SDRAM存储空间为64MB,S3C2440要寻址64MB需要地址线26根。由原理图可知SDRAM的数据总线位宽为32位,即一次传输4个字节的数据。因此,我们可以这样理解,即一个地址空间其实对应着4个字节的数据,实际上真正的寻址空间只有16MB而已,只需24根地址线(行地址线13根,列地址线9根,还有L-Bank选择信号的A24、A25两根地址线,总共24根)就已经足够了,这样S3C2440端并不需要将26根地址线全部连接到SDRAM芯片上,只需要给出高24位地址(A2~A25),相当于数据总线上每传输4个字节的数据,地址空间的第三位(A2)才增加1,即A0和A1可以不接。此时的A0和A1应该是低电平。然后,SDRAM芯片即根据S3C2440给的行地址、列地址和L-Bank选择信号找到对应的地址空间,将该地址空间的4个字节发送到数据总线上。以此类推,数据位宽为8位,就arm芯片的A0接SDRAM的A0,16位就A1接A0,32位就A2接A0。
还有一个细节,即为什么SDRAM芯片的BA0~BA1连接的是S3C2440芯片的LADDR24~LADDR25引脚?
因为,HY57V561620为32MB的SDRAM芯片,我们知道,32MB的存储空间是需要 25 根地址线寻址的,由于BA0~BA1引脚决定了访问第几个Bank,即决定了存储空间的最高两位,因此,需要使用S3C2440的25根地址线中的最高两位来连接 BA0~BA1,这样就可以满足寻址的映射要求了。