IMX6ULL 晶元啟動方式筆記

2021-10-09 13:48:34 字數 2051 閱讀 6192

概述:i.mx6ull支援多種啟動方式,比如可以從 sd/emmc、nand flash、qspi flash等啟動從 sd 卡啟動就需要在 bin 檔案前面新增乙個資料頭,其它的啟動裝置也是需要這個資料頭。

一,啟動方式選擇:

boot 的處理過程是發生在 i.mx6u 晶元上電以後,晶元會根據 boot_mode[1:0]的設定來選擇 boot 方式。boot_mode[1:0]的值是可以改變的,有兩種方式,一種是改寫 efuse(熔 絲)(只能改變一次),一種是修改相應的 gpio 高低電平。

boot啟動方式如下:

boot_mode[1:0]

boot型別

00從fuse啟動

0110

內部boot模式

11保留

注:內部boot模式下,晶元會執行boot rom裡面的**,對一些外設進行初始化,然後從boot裝置中(就是存放**的裝置、比如 sd/emmc、nand)中將**拷貝出來複製到指定的 ram 中,一般是 ddr。

boot rom初始化內容

二,啟動裝置選擇:當選擇使用內部boot模式後通過配置不同的gpio來選擇啟動裝置。在正點原子開發板中使用撥碼開關來控制啟動裝置。

三,映象燒寫:

在stm32中直接可以將bin檔案燒寫到微控制器flash裡面,但是在imx6ull中,需要加上頭資訊

主要包括:

1>image vector table 簡稱:ivt,ivt裡面包含了一系列的位址資訊,這些位址資訊在rom中按照順序存放著。

2>boot data包含了,映象拷貝的位址,拷貝的大小等。

3>device configuration data,簡稱 dcd,裝置配置資訊,重點是 ddr3 的初始化配置

4>使用者的可執行**,比如bin檔案。

…ivt和boot data

概述:ivt 包含了映象程式的入口點、指向 dcd 的指標和一些用作其它用途的指標。內部 boot rom 要求 ivt 應該放到指定的位置,不同的啟動裝置位置不同,而 ivt 在整個 load.imx 的最前面,其實就相當於要求 load.imx 在燒寫的時候應該燒寫到儲存裝置的指定位置去。整個位置都是相對於儲存裝置的起始位址的偏移。

以sd舉例說明,ivt需要偏移1個位元組,所以ivt+boot data+dcd為三個位元組,所以在ddr中的位址為(以0x87800000為**起始位址)0x87800000-3072=0x877ff400。

1>ivt格式:

第乙個存放的就是header,header的格式如下:

tag為乙個位元組長度,固定為0xd1,lengh是兩個位元組,儲存著ivt長度,為大端模式(也就是高位元組存放在低記憶體中)。最後的version固定是乙個位元組,為0x40或者0x41.

2>boot data資料格式如下:

從正點原子的映象檔案擷取一部分:

我們將前 44 個位元組的資料按照 4 個位元組一組組合在一起就是:0x402000d1、 0x87800000、0x00000000、0x877ff42c、0x877ff420、0x877ff400、0x00000000、0x00000000、 0x877ff000、0x00200000、0x00000000。這 44 個位元組的資料就是 ivt 和 boot data 資料,按

照上面 所示的 ivt 和 boot data 所示的格式對應起來

補充:dcd的主要配置的東西就是

1>設定 ccgr0~ccgr6 這 7 個外設時鐘使能暫存器,預設開啟所有的外設時鐘。

2>配置 ddr3 所用的所有 io。

3>配置 mmdc 控制器,初始化 ddr3

IMX6ULL啟動流程

假設板子設定為sd tf卡啟動,boot rom程式會做什麼?把程式從sd tf卡讀出來,執行。從 讀?從sd tf卡讀,這需要先初始化sd tf卡 根據efuse或gpio的設定初始化sd tf卡。讀到 去?讀到記憶體即ddr去,這需要先初始化ddr。除了初始化啟動裝置 初始化ddr,還需要初始化...

IMX6ULL學習筆記(一)

imx6ull裸機開發學習 以下內容是我在學習正點原子imx6ull開發板alpha中記錄的筆記,部分摘錄自正點原子imx6ull開發手冊。bin檔案前面要新增頭部 ivt boot data dcd資料 由官方手冊可知要燒寫到sd卡中的load.imx檔案在sd卡中的起始位址是0x400,也就是1...

IMX6ULL學習筆記(三)

imx6ull裸機開發學習 以下內容是我在學習正點原子imx6ull開發板alpha中記錄的筆記,部分摘錄自正點原子imx6ull開發手冊。鏈結指令碼的例子 sections rodata align 4 data align 4 bss start bss align 4 bss end bss ...