S5PV210开发 -- 启动流程
如需轉(zhuǎn)載請注明出處:https://blog.csdn.net/qq_29350001/article/details/78433564
講完啟動模式、燒寫更新,接下來我們看一下啟動流程。
參看:S5PV210開發(fā) -- 燒寫/啟動模式
參看:S5PV210開發(fā) -- 通過 SD 卡燒寫
參看:S5PV210開發(fā) -- 通過 DNW、fastboot 燒寫
參看:DM368開發(fā) -- Bootloader 開發(fā)(轉(zhuǎn)畢設(shè))
?
學(xué)習(xí)S5PV210 啟動流程部分,需要查看芯片手冊和相關(guān)的文檔。 ?下載:相關(guān)文檔
一、iROM啟動方式簡介
在講燒寫/啟動模式的時候其實已經(jīng)提到,S5PV210 采用 iROM 啟動方式進行啟動,支持從MoviNAND/iNand, MMC/SD Card ,pure Nand, eMMC, eSSD, UART and USB等存儲設(shè)備啟動。
?
?
我們可以通過外部引腳OM[5:0]來選擇相應(yīng)的啟動模式。
下面看一下手冊上是怎么說的吧!!
(1)硬件支持需求
使用iROM啟動方式有幾種硬件需求:
? ? 基于CortexA8的S5PV210X微處理器
? ? 64KB iROM
? ? 96KB iRAM
? ? 通用的SDRAM和控制器
? ? 4/8 Bit的高速SD/MMC控制器
? ? 4-bit SD / 4-bit MMC / 4 or 8-bit eMMC
? ? Nand Flash控制器
? ? OneNand控制器
? ? eSSD控制器
? ? UART/USB控制器
(2)啟動模式
? ? OneNand啟動(Mux/Demux)
? ? Nand啟動(支持8/16-Bit ECC)
? ? SD/MMC啟動(MMC4.3標(biāo)準(zhǔn),兼容eMMC)
? ? eSSD啟動
? ? UART/USB啟動
? ? 安全啟動模式支持:對除UART/USB 外的所有啟動設(shè)備的BootLoader采用整體校驗,安全秘鑰值寫在S5PV210內(nèi)部,如果安全秘鑰值沒有寫在S5PV210內(nèi)部,則為非安全啟動模式。三星在制造階段就將安全秘鑰值寫入到了S5PV210內(nèi)部。
? ? 第二啟動模式支持:當(dāng)?shù)谝粏幽J?#xff08;安全啟動模式)失敗后,就會試圖從4 bit的SD/MMC通道2通過SD/MMC啟動。
(3)iROM啟動方式的優(yōu)點
降低BOM(材料清單)成本
iROM啟動支持從Movinand/iNAND/MMC/eMMC Card, eSSD設(shè)備啟動,系統(tǒng)無需啟動介質(zhì)就可以啟動,不需要像nor flash這樣的啟動設(shè)備。
改善讀特性
采用iROM啟動方式從nand flash啟動時,S5PV210支持8/16-bit H/W ECC。但是16-bit ECC僅支持4KB 5cycle的Nand。
降低生產(chǎn)成本
能從其他啟動設(shè)備燒錄啟動設(shè)備,無需Gang programmer燒錄器。
(4)電路設(shè)計
使用OM引腳選擇iROM啟動設(shè)備
所有的S5PV210啟動設(shè)備都可以從MMC通道2使用SD/MMC設(shè)備以第二啟動方式啟動。
OneNand 啟動時,Xm0CSn4/NFCSn2/ONANDXL_CSn0信號必須有效。BL1代碼段起始處必須是BL1的校驗數(shù)據(jù)。
Nand啟動時,Xm0CSn2/NFCSn0信號必須有效。BL1代碼段起始處必須是BL1的校驗數(shù)據(jù)。
SD/MMC/eMMC啟動時,MMC通道0分配給第一啟動模式使用,通道2分配給第二啟動模式使用。BL1代碼段起始處必須是BL1的校驗數(shù)據(jù)。
UART啟動使用串口端口2
二、iROM啟動流程
S5PV210啟動過程分為BL0、BL1、BL2三個階段,S5PV210內(nèi)部有96Kb的IRAM和64Kb的IROM。S5PV210啟動過程如下圖:
注釋:其中 BL1 最大 16KB,BL2 最大 80KB
第一步:iROM初始化,初始化系統(tǒng)時鐘、特殊設(shè)備控制寄存器和啟動設(shè)備
第二步:iROM啟動代碼加載BL1(bootloader)到iRAM,在安全啟動模式下iROM對BL1進行整體校驗。
第三步:執(zhí)行BL1,BL1加載BL2(剩余的bootloader)到iRAM,BL1將會對BL2進行整體校驗。
第四步:執(zhí)行BL2,BL2初始化SDRAM控制器,將OS下載到SDRAM
第五步:跳轉(zhuǎn)到OS起始地址,進入系統(tǒng)
(1)BL0啟動階段
S5PV20 上電從 0 地址(iROM)開始 運行 Samsung 出廠時固化在里面的代碼,這部分代碼叫做 BL0(boot loader0),BL0 將執(zhí)行如下操作:?
在BL0階段初始化的內(nèi)容如下:
1、關(guān)閉看門狗
2、初始化icache
3、初始化棧(設(shè)置中斷棧、SVC棧)
4、初始化堆
5、初始化塊設(shè)備copy函數(shù)
6、初始化PLL和設(shè)置系統(tǒng)時鐘
7、拷貝BL1到iram
8、校驗BL1,如果校驗失敗,將從SD卡啟動。
9、檢查是否是安全啟動模式
10、跳轉(zhuǎn)到BL1的地址(0xD0020010)
解析:
首先簡單的了解一下,iROM和RAM是什么意思?
iROM 是?Internal Read-Only Memory 的縮寫,即 內(nèi)部只讀存儲器。
RAM ?是 Random-Access Memory 的縮寫,即 隨機存取存儲器,數(shù)據(jù)掉電丟失。
==================================================
ROM和RAM指的都是半導(dǎo)體存儲器,ROM是Read Only Memory的縮寫,RAM是Random Access Memory的縮寫。ROM在系統(tǒng)停止供電的時候仍然可以保持數(shù)據(jù),而RAM通常都是在掉電之后就丟失數(shù)據(jù),典型的RAM就是計算機的內(nèi)存。
?
RAM有兩大類,一種稱為靜態(tài)RAM(Static RAM/SRAM),SRAM速度非常快,是目前讀寫最快的存儲設(shè)備了,但是它也非常昂貴,所以只在要求很苛刻的地方使用,譬如CPU的一級緩沖,二級緩沖。另一種稱為動態(tài)RAM(Dynamic RAM/DRAM),DRAM保留數(shù)據(jù)的時間很短,速度也比SRAM慢,不過它還是比任何的ROM都要快,但從價格上來說DRAM相比SRAM要便宜很多,計算機內(nèi)存就是DRAM的。
DRAM分為很多種,常見的主要有FPRAM/FastPage、EDORAM、SDRAM、DDR RAM、RDRAM、SGRAM以及WRAM等。
?
ROM也有很多種,PROM是可編程的ROM,PROM和EPROM(可擦除可編程ROM)兩者區(qū)別是,PROM是一次性的,也就是軟件灌入后,就無法修改了,這種是早期的產(chǎn)品,現(xiàn)在已經(jīng)不可能使用了,而EPROM是通過紫外光的照射擦出原先的程序,是一種通用的存儲器。另外一種EEPROM是通過電子擦出,價格很高,寫入時間很長,寫入很慢。
==================================================
然后,從啟動設(shè)備中拷貝前16K的代碼到IRAM的0xD0020010處,即?BL1 的地址 0xD0020010。
這個地址很熟悉啊,在使用usb燒寫的時候,我們用過的,參看:S5PV210開發(fā) -- 通過 DNW、fastboot 燒寫
當(dāng)時有拷貝兩個文件?x210_usb.bin 和?uboot.bin 分別拷貝到地址?0xd0020010 ?和?0x23e00000 處。
你有想過為什么是這個地址嗎?
?
我們看一下 S5PV210 存儲空間分配圖。(芯片手冊29頁)
需要關(guān)注的是上圖標(biāo)出的兩個地址,IRAM起始地址 0xD002_0000 和 DRAM 起始地址 0x2000_0000
?
然后看上圖IRAM開始處包含 Header Info(頭信息),所以 BL1開始地址是 0xD002_0010
?
我們再看 x210_usb.bin 和 uboot.bin 這兩個文件大小
即?x210_usb.bin 為 BL1,其小于 16KB。再看 uboot.bin 大小為 300多 KB。如果當(dāng)做BL2拷貝到 IRAM,很顯然空間不夠。所以我們實際的流程是:在 BL1 中初始化時鐘、DRAM 控制器,拷貝 BL2 到外部 DRAM,跳轉(zhuǎn)到 DRAM 中執(zhí)行 BL2,BL2 加載 OS 到 OS 的起始地址執(zhí)行 OS。
然后就有了操作?拷貝文件?uboot.bin 到地址 0x23e00000 處。
?
我們通過上面的存儲空間分配圖,可知DRAM 有兩個通道的DRAM0起始地址為0x2000_0000,DRAM1起始地址為 0x4000_0000。你怎么知道它選的是哪個?
這個要看原理圖了:
Xm1CSn0 和?Xm1CSn1 這兩根片選信號線對應(yīng)兩個 DRAM 的地址,開發(fā)板的DDR2 SDRAM的片選信號接到了?Xm1CSn0引腳,所以它的訪問地址為 0x2000_0000 開始的地址空間。
(2)安全啟動模式(第一啟動模式)的啟動過程
解析:
結(jié)合之前將的系統(tǒng)的燒寫更新,來看一下這個啟動過程。
首先啟動固化在IROM里的 BL0,它的作用:關(guān)閉看門狗、初始化icache、初始化PLL和設(shè)置系統(tǒng)時鐘 等等這些上面已經(jīng)有講了。接下來通過OM[5:0] 來判斷它的啟動模式。
我買的開發(fā)板是燒寫模式是 USB、SD卡燒寫,啟動模式為從 eMMC 啟動。
我簡單講一下燒寫更新的過程:
USB燒寫:
拷貝?x210_usb.bin 到 0xd0020010 (IRAM) ?
拷貝?uboot.bin 到地址 0x23e00000 (SDRAM,掉電丟失)
nand更新:
將 uboot.bin 先拷貝到 0x20008000(SDRAM,掉電丟失) ? 命令:?tftp 20008000 u-boot.bin ?
擦除 nand(nand的特性:要向Nand Flash中寫數(shù)據(jù)之前,必須先擦除) ? 命令:nand erase 0 200000 ?
最后將 uboot.bin從SDRAM的 0x2008000 燒寫到 nand里,命令:nand write 20008000 0 200000 ? ? ?
同理更新 內(nèi)核、根文件系統(tǒng)。
?
這里就有點意思了,先將uboot拷貝到 0x23e00000,讓開發(fā)板可以啟動進入uboot。
然后再將uboot拷貝到 0x20008000,從這個地址燒寫uboot到nand中。
我講了這么多,就是想說明 SDRAM 是內(nèi)存,它掉電丟失;nand 是硬盤,最終應(yīng)將uboot、內(nèi)核、根文件系統(tǒng)等燒寫到這里面。將其復(fù)制到內(nèi)存,最后進入系統(tǒng)。
?
所以完整的啟動順序應(yīng)該是:
1.開機啟動運行iROM(BL0)的固化代碼
這里所做的事情就可以結(jié)合上面最左邊的圖和之前說的BL0做的一些事情,然后接下來程序跳到BL1的起始地址執(zhí)行。
2.執(zhí)行BL1代碼
從圖中可以看出它的主要作用就是將BL2從啟動介質(zhì)內(nèi)復(fù)制到內(nèi)部的SRAM中,并將程序?qū)⒁\行的地址轉(zhuǎn)向BL2首地址。
3.執(zhí)行BL2代碼
BL2做的就是先初始化SDRAM/DRAM,也就是內(nèi)存,并把操作系統(tǒng)程序代碼復(fù)制到內(nèi)存中,然后程序調(diào)到內(nèi)存中繼續(xù)執(zhí)行,整個過程完成。
(3)第二啟動模式啟動流程
解析:
舉個栗子,SD/MMC/eMMC啟動時,MMC通道0分配給第一啟動模式使用,通道2分配給第二啟動模式使用。
先看下原理圖:
?
根據(jù)上圖可以看出,MMC通道0分配給第一啟動模式(iNand/eMMC)使用,通道2分配給第二啟動模式(SD卡)使用。
根據(jù)上面的啟動流程圖,iROM開始;檢查啟動模式;從第一啟動模式(iNand/eMMC)下載BL1;校驗和是否0K;成功進入BL1;失敗從第二啟動模式(SD卡)下載BL1;校驗和是否0K;成功進入BL1;失敗從UART啟動;UART啟動再失敗,從USB啟動;如果USB啟動再失敗的話,則停止啟動。
分析完以后,也就很好的解釋了,為什么通過SD燒寫時,首先要破壞iNand中的bootloader以從SD2啟動了。
三、總結(jié)
最后,還是要說一下 BL1、BL2 和 uboot 的關(guān)系。
通過USB燒寫過程分析,如果說??x210_usb.bin 為 BL1,那么它拷貝到SRAM后,下次再啟動就掉電丟失了。
所以它應(yīng)該是起到一個引導(dǎo)作用,然后可以將 uboot 拷貝到SDRAM 中。
更新的時候是將uboot燒寫到nand中,然后將uboot下載到SDRAM中,進入系統(tǒng)。
?
那么此時的 uboot 的哪部分相當(dāng)于 BL1,哪部分相當(dāng)于 BL2呢?
這個等講到 uboot 再好好研究一下。
參看:x210v3開發(fā)板u-boot-2012.10移植之補充篇---uboot啟動流程詳解
參看:uboot學(xué)習(xí)之三-----uboot啟動第一階段--start.S之一
參看:S5PV210的啟動過程
如需轉(zhuǎn)載請注明出處:https://blog.csdn.net/qq_29350001/article/details/78433564
總結(jié)
以上是生活随笔為你收集整理的S5PV210开发 -- 启动流程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle中over()分析函数的用法
- 下一篇: S5PV210开发 -- 交叉编译器