欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 1815|回復(fù): 0
收起左側(cè)

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

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

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


回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表