国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

查看: 1150|回復(fù): 0
打印 上一主題 下一主題

迅為i.MX6ULL開發(fā)板啟動方式和鏡像文件格式

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2020-6-10 10:09:28 | 只看該作者 |只看大圖 回帖獎勵 |倒序?yàn)g覽 |閱讀模式
L i.MX6ULL 啟動方式 啟動方式
I.MX6ULL 支持多種啟動方式,可以從 EMMCSD 卡、NAND FLASHUSBQSPI 等設(shè)備啟動。通過查看《IMX6ULL 參考手冊.pdf》手冊的第 8 System Boot,可我們可以了解到 i.MX6ULL 在上電以后,芯片 ROM里面固化的程序會根據(jù) BOOT_MODE[1:0]寄存器的值來選擇啟動方式。
BOOT_MODE[1:0]寄存器的值有兩種方式可以修改:一種是采用 eFuses(熔絲)的方式;另一種是是通過設(shè)置 BOOT_MODE[1:0]對應(yīng)的 GPIO 的狀態(tài)。我們在平常使用的時候基本都是采用設(shè)置 BOOT_MODE[1:0]對應(yīng)的 GPIO 狀態(tài)來選擇啟動方式的。
BOOT_MODE[1:0]對應(yīng)的 GPIO 引腳是 BOOT_MODE1 BOOT_MODE0,如下圖所示:
BOOT_MODE1 BOOT_MODE0 這兩個引腳在芯片內(nèi)部默認(rèn)有 100K 的下拉,所以這兩個引腳在懸空狀態(tài)下默認(rèn)是低電平(0)。我們把這兩個引腳引到了底板上,并連接到了撥碼開關(guān)上,撥碼開關(guān)對應(yīng)的另一端通過 10K 電阻接到了 3.3V 電源上,這樣我們可以通過撥碼開關(guān)來設(shè)置這兩個 IO 的狀態(tài)了(高電平或低電平)。如下圖所示:
從上面的截圖我們,可以看到如果我們要設(shè)置 BOOT1 BOOT0 為高電平我們需要將對應(yīng)的撥碼開關(guān)設(shè)置到“ON”位置,這樣就通過 10K 電阻上拉到 3.3V,芯片內(nèi)部有 100K 的下拉,所以此時這兩個 IO 的電平是:100/(10+100)*3.3V=3V,屬于高電平。
從參考手冊我們看到 BOOT_MODE[1:0]兩個 IO 可以設(shè)置四種狀態(tài),對應(yīng)著四種啟動方式,如下圖所示:
從上圖可以看到 BOOT_MODE[1:0]:設(shè)置為 00 的時候從 Fuses 啟動,設(shè)置為 01 的時候串行下載,設(shè)置為 10 的時候內(nèi)部 Boot 模式,設(shè)置為 11 作為保留使用。我們用到的是“串行下載”和“內(nèi)部 Boot”模式這兩種。
首先我們來看下“串行下載”,它是指可以通過 USB 接口(板子的 OTG1 接口)將代碼下載到板子上然后運(yùn)行。通過此方式我們可以實(shí)現(xiàn)開發(fā)板鏡像的燒寫(我們將在后面章節(jié)介紹具體的燒寫方法)。
然后我們看下“內(nèi)部 Boot 模式”,它是指在此種模式下,芯片會執(zhí)行內(nèi)部 ROM 里面固化的 boot 程序。這段程序會進(jìn)行硬件的初始化,然后從 Boot 設(shè)備(EMMCSD 卡、NAND FLASH)中讀取出鏡像到內(nèi)存中。如果在“內(nèi)部 Boot 模式”運(yùn)行過程中發(fā)生錯誤,則會進(jìn)入“串行下載模式”。
當(dāng) BOOT_MODE 設(shè)置為“內(nèi)部 Boot 模式”后,i.MX6ULL 可以從 SPIEIMNORSDMMCQSPI 等設(shè)備啟動,同時也可以配置相應(yīng)的參數(shù)(例如 SD 總線寬度,速度等等)。啟動設(shè)備和對應(yīng)的參數(shù)我們可以使用 eFUSEs 的方式設(shè)置,也可以通過 GPIO 來配置(我們主要使用 GPIO 的方式)。下面我們來看一下如何通過 GPIO 設(shè)置啟動設(shè)備。
從參考手冊我們可以看到啟動設(shè)備主要通過三組 IO 來設(shè)置,他們分別是 BOOT_CFG1[7:0]
BOOT_CFG2[7:0]BOOT_CFG4[7:0]這三組 IO。如下圖所示:
從上圖我們可以看到這三組決定啟動設(shè)備的 IO 正好用到的 RGB 24 根數(shù)據(jù) IO,在 i.MX6ULL 芯片剛開始上電的時候這 24 IO 先作為“選擇啟動設(shè)備”的功能來使用,在 ROM 中的固化程序把啟動鏡像從啟動設(shè)備加載到內(nèi)存,并開始從啟動鏡像(Uboot)開始運(yùn)行的時候,這 24 IO 就可以當(dāng)做 RGB 來使用了。
現(xiàn)在我們來總結(jié)一下,i.MX6ULL 啟動流程:首先根據(jù) BOOT_MODE 的兩個 IOBOOT_MODE1BOOT_MODE0)先確定啟動方式,如果是串行下載模式,就會進(jìn)入 USB 啟動模式。如果是“內(nèi)部 Boot”啟動方式,然后就根據(jù) BOOT_CFG1BOOT_CFG2BOOT_CFG4 這三組 IO 的配置來決定從哪種設(shè)備啟動(讀取啟動鏡像到內(nèi)存,并開始啟動)。
接下來我們看下 BOOT_CFG1BOOT_CFG2BOOT_CFG4 這三組 IO 是怎么配置啟動方式的,在我們的底板原理圖上有如下圖表:
上圖中最左側(cè)一列是支持的啟動設(shè)備,后面的每一列分別對應(yīng) BOOT_CFG IO,我們可以看到?jīng)Q定啟動方式的是由 BOOT_CFG1 BOOT_CFG2 這兩組 IO 決定。打擊愛也許覺得這么多 IO 需要配置,操作起來太麻煩了,實(shí)際上這些 IO 中大部分都是默認(rèn)下拉的,需要配置的只有 6 個,從我們的原理圖可以看到(因?yàn)槲覀冇昧艘粋 8 位的撥碼開關(guān),其中有兩位是 BOOT_MOD 的),如下圖所示:
從上面的原理圖我們可以看到 8 位的撥碼開關(guān)一端上拉到 3.3V,另一端分別接到了 BOOT_MODE1BOOT_MODE0BOOTCFG2[3]BOOTCFG1[3]BOOTCFG1[4]BOOTCFG1[5]BOOTCFG1[6]BOOTCFG1[7]。所以我們設(shè)置啟動方式,只需要修改這 8 位(有兩位是 BOOT_MODEIO 的狀態(tài),我們看下負(fù)責(zé)啟動方式的這 6 IO 的含義,如下表所示:
根據(jù)上面的表格,我們設(shè)置開發(fā)板分別從串行下載,EMMCSD 卡,NAND FLASH 啟動的時候,可以按照下面的表格設(shè)置,如下表:
下面是 i.MX6ULL 終結(jié)者底板上的撥碼開關(guān)書屋圖片,如下圖所示:
上圖中的 8 位撥碼,撥到上面“ON”位置就是 1,撥到下面就是“0”,8 位撥碼按照表 2.1 中的設(shè)置就可以按照對應(yīng)的方式啟動
5.2 鏡像格式 鏡像格式
I.MX6ULL 的鏡像文件由下面幾部分組成:
1.Image vector table 簡稱 IVT
2.Boot data,啟動數(shù)據(jù)。
3.Device configuration data,簡稱 DCD,主要是芯片的配置信息
4.用戶代碼生成的執(zhí)行文件。比如 uboot 等。
所以 i.MX6ULL 的鏡像組成為:IVT+Boot Data+DCD+用戶程序。
我們首先看下 IVT 部分:它里面包含了程序的入口點(diǎn),一個指向設(shè)備配置數(shù)據(jù)(DCD)的指針,以及其他在啟動過征中程被 ROM 固化程序用到的指針。IVT 被存儲在啟動設(shè)備固定的位置(但是不同的啟動設(shè)備保存的位置可能會不一樣)。IVT 在鏡像文件的最前面,下圖是不同啟動設(shè)備,IVT 所在的位置偏移(相對于設(shè)備首地址):
這里我們以 EMMC 為例,從上表可以看出他的偏移是 1Kbyte1024 字節(jié)),假設(shè) EMMC 的每個扇區(qū)是 512字節(jié),那么我們的 IVT 要從第三個扇區(qū)開始保存。我們從《IMX6ULL 參考手冊.pdf》的 8.7.1.1 章節(jié)可以看到IVT 的數(shù)據(jù)格式如下圖所示:
其中的 Tag 是一個字節(jié)設(shè)置為 0xD1length 2 個字節(jié),按照大端模式存儲,表示 IVT 的長度,對后一個Version 是版本信息,占用一個字節(jié),通常為 0x40 0x41。由于《IMX6ULL 參考手冊.pdf》文檔只有 header的描述其它幾個字節(jié)的描述沒有涉及。我們可以打開編譯生成的Uboot鏡像uboot.imx查看下它里面的內(nèi)容。
接下來是 Boot data,它的數(shù)據(jù)格式如下所示:
從上圖可以看出 Boot data 一共是三個字段,每個字段 32 位。
然后是 DCDDCD 緊跟在 Boot Data 后面,IVT 里面也定義了 DCD 的位置。DCD 主要是初始化片內(nèi)的寄存器。
DCD 的數(shù)據(jù)格式如下圖所示:
第一個是 Header 包頭信息,他是一個 32 位的包頭,具體定義如下所示:
Tag 占一個字節(jié),被設(shè)置為 0xD2Length 占兩個字節(jié),按照大端模式存儲,表示 DCD 的區(qū)域大小(包含包頭的長度),Version 占一個字節(jié),設(shè)置為 0x40 0x41
Header 后面的是 CMD 配置寄存器的字節(jié),每個 CMD 的結(jié)構(gòu)如下圖所示:
CMD 域的第一個是 Tag,占一個字節(jié),設(shè)置為 0xcc;然后是 Lehgth 占兩個字節(jié),按照大端模式存儲,表示該 CMD 的長度(包含 CMD 的包頭),Parameter 占一個字節(jié),這個字的每個為含義如下圖所示:
上圖中的 bytes 表示目標(biāo)位置寬度,單位為 byte,可以設(shè)置為 124 字節(jié)。Flags 是命令控制標(biāo)志位。
然后 CMD 域后面的是 Address Value/Mask。這兩個分別是要初始化的寄存器地址,設(shè)置的值。
緊接著 DCD 的就是我們的程序生成的.bin 文件。至此關(guān)于 i.MX6ULL 鏡像的組成格式我們就分析完成了。只是看上面的介紹大家也許感覺到會很枯燥,接下來我們結(jié)合 uboot.imx 鏡像,來一起看看這些數(shù)據(jù)的組織格式。我們使用 winhex 軟件(在光盤資料的“i.MX6UL 終結(jié)者光盤資料\02_開發(fā)所需軟件”目錄下面)打開光盤資料的“i.MX6UL 終結(jié)者光盤資料\06_開發(fā)板系統(tǒng)鏡像\uboot\emmc\u-boot.imx”文件,如下圖所示:
從上圖可以看出是按照小端方式顯示的,我們首先把前面 44 個字節(jié)按照 4 個字節(jié)一組的方式組合在一起就
是:0x402000D10x878000000x000000000x877FF42C0x877FF4200x877FF4000x000000000x00000000
這 8 組數(shù)據(jù)是 IVT 的數(shù)據(jù),我們整理成下表:
然后是 Boot Data 域,我們把接下來的 12 個字節(jié)按照 4 個字節(jié)一組的方式組合在一起就是 0x877FF000,
0x0007E000,0x00000000。我們整理成下表所示:

