1. 基於IROM
SD/MMC發起方式的原理
咱們知道S3C6410支持IROM啓動(internal ROM Booting),IROM啓動是指從OneNAND、
SD/MMC卡和NAND Flash存儲裝備啓動的方式,見下圖:
圖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。
圖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設備引導塊的分配。
圖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的應用界面
圖4 IROM_Fusing_tool.exe的界面
在上圖選擇START的時候,咱們來看IROM_Fusing_tool.exe源代碼的主要實現局部,下面看第一部分:
圖5 IROM_Fusing_tool.exe寫舉措主要實現部分
爲何從第0x52到0x56這5字節的內容是文件系統的標識符呢?咱們經過winhex工具來查看
SD卡的啓動區的內容,這些內容是對
SD卡進行
格式化的時候寫進
SD卡中的,以下:
圖6 winhex翻開1GB的
SD卡
下面繼續來看第二部分:
圖7 IROM_Fusing_tool.exe寫動做主要實現部分
SDHC設備引導塊的分配以下:
圖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函數,以下:
圖9 BL1的main函數
到此BL2的內容曾經複製到SDRAM指定的內存地址處,而且開始執行了,而後能夠經過IROM_SD_EBOOT.nb0的下載功能手動或許自動下載block0、eboot.bin或是NK.bin到NANDFLASH中了。
4.1 保存
SD/MMC卡音訊的全局變量
在使用
SD/MMC卡做爲啓動設備的時候,
SD/MMC卡的信息必須要保存在指定的區域,見下圖:
圖10 保存
SD/MMC卡的信息的地址及用途定義
4.2 設備複製函數(Device Copy Function)
S3C6410內部包括了引導設備的塊賦值函數的ROM代碼,因此開發者不需務實現設備複製函數,這些內部的函數能夠複製任何設備的數據到SDRAM 中,使用者在內部的ROM代碼執行以後可使用這些函數,由於這些函數是在BL0階段初始化的。下面是這些設備複製函數的描述表
圖11 設備賦值函數說明
4.3 IROM_SD_EBOOT.nb0文件的組成及大小 下圖是IROM_SD_EBOOT.nb0文件的組成文件及各個文件的大小,有助
你們的理解
圖12 IROM_SD_EBOOT.nb0文件組成