[ARM筆記]存儲(chǔ)控制器及其訪問外設(shè)的原理
1. S3C2410/S3C2440地地址空間
本文引用地址:http://www.biyoush.com/article/201611/340831.htmS3C2410/S3C2440對(duì)外引出的27根地址線ADDR0~ADDR26的訪問范圍只有128MB,那么是如何達(dá)到1GB的空間的呢?CPU對(duì)外還引出了8根片選信號(hào)nGCS0~nGCS7,對(duì)應(yīng)于BANK0~BANK7,當(dāng)訪問BANKx的地址空間時(shí),nGCSx引腳輸出低電平用來選中外接的設(shè)備。這樣,每個(gè)nGCSx對(duì)應(yīng)128MB的地址空間,8個(gè)nGCSx信號(hào)總共就對(duì)應(yīng)了1GB的地址空間。這8個(gè)BANK的地址空間如:http://weimenlove.blog.163.com/blog/static/17775473201101013847857/
S3C2410/S3C2440作為32位的CPU,可以使用的地址范圍理論上可達(dá)到4GB。除去上述用于連接外設(shè)的1GB的地址空間外,還有一部分是CPU內(nèi)部寄存器的地址,剩下的地址空間沒有使用。注意:這里的地址指的是物理地址。
2. 存儲(chǔ)控制器與外設(shè)的關(guān)系
所以要確定一個(gè)器件的地址,首先看它位于哪個(gè)Bank區(qū),再看它連在Addr[26:0]地址線所確定的地址,將該區(qū)的起始值和它的地址線地址相加即得該器件的地址。
BANK0~BANK5的連接方式類似,BANK6連接SDRAM時(shí)復(fù)雜一點(diǎn),CPU提供了一組用于SDRAM的信號(hào)。
1) SDRAM時(shí)鐘有效信號(hào)SCLK;
2) SDRAM時(shí)鐘信號(hào)SCLK0/SCLK1;
3) 數(shù)據(jù)掩碼信號(hào)DQM0/DQM1/DQM2/DQM3;
4) SDRAM片選信號(hào)nSCS0(它與nGCS6是同一引腳的兩個(gè)功能);
5) SDRAM行地址選通脈沖信號(hào)nSRAS;
6) SDRAM列地址選通脈沖信號(hào)nSCAS;
7) 寫允許信號(hào)nWE(它不是專用于SDRAM)。
SDRAM的內(nèi)部是一個(gè)存儲(chǔ)陣列,陣列就如同表格一樣,將數(shù)據(jù)“填”進(jìn)去。和表格的檢索原理一樣,先指定一個(gè)行(Row),再指定一個(gè)列(Column),就可以準(zhǔn)確地找到所需要的單元格,這就是SDRAM尋址的基本原理。這個(gè)單元格被稱為存儲(chǔ)單元,這個(gè)表格(存儲(chǔ)陣列)就是邏輯Bank(Logic Bank,下文簡稱L-Bank),SDRAM一般含有4個(gè)L-Bank。
可以想象,對(duì)SDRAM的訪問可以分為如下4個(gè)步驟:
1)CPU發(fā)出的片選信號(hào)nSCS0有效,它選中SDRAM芯片。
2)SDRAM中有4個(gè)L-Bank,需要兩根地址信號(hào)來選中其中一個(gè),如圖中所示的是用ADD24、ADD25作為L-Bank的片選信號(hào)。
3)對(duì)被選中的芯片進(jìn)行統(tǒng)一的行/列(存儲(chǔ)單元)尋址。
根據(jù)SDRAM芯片的列地址線數(shù)目設(shè)置CPU的相關(guān)寄存器后,CPU就會(huì)從32位的地址中自動(dòng)分出L-Bank選擇信號(hào)、行址址信號(hào)、列地址信號(hào),然后先后發(fā)出行地址信號(hào)、列地址信號(hào)。L-Bank選擇信號(hào)在發(fā)出行地址信號(hào)的同時(shí)發(fā)出,并維持到列地址信號(hào)結(jié)束。
在圖中,行地址、列地址共用地址線ADD2~ADD14(BANK6的位寬為32,ADDR0/1沒有使用),使用nSRAS、nSCAS兩個(gè)信號(hào)來區(qū)分它們。如上圖中,使用兩根地址線Addr24、Addr25作為L-Bank的選擇信號(hào);HY57V561620使用13根行地址,9根列地址,所以當(dāng)nSRAS信號(hào)有效時(shí),ADDR2~ADDR14上發(fā)出的是行地址信號(hào),它對(duì)應(yīng)32位地址空間的bit[23:11];當(dāng)nSCAS信號(hào)有效時(shí),ADDR2~ADDR10上發(fā)出的是列地址信號(hào),它對(duì)應(yīng)32位地址空間的bit[10:2];由于Bank6以32位的寬度外接SDRAM,ADDR0、ADDR1恒為0,不參與譯碼。
又因?yàn)锽ank6的起始地址為0x3000_0000,所以SDRAM的訪問地址為0x3000_0000~0x33ff_ffff,共64MB(2片*(4*Bank*2^22)*16bit)。
評(píng)論