<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          萬事開頭難 - 介紹IMX6ULL啟動方式

          共 3975字,需瀏覽 8分鐘

           ·

          2020-09-12 02:02

          不同開發(fā)板,啟動方式不一樣,今天我們來介紹imx6ull開發(fā)板的啟動方式,這非常重要。若不了解清楚啟動方式,后面的所有開發(fā)工作便無從談起。

          本文摘自100ask_imx6ull 開發(fā)板 配套學(xué)習(xí)手冊-《嵌入式Linux應(yīng)用開發(fā)完全手冊_韋東山全系列視頻文檔全集V2.5》.pdf

          1.1 IMX6ULL 啟動方式

          參考資料:

          開發(fā)板資料網(wǎng)盤?

          路徑:

          06_Datasheet(數(shù)據(jù)手冊)

          -> Core_board->CPU->IMX6ULLRM.pdf”

          中《Chapter 8: System Boot》。

          網(wǎng)盤地址:

          100ASK_IMX6ULL

          鏈接:

          https://eyun.baidu.com/s/3smDzFAH
          密碼:LDCn

          1.1.1芯片手冊講解

          IMX6ULL芯片內(nèi)部有一個(gè)boot ROM,上電后boot ROM上的程序就會運(yùn)行。它會根據(jù)BOOT_MODE[1:0]的值,以及eFUSE或GPIO的值決定后續(xù)的啟動流程。

          注:eFUSE即熔絲,只能燒寫一次,一般正式發(fā)布產(chǎn)品時(shí)燒寫最終值;平時(shí)調(diào)試時(shí)通過GPIO來設(shè)置開發(fā)板的啟動方式。

          boot ROM上的程序功能強(qiáng)大,可以從USB口或串口下載程序并把它燒寫到Flash等設(shè)備上,也可以從SD卡或EMMC、Flash等設(shè)備上讀出程序、運(yùn)行程序。

          問題來了:

          ① boot ROM是從USB口下載、運(yùn)行程序,還是從SD卡等設(shè)備上讀出、運(yùn)行程序,這由誰決定?

          由BOOT_MODE[1:0]的值來決定啟動方式,它們來自于2個(gè)引腳BOOT_MODE1、BOOT_MODE0。這2個(gè)引腳在上電時(shí)是輸入引腳,芯片啟動后采集這2個(gè)引腳的值,存入BOOT_MODE寄存器。以后這2個(gè)引腳就可以用于其他功能,不會影響到BOOT_MODE寄存器。

          BOOT_MODE[1:0]的值確定了4種啟動模式,如下圖:

          BOOT_MODE

          在100ASK_IMX6ULL中,這2個(gè)引腳對應(yīng)的原理圖如下:

          原理圖

          00模式,?在我們的開發(fā)過程中很少用到,簡單介紹一下:在這種模式下,GPIO的值被忽略。Boot ROM會根據(jù)eFUSE的值來選擇啟動設(shè)備、設(shè)置啟動設(shè)備。但是,對于剛出廠的芯片eFUSE值可能是錯(cuò)亂的、不適合你的設(shè)備的,怎么辦?eFUSE中有一個(gè)值BT_FUSE_SEL,它的出廠值是0,表示eFUSE未被燒寫。

          boot ROM程序發(fā)現(xiàn)BT_FUSE_SEL為0時(shí),它會通過USB或串口來下載程序;發(fā)現(xiàn)BT_FUSE_SEL為1時(shí),才會根據(jù)eFUSE的值選擇啟動設(shè)備,讀出、運(yùn)行該設(shè)備上的程序。

          01模式,boot ROM程序通過USB或串口下載、運(yùn)行程序,這個(gè)模式可以用來燒寫EMMC等設(shè)備。我們的開發(fā)板出廠時(shí),就是通過這個(gè)模式下載、燒寫出廠程序的。

          10模式,稱之為內(nèi)部模式,簡單地說就是從SD卡、EMMC等設(shè)備啟動程序。這就引入下面第2個(gè)問題。

          ② 如何選擇啟動設(shè)備?

          00模式下是通過eFUSE的值選擇啟動設(shè)備,我們不關(guān)心。

          10模式下既可以通過eFUSE的值也可以通過GPIO的值來選擇啟動設(shè)備,但是到底通過誰來決定?eFUSE中有一個(gè)值BT_FUSE_SEL,對,又是它。它的初始值為0,表示eFUSE未被燒寫。

          在10模式下,當(dāng)BT_FUSE_SEL為0時(shí)就會通過GPIO來選擇啟動設(shè)備;當(dāng)BT_FUSE_SEL為1時(shí)就會通過eFUSE來選擇啟動設(shè)備。

          在開發(fā)階段,我們使用GPIO來選擇設(shè)備,這就引入下面第3個(gè)問題。

          ③ 如何通過eFUSE或GPIO選擇、設(shè)置啟動設(shè)備?

          通過eFUSE或GPIO不僅能選擇啟動設(shè)備,還可以設(shè)置啟動設(shè)備。為什么還需要設(shè)置?比如Nand Flash參數(shù)各有不同,有些的頁大小是2048,有些是4096。這些參數(shù)不同,boot ROM程序讀Nand Flash的方法就不同,我們必須把這些參數(shù)告訴boot ROM:通過eFUSE或GPIO來標(biāo)明這些參數(shù)。

          首先看看要設(shè)置哪些eFUSE或GPIO來選擇不同的啟動設(shè)備。

          BOOT_CFG1設(shè)置

          從上圖可知,既可以使用eFUSE也可以使用GPIO來選擇啟動設(shè)備,換句話說GPIO可以覆蓋eFUSE的值。

          哪些GPIO覆蓋哪些eFUSE?

          這可以查看IMX6ULL芯片手冊《Chapter 8: System Boot》里的《GPIO boot overrides》,我們把它摘出來放在1.1.3小節(jié)里。

          選擇啟動設(shè)備后,還需要標(biāo)明一些參數(shù)。比如選擇EMMC啟動時(shí),EMMC接在哪一個(gè)接口,eSDHC1還是eSDHC2?它的速度如何?比如選擇TF卡啟動時(shí),TF卡接在哪一個(gè)接口,eSDHC1還是eSDHC2?它的速度如何?

          假設(shè)使用EMMC啟動,或是TF卡啟動,怎么設(shè)置eFUSE或GPIO?這些信息可以查詢IMX6ULL芯片手冊《Chapter 5: ?Fusemap》,摘錄如下。

          Fusemap

          當(dāng)BOOT_MODE設(shè)置為0b00時(shí),通過eFUSE選擇啟動設(shè)備,通過eFUSE獲得設(shè)備的參數(shù)。

          當(dāng)BOOT_MODE設(shè)置為0b10時(shí),通過eFUSE或GPIO來選擇啟動設(shè)備,獲得設(shè)備的參數(shù);使用eFUSE還是GPIO由eFUSE中的BT_FUSE_SEL決定,它默認(rèn)是0,表示使用GPIO。

          以BOOT_MODE為0b10為例,解析一下上圖。要設(shè)置為SD卡、TF卡啟動,有2個(gè)設(shè)置方法:

          a. 設(shè)置eFUSE的BOOT_CFG1[7:5]為0b010,

          或 b. 查看《3.1.3 GPIO boot overrides》確定BOOT_CFG1[7:5]對應(yīng)的GPIO為LCD1_DATA07~05,把這3個(gè)引腳設(shè)置為0b010。

          根據(jù)SD卡、TF卡的性能,可以設(shè)置eFUSE或GPIO來表示它能否提供更高的速度:

          a. 設(shè)置eFUSE的BOOT_CFG1[4:0],

          或 b. 查看《3.1.3 GPIO boot overrides》確定BOOT_CFG1[4:0]對應(yīng)的GPIO為LCD1_DATA04~00,設(shè)置這些引腳。

          IMX6ULL有兩個(gè)SD卡、TF卡接口,使用哪一個(gè)接口?請看下表:

          a. 設(shè)置eFUSE的BOOT_CFG2[4:3]可以確定使用eSDHC1或eSDHC2,

          或 b. 查看《3.1.3 GPIO boot overrides》確定BOOT_CFG2[4:3]對應(yīng)的GPIO為LCD1_DATA12~11,設(shè)置這些引腳

          BOOT_CFG


          通過eFUSE或GPIO,還可以標(biāo)明啟動設(shè)備的更多參數(shù),具體細(xì)節(jié)可以參考芯片手冊《Chapter 5: ?Fusemap》,作為硬件開發(fā)人員需要去細(xì)細(xì)研究;作為軟件開發(fā)人員,實(shí)際上只需要看開發(fā)板手冊知道怎么設(shè)置啟動開關(guān)即可。

          1.1.2 IMX6ULL啟動方式選擇

          100ASK_IMX6ULL開發(fā)板上的紅色撥碼開關(guān)用來設(shè)置啟動方式、選擇啟動設(shè)備,支持這3種方式:EMMC啟動、SD卡啟動、USB燒寫。

          板子背后畫有一個(gè)表格,表示這3種方式如何設(shè)置。

          表格如下:

          表格

          拔碼開關(guān)中的SW3、SW4用來設(shè)置BOOT_MODE,ON表示0,OFF表示1。

          所以當(dāng)SW3、SW4設(shè)置為ON、OFF時(shí),BOOT_MODE為0b10,將會使用SD卡、TF卡、EMMC等設(shè)備啟動。

          剛出廠的開發(fā)板中BT_FUSE_SEL默認(rèn)為0,表示使用GPIO來設(shè)置參數(shù)。即使用LCD1_DATA07~05來選擇啟動設(shè)備。

          100ASK_IMX6ULL開發(fā)板只支持SD/TF卡、EMMC啟動,LCD1_DATA07~05為0b010時(shí)選擇SD/TF卡啟動,LCD1_DATA07~05為0b011時(shí)選擇EMMC啟動。

          這兩種啟動設(shè)備對應(yīng)的LCD1_DATA07~06的值相同,都是0b01,這在核心板上已經(jīng)通過電阻設(shè)置好,我們只需要在撥碼開關(guān)上設(shè)置SW1(對應(yīng)LCD1_DATA05)就可以。

          IMX6ULL上有2個(gè)EMMC Flash接口,也復(fù)用為2個(gè)SD/TF卡接口,通過LCD1_DATA12~11來選擇接口。

          0b00對應(yīng)eSDHC1接口,0b01對應(yīng)eSDHC2接口。LCD1_DATA12的值在核心板上已經(jīng)通過電阻設(shè)置好。

          LCD1_DATA11的值通過撥碼開關(guān)SW2來設(shè)置:ON表示0,對應(yīng)eSDHC1接口,100ASK_IMX6ULL的TF卡接口使用了eSDHC1接口;OFF表示1,對應(yīng)eSDHC2接口,100ASK_IMX6ULL的EMMC接口使用了eSDHC2接口。

          這3種啟動方式的設(shè)置示意圖如下:

          要注意的是,設(shè)置為USB啟動時(shí),不能插上SD卡、TF卡。剛出廠的板子在EMMC上燒寫了系統(tǒng),你可以設(shè)置為EMMC啟動方式。

          1.1.3 GPIO boot overrides

          IMX6ULL中既可以通過eFUSE也可以通過GPIO來選擇、設(shè)置啟動設(shè)備,在手冊里大部分場合只列出了eFUSE,對應(yīng)的GPIO需要查表:IMX6ULL芯片手冊《Chapter 8: System Boot》里的《GPIO boot overrides》。

          我們把它摘錄出來。

          總結(jié)

          整篇讀下來,概念有點(diǎn)多,你可能會感覺有點(diǎn)抽象,其實(shí)現(xiàn)在不理解啟動方式原理沒關(guān)系,現(xiàn)在只要記住《3種啟動方式的設(shè)置示意圖》即可,清楚怎么撥碼對應(yīng)什么啟動方式,原理留到后期再研究也行。

          精品推薦

          文中提到的100ask_imx6ull,是用來學(xué)習(xí)嵌入式Linux的不錯(cuò)選擇,0利潤,外設(shè)豐富,一千多頁文檔,一百多講視頻,開源共享,如有興趣,可以手淘掃碼了解開發(fā)板的更多參數(shù):


          瀏覽 67
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本黄色电影免费在线播放 | 美女被肏视频网站 | 欧美亚洲一级黄片 | 亚洲成人黄色网址 | 五月婷婷在线视频 |