娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

[project X] tiny210(s5pv210)上電啟動流程(BL0-BL2)

發布者:電子設計探索者最新更新時間:2024-12-27 來源: cnblogs關鍵字:tiny210  s5pv210 手機看文章 掃描二維碼
隨時隨地手機看文章

零、說明

本文主要以友善之臂的tiny210板子作說明,使用的是s5pv210核心。 
主要集中于以下幾個問題: 
* 支持哪些存儲介質? 
* 上電之后的啟動流程?分成了幾個階段?具體負責什么功能? 
* 各個階段使用的存儲介質是什么?原因? 
* 各個階段的運行地址是什么? 
* 鏡像存放可能存放在幾種存儲介質中,如何判斷要從哪種存儲介質中獲取鏡像?(也就是啟動模式)

本文只介紹non secure boot的情況。也就是說不是在secure環境下,無需做簽名處理。

一、和啟動相關的硬件介紹

1、可運行存儲介質

要先理解一點,運行介質都會在CPU的地址空間上,占用地址空間的一部分。CPU可以根據尋址地址從運行介質從讀取一條指令或者一條數據,而并不是說直接在運行介質上執行。

  • IROM 
    ROM(Read Only Memory),唯讀記憶體。ROM數據不能隨意更新,但是在任何時候都可以讀取。主要用于存放一些固定的不需要修改的代碼或者數據。掉電之后,數據還可以保存。 
    IROM則是指集成于芯片內部的ROM.

  • SRAM 
    SRAM(Static Random Access Memory),即靜態隨機存取存儲器。它是一種具有靜止存取功能的內存,不需要刷新電路即能保存它內部存儲的數據。 

    • 優點,速度快,不必配合內存刷新電路,可提高整體的工作效率。初始化簡單。

    • 缺點,集成度低,掉電不能保存數據,功耗較大,相同的容量體積較大,而且價格較高,少量用于關鍵性系統以提高效率。

  • SDRAM 
    由General SDRAM and Controller進行控制。 
    SDRAM(Synchronous Dynamic Random Access Memory),同步動態隨機存儲器,同步是指內存工作需要同步時鐘,內部的命令的發送與數據的傳輸都以它為基準;動態是指存儲陣列需要不斷的刷新來保證數據不丟失;隨機是指數據不是線性依次存儲,而是自由指定地址進行數據讀寫。相對于SRAM來說,體積較小且價格偏移。

三者差異簡單歸納如下表:

可運行存儲介質掉電數據保存情況數據修改訪問速度動態刷新電路價格
ROM掉電數據保存不易修改最慢不需要最便宜
SRAM掉電數據丟失可以修改最快不需要最貴
SDRAM掉電數據丟失可以修改需要便宜

補充說明 
綜上,因為BL0是上電啟動代碼,固定不變的,所以將其固化在IROM中運行。 
因為SRAM是集成在平臺內部,BL0階段之后可以直接使用,但是size比較小。 
而SDRAM需要根據外圍DDR進行初始化,BL0之后還無法使用,需要在BL1中進行初始化之后才能使用。 
故BL1放在SRAM中運行,BL2放在SDRAM中運行。 
后續會繼續說明。

2、存儲介質

  • SD/MMC/eMMC

  • nand flash / nor flash / OneNand flash

  • eSSD

3、tiny210運行介質和存儲介質說明

首先看一下對應s5pv210平臺和存儲相關的硬件支持

  • 64KB的IROM

  • 94KB的內部SRAM

  • 通用SDRAM控制器,用于控制SDRAM 
    需要外部實現SDRAM.

  • 4/8位高速SD/MMC控制器,用于控制4-bit SD / 4-bit MMC / 4 or 8-bit eMMC 
    需要外部實現SD/MMC/eMMC

  • Nand Flash控制器,用于控制nand flash 
    需要外部實現nand flash

  • OneNand控制器,用于控制OneNand flash。 
    需要外部實現OneNand flash

  • eSSD控制器,用于控制eSSD 
    需要外部實現eSSD

  • UART/USB控制器

