本文主要目的是记录一下S3C2440扩展SDRAM的一些知识,方便以后查阅。
通过查阅手册我们知道,2440有8个可以用来扩展内存的BANK,其中第6和第7还可用来扩展SDRAM
下面我们来看一下2440扩展SDRAM需要设置哪些寄存器。
一、BWSCON寄存器
该寄存器我们只需要设置和SDRAM有关的bank7和bank6,我的开发板的SDRAM是连接到bank6的,我们需要配置bank6相关位,不过一般我们bank6和bank7都设置为一样(我记得两者好像是有共用什么来着,不记得了,需要查手册再去看才能想起),ST6位里的UB/LB一般是用于SRAM的,我用的是SDRAM,配置为0;WS6配置为disable,因为我的开发板扩展了两片16位的SDRAM,相当于一片32位的SDRAM,DW6选择32bit。bank7配置和bank6一样,所以我们配置BWSCON = 0X22000000;
二、BANKCON6、BANKCON7
对于MT,因为我们用的是SDRAM,所以配置为11;配置为SDRAM模式后,还需要配置Trcd和SCAN,Trcd是RAS(行地址发出时间)到CAS(列地址发出时间)的时间间隔,我们可以直接在我们的SDRAM芯片手册里查找一下Trcd,结果如下图
因为我的板子上的SDRAM是-6G的,所以最小为18ns,因为2440内存控制器的时钟为HCLK,我配置为100M,所以Trcd配置为00(2 clocks),至于列地址数,我们可以查看我们的SDRAM芯片的手册得到以下结果,所以SCAN配置为9个列地址,即把BANKCON6、BANKCON7配置为0X00018001。
三、REFRESH寄存器
因为SDRAM需要不断地刷新才能保存住里面的数据,所以REFEN必须使能;TREFMD配置为自动模式;Trp直接在我们的SDRAM芯片手册里查找得知-6型号的芯片为18,所以配置为2个clocks,Tsrc在芯片手册里找不到,但我们可以查找Trc,-6型号的Trc为60ns,所以Tsrc等于60-18等于42,我们配置为5个clocks;配置Refresh Counter需要在SDRAM手册里查找Refresh period,我的芯片是64ms/8k,根据公式算出Refresh count等于1269,所以REFRESH配置为0X8404F5。
四、BANKSIZE寄存器
我们使能突发访问(可一次连续访问多个字节)和休眠模式,所以bit5和7都配置为1,bit4采用推荐值1,因为我们相当于扩展了一片64M的SDRAM,所以BK76MAP配置为64MB,所以BANKSIZE配置为0XB1。
五、MRSRB6、MRSRB7
这个寄存器只有CL是可设置的,其他都为Fixed,因为SDRAM这种内存芯片其实性能不是很好,我们在发送完地址后,一般需要等待2或3个时钟周期才有数据返回,CL正是设置这一点的,我们的SDRAM芯片可配置为2或者3,我们配置为2,所以MRSRB6和MRSRB7配置为0X20。