從上面的表格我們可以看到 DCD 主要做了下面的配置:
1. 使能所有外設(shè)的時鐘。
2. 配置 DDR3 所用的所有 IO
3. 配置 MMDC 控制器,初始化 DDR3
關(guān)于 i.MX6ULL 的啟動流程和啟動鏡像文件格式我們就介紹到這里。通過本章的講解我們可以掌握 i.MX6ULL的啟動設(shè)置了。我們編譯出的二進(jìn)制.bin 文件,不能直接燒寫到 EMMC 中,需要在它前面加上 IVTBoot DataDCD 這三部分的數(shù)據(jù)域。我們之中燒寫到 EMMC 的鏡像文件時:IVT+Boot Data+CDC+用戶的.bin 文件。
更多內(nèi)容關(guān)注公眾號:迅為電子

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

關(guān)于我們  -  服務(wù)條款  -  使用指南  -  站點(diǎn)地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權(quán)所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 九九在线精品 | 日本道精品一区二区三区 | 在线天堂中文新版有限公司 | 99久久精品费精品国产一区二区 | 亚洲欧洲国产视频 | 中文字幕高清有码在线中字 | 青草视频网站在线观看 | 国产精品页 | 成人免费网站视频ww | 日日舔夜夜摸 | 欧美资源网 | 羞羞网站在线看 | 亚洲黄色第一页 | 在线观看精品自拍视频 | 黄色网页在线播放 | 日本高清视频一区二区三区 | 欧美专区一区二区三区 | 免费手机黄色网站 | 欧美区在线观看 | 黄色网址中文字幕 | 国产夫妻精品 | 国产精品自产拍在线网站 | 国产一区二区久久久 | 大伊香蕉精品一区在线 | 亚洲国内精品自在线影视 | 国产日韩欧美精品一区 | 黄网站在线观看视频 | 天堂在线www | 四虎comwww最新地址 | 麻豆国产福利91在线 | 边舔边插| 欧美天堂在线视频 | 最色网址 | 黑人干亚洲人 | 一级毛片免费观看不卡视频 | 免费国产午夜高清在线视频 | 91在线播 | 黄辣文| 亚洲日韩视频 | 青青色在线视频 | 日韩视频免费观看 |