吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

System Boot啟動(dòng)的分析

汽車電子技術(shù) ? 來源:程序猿搬磚 ? 作者:程序猿搬磚 ? 2023-03-02 16:29 ? 次閱讀

Boot Mode

I.MX6ULL使用BOOT_MODE[1:0]兩個(gè)寄存器來確定通電或者復(fù)位時(shí)的啟動(dòng)方式,下面這個(gè)表格列舉了具體的四種啟動(dòng)方式:

圖片Boot From Fuses: 從熔絲引導(dǎo)啟動(dòng),這個(gè)啟動(dòng)與Internal Boot模式很像,但這種方式對(duì)于GPIO配置的啟動(dòng)參數(shù)無效,需要使用eFuses專用的配置進(jìn)行引導(dǎo)。它的配置只能修改一次,后面就不能再修改了,所以這種方式基本不用。

Serial Downloader: 通過USB或者UART下載一個(gè)鏡像引導(dǎo)程序到內(nèi)部的RAM中啟動(dòng)。

Internal Boot: 從內(nèi)部boot code啟動(dòng)。boot code是固定在SOC上面的一段代碼,boot code還會(huì)對(duì)硬件進(jìn)行初始化(如果初始化系統(tǒng)時(shí)鐘頻率)。根據(jù)BOOT_CFG的配置選擇從啟動(dòng)設(shè)備進(jìn)行啟動(dòng),跳轉(zhuǎn)到指定的鏡像文件地址開始執(zhí)行。如果在啟動(dòng)過程中遇到了錯(cuò)誤,則會(huì)從Serial Downloader進(jìn)行啟動(dòng)。

開發(fā)板開關(guān)電路圖分析

下面這張圖展示了開發(fā)板上面連接的具體引腳圖片以BOOT_MODE0為例,管腳芯片內(nèi)部接了一個(gè)100K的下拉電阻,默認(rèn)狀態(tài)是低電平(值0),當(dāng)把開關(guān)撥到ON后電源接通,引腳通過一個(gè)10K的電阻接到了一個(gè)3.3V的電源,通過計(jì)算可得到引腳上分到了3V的電壓為高電平,則引用值是1。

Internal Boot 配置

I.MX6ULL提供BOOT_MODE[1:0]與其它的24根LCD引腳共通組成了復(fù)雜的啟動(dòng)配置選項(xiàng),但是在使用時(shí)能用到的只有其中少部分,其它大部分都是默認(rèn)下拉接地(即值是0)不需要額外配置,如下圖:圖片其中BT_CFG4全部下拉接地了,這一組就忽略它。下面這張圖給出了BT_CFG1BT_CFG2的配置與其功能:圖片

BT_CFG2[4:3]: I.MX6ULL支持兩個(gè)SD/eMMC,00是SD1/eMMC1,01是SD2/eMMC2。10與11是保留未使用,可見實(shí)際起作用的是BT_CFG2[3]這個(gè)引用的值決定了從哪一張SD卡啟動(dòng)。BT_CFG2[3]對(duì)應(yīng)了I.MX6ULL手冊(cè)中的LCD_DATA11引用。I.MX6ULL開發(fā)板上面0用于外接SDK卡,1用于板載的eMMC。

BOOT_CFG1[3]: 當(dāng)從 SD/EMMC 啟動(dòng)的時(shí)候設(shè)置啟動(dòng)速度,當(dāng)從 NAND 啟動(dòng)的話設(shè)置 NAND 數(shù)量。圖片

BOOT_CFG1[7:4]的配置如下圖:圖片圖中某些位是用x來表示的,即這個(gè)位不管是0還是1都是同等的啟動(dòng)效果。

更完整的詳解表格如下圖:圖片

實(shí)例啟動(dòng)配置表:

啟動(dòng)方式 BOOT_MODE0 BOOT_MODE1 BOOT_CFG2[3] BOOT_CFG1[3] BOOT_CFG1[7:4]
USB 0 1 0 0 0000
SD 1 0 0 0 010x
eMMC 1 0 1 0 011x
NAND 1 0 0 0 100x

