天天看點

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

歡迎加入Wince技術讨論群QQ#326444254

1.  基于IROM SD/MMC啟動方式的原理

我們知道S3C6410支援IROM啟動(internal ROM Booting),IROM啟動是指從OneNAND、SD/MMC卡和NAND Flash儲存設備啟動的方式,見下圖:

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖1 IROM啟動流程

上圖是系統基于IROM方式啟動的工作流程圖,下面簡要描述此流程主要的工作:

1)  處理器上電後,當OM[4:1]=1111時,執行IROM中的啟動代碼(boot codes),這個啟動代碼稱為BL0,它具體會做一些初始化的工作。

2)  根據GPN[15:13]管腳的設定來選擇啟動的裝置,根據圖2,如果是要從SD/MMC的通道0中的SD卡啟動,那麼GPN[15:13]=000,這樣BL0就會通過SD控制器從SD卡中讀出BL1中的前4KB的程式到Stepping Stone中,然後再Stepping Stone中執行BL1的代碼。

3)  BL1可以初始化系統時鐘,UART,SDRAM等裝置,然後拷貝Bootloader2(BL2)到SDRAM的位址記憶體處。

4)  然後跳轉到SDRAM中的BL2繼續運作,BL2支援更強大的功能,并且進一步初始化硬體和把WINCE核心鏡像拷貝到SDRAM的(0x80100000)位址記憶體處。

5)  最後再SDRAM種開始執行NK。

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖2  S3C6410支援的啟動方式

這裡有個不太确定的問題, IROM_ApplicationNote文檔中提到說IROM boot code(BL0)可以裝載4KB的bootloader code到stepping stone(8KB)中,但是實際是BL0可以裝載8KB的stepldr_IROM_SD.nb0到stepping stone,不知道大家如何了解這個沖突,還望知道的朋友告知。

2.  基于SD卡啟動的實作概述

S3C6410支援從SD卡啟動,可通過IROM_Fusing_Tool.exe應用軟體将IROM_SD_EBOOT.nb0燒錄到SD卡中,然後從SD卡啟動的時候,通過啟動的IROM_SD_EBOOT.nb0來燒錄新的stepldr、eboot和OS到NANDFLASH中,這樣後面就可以從NANDFLASH啟動了。

通過IROM Fusing tool燒錄IROM_SD_EBOOT.nb0檔案到SD card後,在SD卡中是看不到檔案的,因為它不是通過FAT寫檔案的方式,而是直接寫入SD card扇區,這樣S3C6410從SD card啟動時,直接通過SDIO控制器讀扇區,其中IROM_SD_EBOOT.nb0由stepldr_IROM_SD.nb0(相當于BL2)和eboot_sdfuser.nb0(相當于BL1)組成,BL1和BL2的意思是引導加載的第一階段和第二階段,下圖是SD/MMC裝置引導塊的配置設定。

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖3 SD/MMC裝置啟動塊配置設定圖

由上圖可知SD卡的最後一個塊(block,這裡也就是sector,每個sector為512Bytes)因為預留下來,是以我們不能使用,倒數第二個block指定用于SD卡的标簽(signature),從[LAST-18]到[LAST-3]這16塊用于儲存BL1,根據上圖并結合BL2的大小可以判斷BL2在SD卡中的位置。

3.  燒到IROM_SD_EBOOT.nb0燒錄到SD卡

根據上面的描述,我們知道要把IROM_SD_EBOOT.nb0燒錄到SD卡中的具體位置,下面先來看IROM Fusing tool.exe的應用界面

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖4  IROM_Fusing_tool.exe的界面

在上圖選擇START的時候,我們來看IROM_Fusing_tool.exe源代碼的主要實作部分,下面看第一部分:

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖5  IROM_Fusing_tool.exe寫動作主要實作部分

為什麼從第0x52到0x56這5位元組的内容是檔案系統的辨別符呢?我們通過winhex工具來檢視SD卡的啟動區的内容,這些内容是對SD卡進行格式化的時候寫進SD卡中的,如下:

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖6  winhex打開1GB的SD卡

下面繼續來看第二部分:

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖7  IROM_Fusing_tool.exe寫動作主要實作部分

SDHC裝置引導塊的配置設定如下:

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖8  SDHC裝置引導塊的配置設定

4.  啟動時從SD卡中讀取IROM_SD_EBOOT.nb0并

S3C6410啟動後,基于IROM+SD的啟動方式,CPU先執行BL0的啟動代碼,其中BL0在啟動過程中會通過SD卡控制器把BL1(也就是stepldr_IROM_SD.nb0,大小為8KB)的内容拷貝到stepping stone中),然後在stepping stone中執行BL1的代碼,BL1在執行過程中會調用main函數,如下:

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖9 BL1的main函數

到此BL2的内容已經複制到SDRAM指定的記憶體位址處,并且開始執行了,然後可以通過IROM_SD_EBOOT.nb0的下載下傳功能手動或者自動下載下傳block0、eboot.bin或是NK.bin到NANDFLASH中了。

4.1 儲存SD/MMC卡資訊的全局變量

在使用SD/MMC卡作為啟動裝置的時候,SD/MMC卡的資訊必須要儲存在指定的區域,見下圖:

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖10 儲存SD/MMC卡的資訊的位址及用途定義

4.2 裝置複制函數(Device Copy Function)

S3C6410内部包含了引導裝置的塊指派函數的ROM代碼,是以開發者不需要實作裝置複制函數,這些内部的函數可以複制任何裝置的資料到SDRAM中,使用者在内部的ROM代碼執行之後可以使用這些函數,因為這些函數是在BL0階段初始化的。下面是這些裝置複制函數的描述表

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖11 裝置指派函數說明

4.3 IROM_SD_EBOOT.nb0檔案的組成及大小

下圖是IROM_SD_EBOOT.nb0檔案的組成檔案及各個檔案的大小,有助于大家的了解

wince+s3c6410 SD卡啟動 歡迎加入Wince技術讨論群QQ#326444254

圖12 IROM_SD_EBOOT.nb0檔案組成

繼續閱讀