在s5pv210的基礎上,對應tiny210板子上有如下外圍硬件: 
* 512MB的DDR支持 
* 1GB的nand flash支持(K9K8G08U0B) 
* SD card接口支持,可以直接支持SD card

綜上,tiny210板子上有如下存儲介質:

  • 64KB的IROM

  • 94KB的內部SRAM

  • 512MB的DDR

  • 512MB的nand flash支持

  • SD card(自己插了一個4GB的SD卡)

二、s5pv210 上電啟動的幾個階段

注意:以下介紹的啟動流程和官方給的啟動流程《S5PV210-iROM-ApplicationNote-Preliminary》有所差異,是實際上我在項目中使用的啟動流程,也是比較通用的啟動流程。 
和官方文檔中比較大的差異在于,BL2在下面介紹是放在SDRAM中運行,而官方文檔《S5PV210-iROM-ApplicationNote-Preliminary》中則是放在IRAM中運行,因為編出來的uboot過大,超過了限制,所以官方文檔是不可行的。

1、BL0

運行在IROM上!!!

  • 加載說明 
    上電后啟動的第一個階段。其代碼固化在s5pv210的IROM中,也就是出廠后已經完成,無法進行修改。上電后CPU會直接從IROM上的BL0的代碼上開始執行。

  • 主要工作有:

    • 初始化系統時鐘、特殊設備的控制器、啟動設備、看門狗、堆棧、SRAM等等

    • 驗證BL1鏡像

    • 從存儲介質上(比如SDeMMCnand flash)或者通過USB加載BL1鏡像到對應內部SRAM上

    • 跳轉到BL1鏡像所在的地址上

2、BL1

運行在內部SRAM上!!!

  • 加載說明 
    上電后啟動的第二個階段。BL0階段會將其鏡像或者代碼從存儲介質上(比如SDeMMCnand flash)上加載到內部SRAM上.

  • 主要工作有: 

    • 初始化部分時鐘(和SDRAM相關)

    • 初始化DDR(外部SDRAM)

    • 從存儲介質上(比如SDeMMCnand flash)將BL2鏡像加載到SDRAM上

    • 驗證BL2鏡像的合法性

    • 跳轉到BL2鏡像所在的地址上

3、BL2

運行在外部SDRAM上!!!

  • 加載說明 
    上電后啟動的第三個階段,BL1階段會將其鏡像或者代碼從存儲介質上(比如SDeMMCnand flash)上加載到外部SDRAM上.

  • 主要功能 
    BL2就是指傳統意義上的bootloader,也就是我們這里的uboot的主體,負責flash操作、uboot命令操作等等,并且最終目標是加載OS和啟動OS,如linux。關于uboot的實現,會在后面具體分析,這里不詳細說明。

上電到BL2的流程圖如下(略過BL2的流程部分)

上電,直接執行BL0BL0(IROM)BL0(IROM):初始化系列操作BL0(IROM):加載BL1鏡像到SRAM上BL0(IROM):跳轉到BL1的地址上BL1(SRAM)BL1(SRAM):初始化SDRAMBL1(SRAM):加載BL2鏡像到SDRAM上BL1(SRAM):跳轉到BL2的地址上BL2(SDRAM)jump into OS

三、各個階段在地址空間上的運行位置

1、s5pv210地址空間

參考《S5PV210_UM_REV1.1》 2.1 MEMORY ADDRESS MAP 
s5pv210整體地址空間映射表如下:

