Samsung的ARM處理器iROM啟動模式介紹

2021-06-27 01:15:28 字數 2377 閱讀 1913

最近在使用三星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的啟動。

先讀一下s3c6410 user manual的第3章 system controller,在123頁列了一張表,如圖:

這章表列出了s3c6410所支援的幾種啟動模式。首先介紹一下和啟動模式相關的硬體管腳:

om[4:0]:選擇啟動裝置及時鐘源。om[0]為0選擇xxtlpll,為1選擇xextclk。

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的啟動模式,只不過samsung在s3c6410 user manual中隱藏了s3c6400中所支援nandflash啟動模式,目的可能是samsung不希望在s3c6410中使用nandflash啟動,而要推崇irom的啟動模式。個人理解啊!

下面來總結一下s3c6410所支援的啟動模式:

1. norflash啟動

通過nor flash啟動,此時om[4:1]為0100或0101,對應8bit和16bit。

2. nandflash啟動

雖然在s3c6410 user manual中沒有提到,但是也是支援的,從s3c6400 user manual可以找到。om[4:1]四個硬體管腳決定了nandflash啟動,以及支援的nandflash的型別,包括大page和小page,位址週期為3,4,5。當然,xselnand管腳也要為1。

3. onenand啟動

首先xselnand管腳為0,其次om[4:1]為0110,為onenand啟動模式。

4. modem啟動

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可以初始化系統時鐘,uart,sdram等裝置,然後拷貝bootloader2(bl2)到sdram中。

4. 跳轉到sdram中的bl2,繼續執行,bl2可以支援更強大的功能,可以將os載入到sdram中,然後執行os。

整個過程中,irom是最先被執行的,它會首先做一些初始化,具體irom的流程如下:

1. 禁用watch-dog

2. 初始化tcm

3. 初始化裝置拷貝函式,用於拷貝bl1到steppingstone中

4. 初始化棧區域

5. 初始化pll

6. 初始化指令cache

7. 初始化堆區域

8. 拷貝bl1到steppingstone中

9. 驗證bl1

10. 跳轉到steppingstone中執行

還是看一下流程圖吧,理解起來會更直觀一些,irom啟動流程如圖:

arm處理器模式和arm處理器狀態的區別

arm處理器狀態 arm微處理器的工作狀態一般有兩種,並可在兩種狀態之間切換 第一種為arm狀態,此時處理器執行32位的字對齊的arm指令 第二種為thumb狀態,此時處理器執行16位的 半字對齊的thumb指令。在程式的執行過程中,微處理器可以隨時在兩種工作狀態之間切換,並且,處理器工作狀態的轉變...

ARM處理器模式

cpsr暫存器 arm v4的cpsr暫存器 和儲存它的spsr暫存器 中的位分配如下圖所示。處理器模式決定了哪些暫存器是活動的以及對cpsr訪問權。處理器模式要麼是特權模式,要麼是非特權模式。特權模式允許對cpsr的完全讀 寫訪問 與些相反,非特權模式只允許對cpsr的控制域進行讀訪問,但允許對條...

ARM處理器型號

arm公司擁有眾多cpu指令集,cpu架構,cpu系列.本文旨在介紹arm公司的cpu產品線.下圖展示了arm公司cpu的產品線 首先有必要了解一下arm公司的命名規則 arm的命名規則,大致分成三類 1.基於arm architecture版本的 指令集架構 命名規則 2.基於arm archit...