[ARM笔记]存储控制器的寄存器使用方法
扫描二维码
随时随地手机看文章
存储器共有13个寄存器,BANK0~BANK5只需要设置BWSCON和BANKCONx(x为0~5)两个寄存器;BANK6、BANK7外接SDRAM时,除了BWSCON和BANKCONx(x为6、7)外,还要设置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4个寄存器。下面分类说明(“[y:x]”表示占据了寄存器的位x、x+1、……、y):
1. 位宽和等待控制寄存器BWSCON(Bus Width & Wait Status Control Register)
BWSCON中每4位控制一个BANK,最高4位对应BANK7、接下来4位对应BANK6,依此类推。
(1)STx:启动/禁止SDRAM的数据掩码引脚,对于SDRAM,此位为0;对于SRAM,此位为1。Determine SRAM for using UB/LB for bank x, 0 = Not using UB/LB (The pins are dedicated nWBE[3:0])1 = Using UB/LB (The pins are dedicated nBE[3:0])。
(2)WSx:是否使用存储器的WAIT信号,通常设为0。Determine WAIT status for bank x, 0 = WAIT disable 1 = WAIT enable。
(3)DWx:使用两位来设置相应BANK的位宽,0b00对应8位,0b01对应16位,0b10对应32位,0b11表示保留。
比较特殊的是BANK0,它没有ST0和WS0,DW0([2:1])只读——由硬件跳线来决定:0b01表示16位,0b10表示32位,BANK0只支持16、32两种位宽。The states are selected by OM[1:0] pins。
2. BANK控制寄存器BANKCONx(BANK CONTROL REGISTER,x为0~5,(BANKCONx: nGCS0-nGCS5))
这几个寄存器用来控制BANK0~BANK5外接设备的访问时序,一般使用默认的0x0700即可。
3. BANK控制寄存器BANKCONx(BANK CONTROL REGISTER,x为6~7,(BANKCONx: nGCS6-nGCS7))
在8个BANK中,只有BANK6和BANK7可以外接SRAM和SDRAM,所以BANKCON6~BANKCON7与BANKCON0~BANKCON5有点不同。
MT([16:15])Determine the memory type for bank6 and bank7。00 = ROM or SRAM,01 = Reserved (Do not use),10 = Reserved(Do not use),11 = Sync. DRAM。
当MT=0b00时,此寄存器与BANKCON0~BANKCON5类似,不再赘述。
当MT=0b11时,此寄存器其他值设置如下。
Trcd([3:2]):RAS to CAS delay,设为推荐值0b01。
SCAN([1:0]):SDRAM的列地址位数,00 = 8-bit;01 = 9-bit;10= 10-bit
4. 刷新控制寄存器REFRESH(REFRESH CONTROL REGISTER):设为0x008C0000+R_CNT
(1)REFEN([23]):0=禁止SDRAM的刷新功能,1=开启SDRAM的刷新功能。
(2)TREFMD([22]):SDRAM的刷新模式,0=Auto Refresh,1=Self Refresh(一般在系统休眠时使用)。
(3)Trp([21:20]):设为0即可。
(4)Tsrc([19:18]):设为默认值0b11即可。
(5)Refresh Counter([10:0]):即上述的R_CNT,可按如下方式计算(SDRAM时钟频率就是HCLK):
R_CNT=2^11+1-SDRAM时钟频率(MHz)*SDRAM刷新频率(us)
Refresh period = (211-refresh_count+1)/HCLK
SDRAM的刷新周期在SDRAM的数据手册上有标明,例如HY57V561620B的数据手册上有这么一句话“8192 refresh cycles / 64ms”。所以,刷新周期=64ms/8192=7.8125us。
在未使用PLL时,SDRAM时钟频率等于晶振的12MHz。
现在可以计算:R_CNT=2^11+1-12*7.8125=1955
所以,在未使用PLL时,REFRESH=0x008C0000+1955=0x008C07A3。
5. BANKSIZE寄存器REFRESH(BANKSIZE REGISTER)
(1)BURST_EN([7])
0=ARM核禁止突发传输,1=ARM核支持突发传输。
(2)SCKE_EN([5])
0=不使用SCKE信号SDRAM进入省电模式,1=使用SCKE信号令SDRAM进入省电模式。
(3)SCLK_EN([4])
0=时刻发出SCLK信号,1=仅在访问SDRAM期间发出SCLK信号(推荐)。
(4)BK76MAP([2:0])
设置BANK7/6的大小。BANK0~5的地址空间大小都是固定的128MB,地址范围是(x*128M)到(x+1)*128-1,x表示0到5。BANK6/7的大小是可变的,以保持这两个地址的连续,即BANK7的起始地址会随它们的大小变化。BK76MAP的取值意义如下:
010 = 128MB/128MB;001 = 64MB/64MB;000 = 32M/32M;111 = 16M/16M;110 = 8M/8M;101 = 4M/4M;100 = 2M/2M
6. SDRAM模式设置寄存器MRSRBx(SDRAM MODE REGISTER SET REGISTER,x为6~7)
能修改的只有位CL([6:4]),这是SDRAM时序的一个时间参数:
CAS latency 000 = 1 clock, 010 = 2 clocks, 011=3 clocks