起始地址結束地址長度映射區域描述
0x0000_00000x1FFF_FFFF512MBBoot area(取決于啟動模式)
0x2000_00000x3FFF_FFFF512MBDRAM 0
0x4000_00000x7FFF_FFFF1024MBDRAM 1
0x8000_00000x87FF_FFFF128MBSROM Bank 0
0x8800_00000x8FFF_FFFF128MBSROM Bank 1
0x9000_00000x97FF_FFFF128MBSROM Bank 2
0x9800_00000x9FFF_FFFF128MBSROM Bank 3
0xA000_00000xA7FF_FFFF128MBSROM Bank 4
0xA800_00000xAFFF_FFFF128MBSROM Bank 5
0xB000_00000xBFFF_FFFF256MBOneNAND/NAND Controller and SFR
0xC000_00000xCFFF_FFFF256MBMP3_SRAM output buffer
0xD000_00000xD000_FFFF64KBIROM
0xD001_00000xD001_FFFF64KBReserved
0xD002_00000xD003_7FFF96KBIRAM
0xD800_00000xDFFF_FFFF128MBDMZ ROM
0xE000_00000xFFFF_FFFF512MBSFR region

重點關注如下幾個地址空間:

起始地址結束地址長度映射區域描述
0x0000_00000x1FFF_FFFF512MBBoot area(取決于啟動模式)
0x2000_00000x3FFF_FFFF512MBDRAM 0
0x4000_00000x7FFF_FFFF1024MBDRAM 1
0xD000_00000xD000_FFFF64KBIROM
0xD002_00000xD003_7FFF96KBIRAM

2、BL0的運行地址

通過文檔《S5PV210-iROM-ApplicationNote-Preliminary》位于如下區域

起始地址結束地址長度映射區域描述
0x0000_00000x0000_FFFF64KBInternal ROM

s5pv210上電之后,CPU會直接從0x0地址取指令,也就是直接執行BL0。

3、BL1的運行地址

上述已經說明BL1在IRAM中運行,IRAM空間如下:

起始地址結束地址長度映射區域描述
0xD002_00000xD003_7FFF96KBIRAM

但是并不是說整個IRAM都是給BL1使用的。 
BL1使用的部分如下:

起始地址結束地址長度映射區域描述
0xD002_00000xD003_5400-BL1代碼空間

BL1鏡像最大為16KB。 
這里有一個注意事項: 
BL1是加載在0xD002_0000的位置上(不包括USB啟動的方法),并不是說BL1就是從0xD002_0000開始運行的。0xD002_0000開始的16B是用于作為BL1的header。BL1代碼的實際運行地址是0xD002_0010 
這部分header是用來給BL0驗證BL1的鏡像的有效性使用的。16B的header格式如下:

地址數據
0xD002_0000BL1鏡像包括header的長度
0xD002_0004保留,設置為0
0xD002_0008BL1鏡像除去header的校驗和
0xD002_000c保留,設置為0

當從存儲介質上加載BL1鏡像的時候(非UART/USB模式),需要校驗這個header和BL1的鏡像是否匹配,后續啟動模式中會繼續說明。

4、BL2的運行地址

上述已經知道BL2在SDRAM的地址空間中運行,SDRAM空間如下:

起始地址結束地址長度映射區域描述
0x2000_00000x3FFF_FFFF512MBDRAM 0
0x4000_00000x7FFF_FFFF1024MBDRAM 1

tiny210的ddr是512M并且使用的是DRAM0的地址空間,故BL2的運行空間是

起始地址結束地址長度映射區域描述
0x2000_00000x3FFF_FFFF512MBDRAM 0

但是在實際使用中,我把uboot加載到了ddr上0x23E0_0000(具體參考CONFIG_SYS_TEXT_BASE的定義)的地址上。

=========================================== 
綜上所述,各個階段的運行地址如下:

階段運行地址
BL00x0000_0000(固定)
BL10xD002_0010(固定)
BL20x3000_0000(可在代碼中進行修改)

四、啟動模式(如何將對應BL1加載到對應RAM上面)

在上述中,我們知道BL0負責將BL1的鏡像加載到對應的地址上。 
那么,有一個問題,BL1的鏡像可能存放在SD卡,eMMC,Nand flash等存儲介質上,也有可能是直接通過USB上寫入到對應RAM的地址上。那么,BL0如何判斷要從哪里去加載BL1的鏡像呢,這就取決于啟動模式了。

