Samsung ARM處理器iROM啓動模式介紹

最近在使用三星S3C2416這個處理器,須要在EBOOT 上實現SD卡文件系統,並從SD卡中燒寫wince系統,與S3C2416的從SD卡啓動不一樣。我用的BSP是 SMDK2416_WinCE50_PM_REL_0.01_080611的,Bootloader文件夾中包含了三個文件 夾:Eboot.Whimory、NBL1.LSB、NBL2,先前不太明白這三個Boot到底有什麼用,因而從網上找到了下面一篇文件,是以 S3C6410爲例做的介紹。 函數

 

    目前的ARM處理器都支持多種啓動模式,S3C6410和之前的 Samsung的ARM處理器同樣,經過外部管腳OM[4:0]的拉高拉低來決定是從哪一個存儲設備上啓動。我認爲S3C6410的User Manual並無說的很清楚,因此我在最開始使用的時候,也對其啓動模式有一些誤解,下面就我我的的理解,介紹一下S3C6410的啓動。 spa

    先讀一下S3C6410 User Manual的第3章 System Controller,在123頁列了一張表,如圖: 接口

   

 

這章表列出了S3C6410所支持的幾種啓動模式。首先介紹一下和啓動模式相關的硬件管腳: flash

OM[4:0]:選擇啓動設備及時鐘源。OM[0]爲0選擇XXTlpll,爲1選擇XEXTCLK。 it

 

 GPN[15:13]:用於識別所支持的Nandflash的類型,包括Page的類型和地址週期。 硬件

 XSELNAND:選擇Nand啓動或者是OneNand啓動。0爲OneNand,1爲Nand。 下載

 

 

    從表中能夠看出,S3C6410好像並不支持Nandflash啓動,由於Boot Device中沒有Nandflash設備。當OM[4:0]爲0000x/0001x/0010x/0011x的時候,Boot Device是Reserved,我想這裏是Samsung在6410中有意要隱瞞什麼。若是你用過S3C6400,你應該知道在S3C6400 User Manual中也有這麼一張表,描述了s3c6400的啓動模式,具體S3C6400的啓動模式也是在第3章 System Controller,在第107頁的表,如圖: 程序

 

我想和S3C6410的表對照一下就會發現,兩個處理器的啓動模式是兼容的,我認爲S3C6410應該兼容S3C6400的啓動模式,只不過SamsungS3C6410 User Manual中隱藏了S3C6400中所支持Nandflash啓動模式,目的多是Samsung不但願在S3C6410中使用Nandflash啓動,而要推崇IROM的啓動模式。我的理解啊! im

 

 

 

下面來總結一下S3C6410所支持的啓動模式: 總結

 

1. NORFlash啓動

 

經過Nor Flash啓動,此時OM[4:1]01000101,對應8bit16bit

 

 

 

2. NandFlash啓動

 

雖然在S3C6410 User Manual中沒有提到,可是也是支持的,從S3C6400 User Manual能夠找到。OM[4:1]四個硬件管腳決定了Nandflash啓動,以及支持的Nandflash的類型,包括大Page和小Page,地址週期爲345。固然,XSELNAND管腳也要爲1

 

 

 

3. OneNAND啓動

 

首先XSELNAND管腳爲0,其次OM[4:1]0110,爲OneNand啓動模式。

 

 

 

4. MODEM啓動

 

OM[4:1]0111的時候,爲MODEM啓動。S3C6410經過MODEM接口下載boot代碼到內部RAM中,而後進行引導。

 

 

 

5. IROM啓動

 

OM[4:1]1111的時候,從Internal ROM中啓動,此時GPN[15:13]用於識別設備的類型。這種模式之前沒見過,這裏具體介紹一下。

 

IROM模式能夠支持MoviNand,SD/MMC,iNand,OneNand和Nand等。關於IROM的引導,具體過程如圖:

 

1. 處理器上電後,當OM[4:1]=1111時,運行iROM中的程序,這個程序被稱爲Bootloader0(BL0),它會作一些初始化的工做。

 

2. 而後根據GPN[15:13]的管腳設置,選擇從相應的設備(SD/MMC/OneNand/Nand)中的指定區域讀取4KB的程序到SteppingStone中運行,這段代碼被稱爲Bootloader1(BL1)

 

3. BL1能夠初始化系統時鐘,UARTSDRAM等設備,而後拷貝Bootloader2(BL2)SDRAM中。

 

4. 跳轉到SDRAM中的BL2,繼續運行,BL2能夠支持更強大的功能,能夠將OS加載到SDRAM中,而後運行OS

 

 

 

整個過程當中,IROM是最早被運行的,它會首先作一些初始化,具體IROM的流程以下:

 

1. 禁用Watch-dog

 

2. 初始化TCM

 

3. 初始化設備拷貝函數,用於拷貝BL1SteppingStone

 

4. 初始化棧區域

 

5. 初始化PLL

 

6. 初始化指令Cache

 

7. 初始化堆區域

 

8. 拷貝BL1SteppingStone

 

9. 驗證BL1

 

10. 跳轉到SteppingStone中運行

 

 

 

仍是看一下流程圖吧,理解起來會更直觀一些,IROM啓動流程如圖:

相關文章
相關標籤/搜索