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

電子工程網

標題: 迅為i.MX6ULL開發板啟動方式和鏡像文件格式 [打印本頁]

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

從上面的表格我們可以看到 DCD 主要做了下面的配置:
1. 使能所有外設的時鐘。
2. 配置 DDR3 所用的所有 IO
3. 配置 MMDC 控制器,初始化 DDR3
關于 i.MX6ULL 的啟動流程和啟動鏡像文件格式我們就介紹到這里。通過本章的講解我們可以掌握 i.MX6ULL的啟動設置了。我們編譯出的二進制.bin 文件,不能直接燒寫到 EMMC 中,需要在它前面加上 IVTBoot DataDCD 這三部分的數據域。我們之中燒寫到 EMMC 的鏡像文件時:IVT+Boot Data+CDC+用戶的.bin 文件。
更多內容關注公眾號:迅為電子
https://item.taobao.com/item.htm?spm=a2oq0.12575281.0.0.34851debJbM0Ye&ft=t&id=614020183147&qq-pf-to=pcqq.c2c






歡迎光臨 電子工程網 (http://m.qingdxww.cn/) Powered by Discuz! X3.4
主站蜘蛛池模板: 草逼免费看| 亚洲高清视频网站 | 免费观看黄a一级视频 | 久久伊人男人的天堂网站 | 1000部又爽又黄无遮挡的视频 | 重口调教女虐女长篇小说 | 高清一区二区三区四区五区 | 日韩精品久久一区二区三区 | 99精品久久99久久久久久 | 99视频精品全部免费观看 | aaa国产一级毛片 | 日本高清不卡中文字幕 | 欧美一区二区三区在线视频 | 色综合久久久久久久 | 99热久| 日本大片在线 | 九九九九在线精品免费视频 | 青青草国产免费 | 亚洲综合网在线观看首页 | 久久免费视频播放 | 爱插综合网 | 国产欧美亚洲精品综合在线 | 日韩国产有码在线观看视频 | 成年男女免费视频网站 | 九九老司机在线视频精品 | 一级欧美一级日韩片 | 天天视频免费观看高清影视 | 若妻在线观看 | 日日奇 | 大桥未久日韩欧美亚洲国产 | 野外做受三级视频 | 日本高清色本在线www | 免费观看一区二区 | 干干人人| 日日综合网 | 日韩欧美一区二区三区中文精品 | 国产精品15p | 日韩欧美二区在线观看 | 亚洲成a | 久久精品30 | 羞羞免费网站视频 |