1、s5pv210支持的啟動模式

  • OneNand Boot模式 
    在這種模式下,BL0會從OneNAND的page0開始加載,先加載16B的header到0xD002_0000,通過header中的size判斷需要讀取多少page,然后再加載剩余的page到0xD002_0010上。 
    最后計算除header外的數據的校驗和,和header中的校驗和比較,一旦匹配,則跳轉到0xD002_0010。 
    因此,當我們選擇這種方式的時候,需要給BL1的鏡像加上16B的header,然后以OneNand page0位置開始存放整個鏡像。

  • Nand Boot (with H/W 8/16-Bit ECC) 
    在這種模式下,BL0會從NAND的page0開始加載,先加載16B的header到0xD002_0000,通過header中的size判斷需要讀取多少page,然后再加載剩余的page到0xD002_0010上。 
    最后計算除header外的數據的校驗和,和header中的校驗和比較,一旦匹配,則跳轉到0xD002_0010。 
    因此,當我們選擇這種方式的時候,需要給BL1的鏡像加上16B的header,然后以Nand page0位置開始存放整個鏡像。

  • SD / MMC Boot 
    在這種模式下,BL0會跳過SD的block0,從SD的block1加載,先加載block1到0xD002_0000,通過header中的size判斷需要讀取多少block,然后再加載剩余的block。 
    最后計算除header外的數據的校驗和,和header中的校驗和比較,一旦匹配,則跳轉到0xD002_0010。 
    因此,當我們選擇這種方式的時候,需要給BL1的鏡像加上16B的header,然后以block1位置開始存放整個鏡像。

  • eSSD Boot 
    在這種模式下,BL0會跳過eSSD的block0,從eSSD的block1加載,先加載block1到0xD002_0000,通過header中的size判斷需要讀取多少block,然后再加載剩余的block。 
    最后計算除header外的數據的校驗和,和header中的校驗和比較,一旦匹配,則跳轉到0xD002_0010。 
    因此,當我們選擇這種方式的時候,需要給BL1的鏡像加上16B的header,然后以block1位置開始存放整個鏡像。

  • eMMC Boot 
    在這種模式下,BL0會從eMMC的block0加載,先加載block0到0xD002_0000,通過header中的size判斷需要讀取多少block,然后再加載剩余的block。 
    最后計算除header外的數據的校驗和,和header中的校驗和比較,一旦匹配,則跳轉到0xD002_0010。 
    因此,當我們選擇這種方式的時候,需要給BL1的鏡像加上16B的header,然后以block0位置開始存放整個鏡像。

  • UART Boot 
    在這種模式下,BL0會檢測串口數據,并且將其復制到0xD002_0000開始的位置。在PC側通過DWN軟件將鏡像通過串口進行寫入。 
    因為這種模式下不需要驗證header,一旦下載完成之后,會直接跳轉到0xD002_0000進入BL1。

  • USB Boot 
    在這種模式下,BL0會檢測USB數據,并且將其復制到0xD002_0000開始的位置。在PC側通過DWN軟件將鏡像通過USB進行寫入。 
    因為這種模式下不需要驗證header,一旦下載完成之后,會直接跳轉到0xD002_0000進入BL1。

幾個模式的差異如下表格

模式硬件支持BL1鏡像存放起始位置BL1鏡像是否需要header加載位置跳轉位置
OneNand BootOneNand flashpage00xD002_00000xD002_0010
Nand BootNand flashpage00xD002_00000xD002_0010
SD / MMC BootSD / MMCblock10xD002_00000xD002_0010
eSSD BooteSSDblock10xD002_00000xD002_0010
eMMC BooteMMCblock00xD002_00000xD002_0010
UART BootUART0xD002_00000xD002_0000
USB BootUSB0xD002_00000xD002_0000

2、s5pv210選擇啟動模式的方法

s5pv210通過OM[5:0]這6個引腳的組合來選擇對應的啟動模式。 
具體查看《S5PV210-iROM-ApplicationNote-Preliminary》表格Table4. iROM OM pin description 
以下舉幾個常見的例子

