WINCE6.0+S3C6410基于SD卡启动
********************************LoongEmbedded********************************
作者:LoongEmbedded(kandi)
時間:2011.11.02
類別:WINCE驅動開發
********************************LoongEmbedded********************************
?
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文件組成
?
?
?
?
總結
以上是生活随笔為你收集整理的WINCE6.0+S3C6410基于SD卡启动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AA065VD时序的确定
- 下一篇: WINCE6.0隐藏文件夹和应用程序访问