通過以上的配置可將指定具體的啟動(dòng)設(shè)備,如果了啟動(dòng)設(shè)備之后,boot code會(huì)從指定設(shè)備中讀取鏡像文件來執(zhí)行。

鏡像文件分析

I.MX6ULL使用的是小端模式,手冊(cè)中使用大端模式的地方會(huì)特意說明。

通過對(duì)LED驅(qū)動(dòng)實(shí)現(xiàn)最終燒寫的load.mix文件得到如下圖表:圖片

IVT(Image Vector Table)

圖片上面這個(gè)表格詳細(xì)的描述了IVT+BOOT DATA+DCD在不同啟動(dòng)設(shè)備中的固定位置(相對(duì)設(shè)備起始地址的偏移量)以及從起始地址開始可用的初始化加載范圍,SD/eMMC啟動(dòng)模式偏移量為1KB,整個(gè)初始化加載范圍是4KB,則IVT+BOOT DATA+DCD可使用的范圍是3KB。

圖片

  • header: 描述了整個(gè)IVT
Tag Length Version
0xD1 0x0020(32) 0x40
  • entry: 0x87800000,bin文件第一條指令地址,這個(gè)地址是在DDR中的地址。
  • boot data: 0x877FF420,相對(duì)于IVT的起始地址: 0x877FF400偏移了32個(gè)字節(jié)。
  • dcd: 0x877FF42C,即dcd的數(shù)據(jù)在DDR中的地址。entry的地址是0x87800000,那可以計(jì)算(減去3KB: 0xC00)得到IVT的起始地址是: 0x877FF400。dcd的起始地址相對(duì)于IVT起始地址偏移了44個(gè)字節(jié)(ivt+boot data結(jié)構(gòu),即: 0x2C), IVT的地址加上0x2C得到dcd的地址是: 0x877FF42C。
BOOT DATA
  • start: 描述了整個(gè)load.mix(燒寫到SD卡中的文件)的起始地址(在DDR中),包括了偏移的1KB,entry地址(鏈接起始地址)為:0x87800000 - 0x1000(4KB) = 0x877FF000。
  • length: 描述了整個(gè)load.mix的大小,在燒寫的時(shí)候?qū)懭氲氖?x00200000,即2MB大小,整個(gè)鏡像文件的大小不能超過2MB。
  • plugin: 0x00000000,沒有插件設(shè)置成0
DCD(Device Configuration Data)

DCD數(shù)據(jù)的作用則是在boot code啟動(dòng)加載的時(shí)候?qū)θO(shè)備進(jìn)行配置以及檢查,通過配置寄存器的寫入數(shù)據(jù)可快速高效的實(shí)現(xiàn)寄存器或者DDR的初始化。

  • header: 頭部結(jié)構(gòu)描述了整個(gè)DCD的長度
Tag Length Version
0xD2 0x01E8(488) 0x40
  • Write Data Command: 對(duì)指定寄存器進(jìn)行數(shù)據(jù)寫入操作 每一個(gè)Command的都有一個(gè)頭部,描述了這個(gè)Command需要執(zhí)行的指令長度, Parameter的第0、1、2三位描述了指定目標(biāo)的長度,0x04(100)表示指令目標(biāo)(指令對(duì)應(yīng)的Value)的長度是4字節(jié)。Length描述了整個(gè)Command有484個(gè)字節(jié)的指令數(shù)量,包含了頭信息,那實(shí)際操作的指令是: (484 - 4) / 8 = 60,即當(dāng)前Command有60條寫寄存器數(shù)據(jù)的操作指令。
Tag Length Parameter
0xCC 0x01E4(484) 0x04

除了Write Data Command還有Check data commandNOP command以及Unlock command指令塊。