啟動方式OM5OM4OM3OM2OM1OM0
SD BOOT001100
Nand 2KB 5cycle (Nand 8bit ECC)000010
Nand 4KB 5cycle (Nand 8bit ECC)000100
Nand 4KB 5cycle (default)(Nand 16bit ECC)000110
優先檢測UARTUSB模式1-----

注意,當OM5用于決定是否先進入UARTUSB模式。如果OM5為0,則直接進入OM[4:0]對應的模式中。 
如果OM5為1,則先判斷串口是否有響應(因此要進入該模式需要現在DNW軟件上打開對應UART下載功能),有響應則進入UART模式,否則,超時,檢測是否進入USB模式。 
然后判斷USB是否有相應(因此要進入該模式需要現在DNW軟件上打開對應USB下載功能),有響應則進入USB模式,否則,超時,跳轉到OM[4:0]對應的模式中。

3、tiny210支持的啟動模式

通過tiny210的原理圖《Tiny210-1305-Schematic》上看OM5OM4OM0均被拉低為0.而OM[3:1]則有撥碼開關S2和反相器來控制其組合。 
最終得到tiny210只支持如下兩種啟動方式


啟動方式OM5OM4OM3OM2OM1OM0
SD BOOT001100
Nand 4KB 5cycle (default)(Nand 16bit ECC)000110


關鍵字:tiny210  s5pv210 引用地址:[project X] tiny210(s5pv210)上電啟動流程(BL0-BL2)

上一篇:S5PV210 | 根文件系統文件詳情
下一篇:kernel 2.6.35.7向S5PV210移植

推薦閱讀最新更新時間:2025-04-23 15:31

