DBAu1200 Development Board Boot Flash 地址釋疑
來源:互聯網
上載者:User
//========================================================================
//TITLE:
// DBAu1200 Development Board Boot Flash 地址釋疑
//AUTHOR:
// norains
//DATE:
// Wednesday 16-April-2008
//Environment:
// PB 5.0 + DB1200 BSP
//========================================================================
看過我這篇《小議DBAU1200 Development Board的Boot Flash》的朋友,可能對BOOT FLASH的地址還有所疑惑。該文說道,BOOT FLASH的地址(含PARAMETER FLASH)的地址為0x1C000000~0x1FFFFFFF,那麼這個地址是如何定義的呢?
這個地址可以在“$Platform/Db1200/Inc/db1200.h”中找到:
// FLASH on RCE0
//
#define FLASH_BASE 0x1C000000
#define FLASH_SIZE 0x04000000
#define BOOT_VECTOR_OFFSET 0x1fc00000 - FLASH_BASE
Base地址為0x1C000000,Flash的大小為0x04000000,兩者相加等於0x1FFFFFFF,恰好為flash的TOP地址。
雖然我們知道定義是在該檔案,但對於為何定義為此地址,現在我們還是不明了。所以,我們要查看AU1200的文檔,發現對於物理地址有如下列表():
我們很明確可以看出,0x0 18000000 ~ 0x0 1FFFFFFF為定義的專門用來作為BOOT ROM的地址。而解釋中明確指出,BOOT ROM的地址一定要包含boot vector,也就是說要包含0x1fc00000。因此,對於DBAU1200 Development Board來說,BASE地址的確定是採用如下方式:0x1FFFFFFF - 0x04000000 + 1 = 0x1C000000。因為以0為起始,所以其後需要再加1。
對於DBAU1200 Development Board BOOT FLASH的地址取值已經很明白了,現在另一個疑惑又來了:仔細查看該列表,會發現 0x0 20000000 ~ 0x0 7FFFFFFF段也可以作為memory mapped,為何文檔中要將其與0x0 18000000 ~ 0x0 1FFFFFFF這段分開呢?其實問題很簡單,不過這又要涉及到MIPS處理器的機構。我們知道,MIPS處理器的KSEG0和KSEG1所能映射的物理位址範圍為512M,而這個範圍基數則剛好是:0x 00000000 ~ 0x0 1FFFFFFF,而這正好落在文檔中介紹的BOOT FLASH範圍。換句話說,通過KSEG0和KSEG1所能訪問的物理地址只處於0x 00000000 ~ 0x0 1FFFFFFF範圍段,其餘只能通過MMU機制。細心的朋友可能已經猜到,如果我們的BOOT FLASH大於128M,比如說為1G,那麼我們通過KSEG0或KSEG1隻能訪問到最前面的128M,至於剩下的容量則是無計可施。這也是為何文檔會將同樣都能做memory mapped的空間劃分為兩段的緣故。