boot code根據(jù)啟動(dòng)設(shè)備的不同從固定的地址開始加載鏡像文件之后并對(duì)鏡像文件進(jìn)行解析,通過IVT中的地址將數(shù)據(jù)拷貝到DDR中指定的地址,讀取DCD初始化硬件(比如DDR)之后,開始執(zhí)行bin文件0x87800000的第一條指令。這樣就實(shí)現(xiàn)了從SD/eMMC/NAND等設(shè)備的啟動(dòng)了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5363

    瀏覽量

    121196
  • 啟動(dòng)
    +關(guān)注

    關(guān)注

    0

    文章

    27

    瀏覽量

    13952
  • 復(fù)位
    +關(guān)注

    關(guān)注

    0

    文章

    174

    瀏覽量

    24270
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    u-boot啟動(dòng)流程分析

    今天給大家全面的分析一下u-boot啟動(dòng)流程。整理這篇文章花費(fèi)時(shí)間較長,中間很長時(shí)間未更新,希望這篇文章對(duì)大家有所幫助。
    發(fā)表于 07-12 15:16 ?890次閱讀
    u-<b class='flag-5'>boot</b><b class='flag-5'>啟動(dòng)</b>流程<b class='flag-5'>分析</b>

    U-BOOT啟動(dòng)流程分享

    Bootloader移植(下)U-BOOT 啟動(dòng)流程u-boot啟動(dòng)三個(gè)2啟動(dòng)步驟(重點(diǎn))U-boot
    發(fā)表于 01-18 10:17

    基于S3C44B0的U-Boot啟動(dòng)分析和移植實(shí)現(xiàn)

    U-Boot 是sourceforge網(wǎng)站上的一個(gè)開源項(xiàng)目,是當(dāng)今比較流行、功能強(qiáng)大的BootLoader,能支持多種體系結(jié)構(gòu)。本文在闡述U-Boot啟動(dòng)過程之后,對(duì)其在S3C44B0上移植過程中的要點(diǎn)加以
    發(fā)表于 08-27 09:08 ?37次下載

    U-Boot啟動(dòng)及移植分析

    bootloader 開發(fā)是嵌入式系統(tǒng)必不可少而且十分重要的部分,U-Boot 為功能強(qiáng)大的bootloader 開發(fā)軟件。本文詳細(xì)分析了U-Boot啟動(dòng)流程,并結(jié)合其源碼,闡述了
    發(fā)表于 09-01 16:34 ?27次下載

    Porting U-Boot to the Control

    in details. As the development of the embedded system, the U-Boot is getting more andmore useful of the boot load
    發(fā)表于 01-25 15:45 ?13次下載

    適于OMAP的多級(jí)啟動(dòng)Boot Loader

    通過對(duì)OMAP啟動(dòng)方式的分析,針對(duì)OMAP需要從外部Flash啟動(dòng)、耗時(shí)大、風(fēng)險(xiǎn)高的缺點(diǎn),提出了一種多級(jí)啟動(dòng)Boot Loader設(shè)計(jì)方案
    發(fā)表于 10-25 17:04 ?0次下載

    STM32F09x不使用BOOT腳實(shí)現(xiàn)System Bootlo

    STM32F09x不使用BOOT腳實(shí)現(xiàn)System Bootloader升級(jí)代碼
    發(fā)表于 12-07 18:17 ?0次下載

    適于OMAP多級(jí)啟動(dòng)Boot Loader

    適于OMAP多級(jí)啟動(dòng)Boot Loader
    發(fā)表于 10-27 10:21 ?5次下載
    適于OMAP多級(jí)<b class='flag-5'>啟動(dòng)</b><b class='flag-5'>Boot</b> Loader

    Linux0.11-引導(dǎo)啟動(dòng)程序(boot

    址0x90000(576KB)處,并把啟動(dòng)設(shè)備中后 2kB字節(jié)代碼(boot/setup.s)讀入到內(nèi)存0x90200處,而內(nèi)核的其它部分(system 模塊)則被讀入到從地址0x10000開始處,因?yàn)楫?dāng)時(shí)
    發(fā)表于 05-15 14:40 ?1336次閱讀
    Linux0.11-引導(dǎo)<b class='flag-5'>啟動(dòng)</b>程序(<b class='flag-5'>boot</b>)

    HAB boot啟動(dòng)流程與實(shí)現(xiàn)步驟

    在《深扒HAB boot 啟動(dòng)安全性》中,小編介紹了HAB boot啟動(dòng)流程(如圖1所示),其中的1、2、3驗(yàn)證步驟本質(zhì)上就是驗(yàn)簽過程。
    的頭像 發(fā)表于 08-12 09:39 ?1604次閱讀

    聊一聊汽車控制器的啟動(dòng)——BOOT

    你有沒有遇到過電腦新安裝了軟件,然后提示你Reboot的場(chǎng)景?這里的Reboot,大家都知道是重啟,而Boot就是啟動(dòng)的意思。但你有沒有想過為什么電腦啟動(dòng)會(huì)叫做Boot?
    的頭像 發(fā)表于 02-03 17:34 ?2606次閱讀

    Spring Boot啟動(dòng) Eureka流程

    在上篇中已經(jīng)說過了 Eureka-Server 本質(zhì)上是一個(gè) web 應(yīng)用的項(xiàng)目,今天就來看看 Spring Boot 是怎么啟動(dòng) Eureka 的。 Spring Boot 啟動(dòng) E
    的頭像 發(fā)表于 10-10 11:40 ?930次閱讀
    Spring <b class='flag-5'>Boot</b><b class='flag-5'>啟動(dòng)</b> Eureka流程

    Spring Boot啟動(dòng)原理

    來指定依賴,才能夠運(yùn)行。我們今天就來分析講解一下 Spring Boot啟動(dòng)原理。 1. Spring Boot 打包插件 Spring Boo
    的頭像 發(fā)表于 10-13 11:44 ?688次閱讀
    Spring <b class='flag-5'>Boot</b>的<b class='flag-5'>啟動(dòng)</b>原理

    安全啟動(dòng)Secure Boot流程

    安全啟動(dòng)-Secure Boot 除了NSPE和SPE兩個(gè)環(huán)境的溝通流程之外,secure boot也是Trusted Firmware很重要的設(shè)計(jì)環(huán)節(jié)。 Secure boot最主要
    的頭像 發(fā)表于 11-02 16:45 ?1483次閱讀
    安全<b class='flag-5'>啟動(dòng)</b>Secure <b class='flag-5'>Boot</b>流程

    單片機(jī)boot0和boot1怎么設(shè)置

    單片機(jī)Boot0和Boot1簡(jiǎn)介 Boot0和Boot1是單片機(jī)啟動(dòng)模式選擇引腳,用于選擇單片機(jī)的啟動(dòng)
    的頭像 發(fā)表于 08-22 09:50 ?3055次閱讀
    连平县| 易胜博百家乐官网作弊| 百家乐玩揽法的论坛| 百家乐筹码方形筹码| 太阳城百家乐公司| 百家乐有无技巧| 百家乐tt娱乐场开户注册| 百家乐美国玩法| 跨国际百家乐的玩法技巧和规则| 澳门百家乐赌场文| 大发888体育网| 百家乐事一箩筐的微博| 百家乐园qq群| 大发888在线服务| bet365怎么上不去| 农安县| 百家乐官网游戏机说明书| 皇冠信用网| 莒南县| 六合彩官网| 百家乐官网太阳城球讯网| 百家乐官网赌场占多大概率| 百家乐官网博娱乐赌百家乐官网的玩法技巧和规则 | 百家乐视频打麻将| 百家乐分析网| 乐天堂百家乐娱乐平台| 大发888 dafa888 gzsums| 大发888娱乐游戏平台| 澳门赌场老板| 广州百家乐官网筹码| 百家乐翻天粤| 大发888官网授权网| 百家乐官网游戏机子| 万龙百家乐官网的玩法技巧和规则| 什么事百家乐官网的路单| 百家乐最好的玩法| 路劲太阳城业主论坛| 百家乐官网娱乐城会员| 蓝盾百家乐官网洗码| 百家乐视频二人麻将| 91百家乐的玩法技巧和规则|