【ARM裸機s5pv210 】舊版本交叉編譯工具鏈配置
舊版本交叉編譯工具鏈的安裝 1.cd /usr/local/ mkdir arm tar -jxvf arm-2009q3.tar.bz2 cd /usr/local/arm/arm-2009q3/bin bash mk-arm-linux-.sh sudo gedit ~/.bashrc 添加 export PATH=/usr/local/arm/arm-2009q3/bin:$PATH source ~/.bashrc 2.安裝32位庫 sudo apt-get update apt-get update sudo apt-get install lib32ncurses5-dev 3./usr/local/arm/arm
[單片機]
(七)u-boot2013.01.01 for s5pv210:《u-boot啟動流程
1.關于啟動流程 1.1 啟動階段分為3個,bl0,bl1,bl2。下面只是就功能方面對它們做說明,實際設計的時候,也許會對其具體功能做出調整,也就是說,這幾個階段的劃分是就功能而言的,不能看得太死。 bl0:出廠的時候就固化在irom中一段代碼,主要負責拷貝8kb的bl1到s5pv210的一個96kb大小內部sram(Internal SRAM)中運行。值得注意的是s5pv210的Internal SRAM支持的bl1的大小可以達到16kb,容量的擴增是為了適應bootloder變得越來復雜而做的。雖然如此,但目前我們制作出來的bl1的大小仍然可以保持在8kb以內,同樣能滿足需求。 bl1:u-boot的前8kb代
[單片機]
(七)u-boot2013.01.01 for <font color='red'>s5pv210</font>:《u-boot<font color='red'>啟動</font><font color='red'>流程</font>》
s5pv210 cpu運行debian
1.環境準備 sudo apt-get install binfmt-support qemu qemu-user-static debootstrap 2.獲取debian根文件系統 2.1.cd /opt 2.2.sudo debootstrap --foreign --arch armel wheezy wheezy_fs http://ftp.debian.org/debian/ 3.為chroot做準備 3.1.cp /usr/bin/qemu-arm-static /opt/wheezy_fs/usr/bin/ 3.2.sudo DEBIAN_FRONTEND=noninteractive DEBCONF_NONINT
[單片機]
第七章之S5PV210移植到Nandflash
1,之前的操作都是基于SD卡進行運行的,如今在Nandfalsh中運行u-boot.因為s5p_goni.h配置文件沒有配置Nand相關文件,所以先配置Nand文件. 在include/configs/s5p_goni.h中添加一個:#define CONFIG_CMD_NAND 2,根據board_init_r函數中nand_init()如下圖: 3,進行nand_init(); 4,所以配置文件還需要添加#defnie CONFIG_SYS_MAX_NAND_DEVICE 1,及其 nand基地址#define CONFIG_SYS_NAND_BASE  0xB0E00000 5,查看common/Makefi
[單片機]
第七章之<font color='red'>S5PV210</font>移植到Nandflash
S5PV210 時鐘
CLOCK DOMAINS 時鐘域 S5PV210 consists of three clock domains, namely, main system (MSYS), display system (DSYS), and peripheral system (PSYS) 時鐘源 外部焊接: 1.XRTCXTI:實時時鐘 2.XXTI:CPU時鐘 3.XUSBXTI:USB時鐘 4.XHDMIXTI:HDMI時鐘 CMU典型應用: 1.MSYS clock domain uses APLL (that is, ARMCLK, HCLK_MSYS, and PCLK_MSYS) 2.DSYS and PSYS cl
[單片機]
<font color='red'>S5PV210</font> 時鐘
S5PV210中斷的介紹與配置
一、介紹 1、三星S5PV210中斷體系介紹 異常向量表(矢量中斷控制器) 異常向量表是CPU中某些特定地址的特定定義,當中斷發生的時候,中斷要通知CPU處理中斷,在CPU設計時,定義了CPU中一些特定地址作為特定異常的入口地址,異常向量表的實現,是基于SoC內部的矢量中斷控制器。 關于矢量中斷控制器的描述,這里摘錄了網友“亦大樂諜“的博客: S5PV210是三星推出的一款基于Cortex-A8的Soc,其內部集成的中斷控制器由4個ARM PrimeCell PL192矢量中斷控制器級連(daisy-chain)而成,每個PL192 VIC(Vectored Interrupt Controller)支持32個中斷源,所以
[單片機]
<font color='red'>S5PV210</font>中斷的介紹與配置
arm體系結構
計算機的體系結構 cpu: 是一個芯片,是計算機的核心單元,主要是運算(ALU:算術邏輯單元),控制功能 存儲器: 內存:內存條。特點是速度快,隨時修改,隨時讀取,掉電后所有數據丟失 SRAM :靜態隨機訪問存儲 cpu中cache(緩存)就是這種類型,在51單片機的內存是這種類型2kB,4 kB,體積大,價格高,沒有作為大容量的存儲設備,它的存取的速度比DDR快 s5pv210這個芯片中也存在96KB的sram存儲 s5pv210這個芯片:cpu+其他控制單元+存儲單元 = SOC (system on chip) SDR : 異步動態存儲器。不斷刷新,對這個電容充電 一個時鐘只能訪問一個數據 DDR2 : 雙時鐘動態存儲器。一
[單片機]
devicemaps_init
devicemaps_init:   1.設置向量表映射:向boot_mem申請1page得到vectors=c0c3e000,映射的虛擬地址ffff0000,映射一個page,        映射過程是先向boot_mem申請1page用于存儲pte,這里一共1024個項512用于mmu(可映射2MB)另外512Linux維護   2.調用mdesc- map_io() (soc層操作操作函數)將物理IO映射到虛擬地址,設置了時鐘,gpio等        smdkc110_map_io: arch/arm/mach-s5pv210/mach-x210          s5p_init_io: 位于arch/arm/pla
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 临沧市| 项城市| 平度市| 丹东市| 弥勒县| 滦平县| 长岭县| 百色市| 志丹县| 龙山县| 灵丘县| 丹巴县| 湟源县| 咸丰县| 尉氏县| 巨鹿县| 沾化县| 崇左市| 呼玛县| 裕民县| 淮滨县| 五大连池市| 安宁市| 东至县| 富川| 石家庄市| 麻城市| 如皋市| 山东省| 鄂尔多斯市| 穆棱市| 阿荣旗| 乡宁县| 宁陵县| 尖扎县| 济源市| 汽车| 阿城市| 观塘区| 军事| 南木林县|