分类: 嵌入式
2009-12-30 14:34:26
特点:
软件可编程的大小端模式;
地址空间:每个BANK可寻址128MB(总共8个BANK 1GB空间);
可编程的访问位宽:BANK0为16或32位,其他BANK为8或16或32位;
8个存储器BANK,其中6个用于ROM或者SRAM,2个用于ROM、SRAM或者SDRAM;
BANK0~BANK6的起始地址固定;
BANK7的起始地址和大小可编程;
所有存储器BANK的访问周期可编程;
外部wait信号可延长总线周期;
支持SDRAM的自刷新和掉电模式。
上表是寄存器控制地址总线连接方式,我们使用2片SDRAM配置成32位的总线宽度,所以SDRAM上的A[12:0]接到S3C2440的A[14:2]引脚。
SDRAM的工作时序作为ARM工程师了解即可,具体的读写控制由寄存器控制器完成,作为FPGA工程师则需要详细了解SDRAM工作原理与时序,在此不再赘述。作为ARM工程师,最重要的是准确配置与SDRAM相关的寄存器。
在系统使用SDRAM之前,需要对S3C2440的存储器控制器进行初始化。其中对与SDRAM(Bank6)相关的寄存器进行了特殊的设置,以使SDRAM能够正常工作。由于C语言程序使用的数据空间和堆栈空间都定位在SDRAM上,因此,如果没有对SDRAM(Bank6)的正确初始化,系统就无法正确启动。下面介绍与SDRAM相关的寄存器设置。
1、 总线宽度&等待控制寄存器(BWSCON)0x48000000
在这个寄存器中,可以配置BANK1~BANK7的DW、WS、ST,DW决定了数据总线宽度;WS是等待状态是否使能,如果此位为1,WAIT信号可以用于延长nOE信号的有效时间;ST决定是否使用UB/LB(与SRAM相关)。此寄存器还可以读取(不能写)BANK0的数据总线宽度。
对于SDRAM,只需要设置BANK6和BANK7的DW相关位,此处设置为32位。BWSCON(0x48000000)=0x22xxxxxx,后面的24位设置和FLASH有关,一个例子是设置为0x22111120。
2、 BANK控制寄存器(BANKCONN)
BANK0~BANK5的控制寄存器相同,复位值均为0x0700。包括对Tacs(nGCSn前的地址建立时间)、Tcos(nOE信号有效前的片选建立时间)、Tacc(访问周期,当WAIT使能时,Tacc必须大于等于4个时钟周期)、Tcoh(nOE后的片选保持时间)、Tcah(nGCSn后的地址保持时间)、Tacp(Page模式下的访问周期)、PMC(Page模式配置)。
BANK6、BANK7的控制寄存器相同。如果存储器类型为ROM或者SRAM,情况与BANK0~BANK5类似,如果存储器类型为SDRAM,则需要设置Trcd(RAS到CAS的延时)和SCAN(列地址位数),根据我们使用的SDRAM以及S3C2440的HCLK(SDRAM时钟由系统的HCLK提供)时钟情况,Trcd取3个时钟,列地址位数是9,则BANKCON6(0x4800001C)=0x00018005,BANKCON7(0x48000020)=0x00018005。
3、 SDRAM刷新控制寄存器(REFRESH)
包括REFEN位(刷新使能),此位一般设置为1;TREFMD位(SDRAM刷新模式),初始值为0;Trp(SDRAM RAS预充电时间),此位需要根据时钟HCLK与选用的SDRAM芯片决定,一般设置为2或3个时钟;Tsrc位(SDRAM半行周期时间),由Trc-Trp得到,Trc和Trp的值由时钟和SDRAM芯片决定;REFRESH COUNTER位(SDRAM刷新计数值),刷新计数值=2^11+1-HCLK*SDRAM刷新时间(刷新时间参考S3C2440和SDRAM技术手册)。
4、 BANK SIZE寄存器(BANKSIZE)
BURST_EN位是ARM核突发模式使能位,设为0或1均可,为了提高效率,此处可以设为1;SCKE_EN,SDRAM掉电模式使能控制,设为1;SCLK_EN,设为1,SCLK仅在访问周期才被激活;BK76MAP,BANK6和BANK7的内存映射,我们使用2片4B*4M*16bit的SDRAM组成32位256MB存储器,而且BANK6和BANK7大小要相等,所以此处设为2,即128MB/128MB。BANKSIZE(0x48000028)=0x00000032。
5、 SDRAM模式寄存器集合寄存器(MRSR)
WBL位,突发写长度,一般设为0,突发写长度固定;TM位,测试模式,一般设为00,模式寄存器集合(固定);CL位,CAS延时,根据SDRAM芯片和HCLK时钟计算;BT位,突发类型,一般设为0,连续的(固定);BL位,突发长度,一般设为000(固定的)。MRSR(0x4800002C)=0x00000030,(0x48000030)=0x00000030。