JZ2440存儲管理器學(xué)習(xí)
硬件學(xué)習(xí),首先要明確目的,多問為什么? 引出存儲器管理器作用:
(對SDRAM、網(wǎng)卡、nor等設(shè)備進行初始化,以便存儲器管理器配合CPU進行與外設(shè)數(shù)據(jù)通訊)
1、為什么存在存儲器管理器:
答:CPU不會管太多,CPU只會發(fā)出指令從某個地址讀數(shù)據(jù),此時存儲器管理器會根據(jù)地址判斷是什么設(shè)備,并負責(zé)數(shù)據(jù)操作,把CPU想操作的數(shù)據(jù)反饋給CPU
存儲器管理器根據(jù)地址?知道是什么東西,然后發(fā)出片選等信號(bank0-7)
2、想訪問一個存儲芯片 需要哪些條件?
(1)????地址線
(2)????數(shù)據(jù)線 8/16/32 數(shù)據(jù)寬度
(3)????時鐘頻率
(4)????芯片相關(guān)特性
3、使用存儲控制器訪問外設(shè)的原理
S3C2440的地址空間:
27位地址線,32位數(shù)據(jù)線,8個片選信號。共8個存儲器(BANK0-7)1GB,系統(tǒng)上電將從bank0開始執(zhí)行。
S3C2440對外引出27根地址線ADDR0-ADDR26,訪問范圍只有128MB,CPU對外還引出8根片選信號nGCS0-nGCS7,對應(yīng)BANK0-BANK7,當(dāng)訪問BANKx的地址空間時,nGCSx引腳輸出低電平來選中外接設(shè)備。
這樣每個128MB空間,共8個片選,對應(yīng)1GB的地址空間??臻g分布圖如下:
BANK訪問地址=Bank起始地址(0X30000000)+2^地址線地址(ADDR[25:0])=0X30000000-0X33FFFFFF.
S3C2440是32位CPU,可以使用的地址范圍理論達到4GB,除去上面連接外設(shè)的1GB空間外,還有一部分是CPU內(nèi)部寄存器的地址,剩下的地址空間沒有使用。
2440寄存器地址范圍處于:0x4800 0000-5fff ffff,寄存器地址范圍如下:
4、存儲控制器與外設(shè)的關(guān)系
BANK0-BANK5的連接方式類似,BANK6連接SDRAM時復(fù)雜一些,SDRAM內(nèi)部是一個存儲陣列,指定一個行,再指定一個列,就可以準(zhǔn)確找到所需要的單元格,而SDRAM有4個邏輯表格(L-BANK)
那么SDRAM的訪問步驟為:
1)CPU發(fā)出片選信號nSCS0(與nGCS6是同一引腳)有效,選中SDRAM芯片
2)SDRAM有4個L-BANK,需要兩個地址信號來選中其中一個,即ADDR24、ADDR25,如下圖
3)對被選中的芯片進行同一的行/列(存儲單元)尋址
根據(jù)SDRAM芯片的列地址線數(shù)目設(shè)置CPU相關(guān)寄存器后,CPU會從32位地址中自動分出L-BANK選擇信號、行地址信號、列地址信號,然后先后發(fā)出行地址信號、列地址信號。L-BANK選擇信號在發(fā)出行地址信號的同時發(fā)出,并維持到列地址信號結(jié)束
如上圖:
行地址、列地址公用地址線ADDR2-ADDR14,使用nSRAS(R=Row)、nSCAS(C=Column)兩個信號來區(qū)分它們,當(dāng)nSRAS信號有效時,ADDR2-ADDR14發(fā)出的是行地址,對應(yīng)地址空間bit[23:11],當(dāng)nSCAS信號有效時,ADDR2-ADDR14發(fā)出的是列地址,對應(yīng)地址空間bit[10:2]。
4)找到存儲單元后,被選中的芯片就要進行統(tǒng)一的數(shù)據(jù)傳輸。
開發(fā)板使用兩片16bit的SDRAM芯片并聯(lián)形成32位的位寬,與CPU的32根數(shù)據(jù)線DATA0-DATA31相連,BANK6的起始地址位0x30000000
5、存儲控制器的寄存器使用方法
存儲控制器共有13個寄存器,BANK0-BANK5只需要設(shè)置BWSCON和BANKCONx兩個寄存器,BANK6、BANK7外接SDRAM時,還要設(shè)置REFRESH,BANKSIZE,MRSRB6,MRSRB7,等4個寄存器,下面分別說明
1)位寬和等待控制寄存器BWSCON
BWSCON中每四位控制一個BANK,最高4位對應(yīng)BANK7、接下來4位對應(yīng)BANK6,依次類推,如下圖:
注:BANK0接NOR Flash 16位。
根據(jù)存儲控制器與外設(shè)的關(guān)系可以確定BWSCON寄存器值為:0x22011110
2)BANK控制寄存器BANKCONx(x為0-5)
這些寄存器用來控制BANK0-BANK5外接設(shè)備的訪問時序,使用默認(rèn)0x0700即可
3)BANK控制寄存器BANKCONx(x為6-7)
根據(jù)時序圖和SDRAM-EM63A165TS:決定取值
所以本開發(fā)板,BANKCON6/7均設(shè)為0x00018005
4)刷新控制寄存器REFRESH
綜上所述:REFRESH=0x008C0000+1955=0x008C07A3
5)BANKSIZE寄存器
則本開發(fā)板BANKSIZE設(shè)為0xB1
6)SDRAM模式設(shè)置寄存器MRSRBx(x為6-7)
所以MRSRB6/7取值為0x30
總結(jié)一下: BWSCON 0x22011110 BANKCON0~5 0x0700 BANKCON6~7 0x00018005 REFRESH 0x008C07A3 BANKSIZE 0xB1 MRSRB6~7 0x30
6、關(guān)于SDRAM知識的一些補充
地址線為什么從LADDR2開始?
2440以 字節(jié)為單位讀取數(shù)據(jù) ? sdram 是32位數(shù)據(jù)操作 ?CPU發(fā)出0 123地址(兩塊16bit-SDRAM,低16位和搞16位)返回的內(nèi)容一樣,具體由存儲器管理器 實現(xiàn)到2440的分配。所以對于32位寬,從A2開始接。
代碼實現(xiàn)!