轉自:http://blog.csdn.net/reille/article/details/5632648
由於公司終端產品的平台由三星的2440換到9260上(可能是由於9260更適合於工業場合上),考慮到後續項目也可能採用此平台,為與時俱進,因此利用閑時間也來學習學習這個平台!
按照慣例,先瞭解下9260的儲存空間分配及其啟動方式:
1. 9260的匯流排為32bit,因此其儲存空間共有4G,一共分成16個bank, 每個bank為256MB ,其中, bank0映射為內部儲存空間,即啟動儲存空間、內部ROM和內部2個SRAM, 啟動儲存空間因為選擇的啟動方式不同而不同 ; bank1-bank8映射為外部儲存空間,分別對應片選0到片選7 。
2. 與2440一樣,9260也總是從地址0x0啟動的,因此需要重點關注誰被映射到地址0。映射由兩個參數決定,一個硬體參數即 BMS引腳電平狀態 ,一個軟體佈建參數即REMAP參數。 REMAP為0:當檢測到BMS引腳為1時,內部ROM被映射到地址0x0, 當檢測到BMS引腳為0時, 上面說到的片選0也就是bank1被映射到地址0x0。因此通過BMS引腳的電平設定,實現了2種啟動方式。
3. 先看BMS引腳為0時的情況:bank1即對應片選0是EBI(外部匯流排介面),接的是外部儲存空間。通常情況下,一般從 norflash啟動或者nandflash啟動,而從資料手冊中可知9260處理器內部已經為nandflash預留了片選3,因此如果把norflash接在片選 0,就可以實現norflash啟動。
4. 再看BMS引腳為1時的情況:此時內部ROM被映射到地址0x0。9260的 內部ROM被映射到地址0x0時,程式先掃描兩個SPI DataFlash,尋找是否有相應的8個異常向量,即檢測前28bytes的內容,如果是異常向量,表明能夠引導系統,此時根據向量6的大小,確定要裝載到sram的大小,之後REMAP(重新對應)下,這樣sram就變成了地址0,之後程式跳轉到0地址執行;如果兩個SPI
DataFlash沒有相應的向量,則轉向Nand Flash檢測,如果檢測到8個異常向量,表明Nand Flash能夠引導,方法跟以上相同。
6. 總結:
當我們需要從nor flash啟動時,BMS引腳設定為低電平,這樣nor flash所在的儲存空間bank1,也就是EBI片選0,被映射到地址0,此時實現從nor flash啟動;當我們需要從nand flash啟動時,BMS引腳設定為高電平,這時內部ROM被映射到地址0,ROM中的程式( 晶片內部的bootloader ), 檢測過兩個spi
dataflash之後,當檢測到nand flash有相應的向量的時,就會把nand flash中向量6標記的大小的代碼自動複製到SRAM中,之後重新對應,即把內部SRAM映射到地址0x0,跳到地址0x0,開始執行 系統 。
當我們從nor flash啟動時候,沒有特別需要說的,此時我們忽略bank0的內容,即sram和rom中的內容,我們可以利用容量更大的SDRAM來做事情。當我們從nand flash啟動時,nand flash啟動代碼中的一小部分被copy到了sram中(此時rom被映射到0,sram在其後),之後REMAP後,sram被映射到了地址 0,cpu自動跳到0地址,即我們的小部分啟動代碼那執行,此時,啟動代碼也可以用容量更大的sdram來做事情了~
NAND FLASH啟動時,晶片內部的bootloader(位於內部ROM)將bootstrap丟到SRAM運行,然後bootstrap將SDRAM和NAND/DATAFLASH初始化完成,將uboot或者使用者程式從NAND或者DATAFLASH載入到SDRAM運行 。
公司的終端產品採用的是NAND FLASH啟動,從原理圖看,BMS引腳置為了高電平,正如我們所分析的那樣!