存儲器共有13個寄存器,BANK0~BANK5只需要設(shè)置BWSCON和BANKCONx(x為0~5)兩個寄存器;BANK6、BANK7外接SDRAM時,除了BWSCON和BANKCONx(x為6、7)外,還要設(shè)置REFRESH、BANKSIZE、MRSRB6、MRSRB7等4個寄存器。下面分類說明(“[y:x]”表示占據(jù)了寄存器的位x、x+1、……、y):
1. 位寬和等待控制寄存器BWSCON(Bus Width & Wait Status Control Register)
BWSCON中每4位控制一個BANK,最高4位對應(yīng)BANK7、接下來4位對應(yīng)BANK6,依此類推。
(1)STx:啟動/禁止SDRAM的數(shù)據(jù)掩碼引腳,對于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信號,通常設(shè)為0。Determine WAIT status for bank x, 0 = WAIT disable 1 = WAIT enable。
(3)DWx:使用兩位來設(shè)置相應(yīng)BANK的位寬,0b00對應(yīng)8位,0b01對應(yīng)16位,0b10對應(yīng)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外接設(shè)備的訪問時序,一般使用默認的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。
當(dāng)MT=0b00時,此寄存器與BANKCON0~BANKCON5類似,不再贅述。
當(dāng)MT=0b11時,此寄存器其他值設(shè)置如下。
Trcd([3:2]):RAS to CAS delay,設(shè)為推薦值0b01。
SCAN([1:0]):SDRAM的列地址位數(shù),00 = 8-bit;01 = 9-bit;10= 10-bit
4. 刷新控制寄存器REFRESH(REFRESH CONTROL REGISTER):設(shè)為0x008C0000+R_CNT
(1)REFEN([23]):0=禁止SDRAM的刷新功能,1=開啟SDRAM的刷新功能。
(2)TREFMD([22]):SDRAM的刷新模式,0=Auto Refresh,1=Self Refresh(一般在系統(tǒng)休眠時使用)。
(3)Trp([21:20]):設(shè)為0即可。
(4)Tsrc([19:18]):設(shè)為默認值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的數(shù)據(jù)手冊上有標明,例如HY57V561620B的數(shù)據(jù)手冊上有這么一句話“8192 refresh cycles / 64ms”。所以,刷新周期=64ms/8192=7.8125us。
在未使用PLL時,SDRAM時鐘頻率等于晶振的12MHz。
現(xiàn)在可以計算: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核禁止突發(fā)傳輸,1=ARM核支持突發(fā)傳輸。
(2)SCKE_EN([5])
0=不使用SCKE信號SDRAM進入省電模式,1=使用SCKE信號令SDRAM進入省電模式。
(3)SCLK_EN([4])
0=時刻發(fā)出SCLK信號,1=僅在訪問SDRAM期間發(fā)出SCLK信號(推薦)。
(4)BK76MAP([2:0])
設(shè)置BANK7/6的大小。BANK0~5的地址空間大小都是固定的128MB,地址范圍是(x*128M)到(x+1)*128-1,x表示0到5。BANK6/7的大小是可變的,以保持這兩個地址的連續(xù),即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模式設(shè)置寄存器MRSRBx(SDRAM MODE REGISTER SET REGISTER,x為6~7)
能修改的只有位CL([6:4]),這是SDRAM時序的一個時間參數(shù):
CAS latency 000 = 1 clock, 010 = 2 clocks, 011=3 clocks