12.2內(nèi)存控制器與SDRAM_不同位寬設備的連接

視頻教程???
參考2440芯片手冊,可以看到內(nèi)存接口與8-bit ROM連接時,2440的A0與外部芯片的A0相連。

當與兩個8-bit ROM拼接成的一個16-bit ROM連接時,2440的A1與外部芯片的A0相連。

當與四個8-bit ROM拼接成的一個32-bit ROM連接時,2440的A2與外部芯片的A0相連。

當與一個16-bit ROM連接時,2440的A1與外部芯片的A0相連。

可以看出外接芯片的位寬有變化時,地址線的接法也會有變化。那這個變化有什么規(guī)律呢?
假設CUP執(zhí)行:?

如圖有8bitROM、16bitROM、32bitROM。

8個bit組成一個字節(jié),字節(jié)是計算機的最小的存儲單位,因此我們讀取數(shù)據(jù)肯定都是8bit的倍數(shù)。?
對于8bitROM ,8bit是一次讀寫的最小單位,即0地址是第一個8bit,1地址是第二個8bit;CPU發(fā)出的命令是讀取地址為3上的數(shù)據(jù),即A0和A1都為1,8bitROM的A0和A1收到的也都是1,于是找到了ROM上地址為3的8bit數(shù)據(jù),包含了我們需要的數(shù)據(jù)。
對于16bitROM ,16bit是一次讀寫的最小單位,即0地址是第一個16bit,里面有兩個8bit數(shù)據(jù);CPU發(fā)出的命令是讀取地址為3上的數(shù)據(jù),即A0和A1都為1,16bitROM的A0和A1分別收到的是1和0,于是找到了ROM上地址為1的16bit數(shù)據(jù),包含了我們需要的數(shù)據(jù),最后內(nèi)存控制器再幫我們挑選出所需的8bit數(shù)據(jù)。
對于32bitROM ,32bit是一次讀寫的最小單位,即0地址是第一個32bit,里面有四個8bit數(shù)據(jù);CPU發(fā)出的命令是讀取地址為3上的數(shù)據(jù),即A0和A1都為0,32bitROM的A0和A1收到的都是0,于是找到了ROM上地址為0的32bit數(shù)據(jù),包含了我們需要的數(shù)據(jù),最后內(nèi)存控制器再幫我們挑選出所需的8bit數(shù)據(jù)。

接到芯片上的引腳用來確定讀取芯片上的哪一個單元的數(shù)據(jù),把這個單元的數(shù)據(jù)返回給內(nèi)存控制器,內(nèi)存控制器會根據(jù)沒有連接芯片的引腳,來確定返回哪一個單元的數(shù)據(jù)給CPU,
再舉一個例子: 假如傳遞一個32位的數(shù)據(jù)時?

執(zhí)行過程如下:
8bitROM: 當CPU發(fā)出地址(000100),內(nèi)存控制器會把000100,000101,000110,000111處的地址轉(zhuǎn)發(fā)給ROM,ROM會把得到的地址000100,000101,000110,000111,上的數(shù)據(jù)返回給內(nèi)存控制器,內(nèi)存控制器會把得到的4個8bit的數(shù)據(jù)組裝成一個32位的數(shù)據(jù)返回給CPU。
16bitROM: 當CPU發(fā)出地址(000100),內(nèi)存控制器會把00010,00011處的地址轉(zhuǎn)發(fā)給ROM,ROM會把得到的地址00010,00011,上的數(shù)據(jù)返回給內(nèi)存控制器,內(nèi)存控制器會把得到的2個16bit的數(shù)據(jù)組裝成一個32位的數(shù)據(jù)返回給CPU。
32bitROM: 當CPU發(fā)出地址(000100),內(nèi)存控制器會把0001處的地址發(fā)送給ROM,ROM會把得到的地址0001上的數(shù)據(jù)返回給內(nèi)存控制器,內(nèi)存控制器會把得到的1個32bit數(shù)據(jù)返回給CPU。
怎樣確定芯片的訪問地址:?
根據(jù)片選信號確定基地址,
根據(jù)芯片所接地址線確定范圍
實例: Nor Flash 使用的是片選0(nGCS0),基地址為0,用到A20,A19......A1,A0共21條地址線,所以地址范圍為0x00000000 ~ 0x1FFFFF也就是2M的空間大小。 網(wǎng)卡(Net)使用的是片選4(nGCS4),基地址為0x20000000,用到A2,A0共2根地址線,所以地址范圍為0x20000000 ~ 0x20000005。 SDRAM使用的是片選6(nGCS6),基地址為0x30000000。?

視頻教程??
