BOOT ROM 初始化內容 啟動裝置 映象燒寫

2021-10-04 15:04:39 字數 3136 閱讀 8631

2 啟動裝置

3 映象燒寫

4 結束

i.mx6u 支援多種啟動方式以及啟動裝置,比如可以從 sd/emmc、nand flash、qspi flash等啟動

在 i.mx6u 晶元上電以後,根據 boot_mode[1:0]的設定來選擇 boot 方式,boot_mode[1:0]有兩種方式更改:

① 改寫 efuse(熔絲),只能修改一次

② 修改相應的 gpio 高低電平(預設為0,引腳boot_mode1 和 boot_mode0 )

① 初始化時鐘,核心時鐘(主頻): 396mhz

③ 從sd/emmc、nand將**複製到指定的ram中

④ 重置中斷向量表

中斷向量偏移會被設定到 boot rom 的起始位置,當 boot rom 啟動了使用者**以後就可以重新設定中斷向量偏移了。一般是重新設定到我們使用者**的開始地方

兩種方式更改:

① 改寫 efuse(熔絲),只能修改一次

② 通過配置24個 io 來實現選擇:

通過上圖可以知道,24個配置 io分別對應的是lcd 的 24 根資料線 lcd_data0~lcddata23,當啟動完成以後這 24 個 io 就可以作為 lcd 的資料線使用;這 24 根線和 boot_mode1、boot_mode0 共同組成了 i.mx6u的啟動選擇引腳

大部分的 io 都是接地,boot_cfg4[7:0]這 8 個 io 都 10k 電阻下拉接地,可以先不關注 boot_cfg4[7:0]

在撥碼開關中,除 了 boot_mode1 和 boot_mode0 ,還有lcd_data3~ lcddata7、lcd_data11 這 6 個 io,其中lcd_data11就是boot_cfg2[3],lcd_data3~ lcd_data7 就是 boot_cfg1[3]~ boot_cfg1[7]

總結如下:8個撥碼開關中對應的裝置選擇

.bin 檔案不能直接在 i.mx6u 執行,需要在.bin 檔案前面新增一些頭資訊構成滿足 i.mx6u 需求的最終可燒寫檔案,構成如下:

1、 .bin 通過imxdownload生成 .imx(.imx = ivt + boot data + dcd + .bin)

2、內部 boot rom 將 .imx 拷貝到 ddr ,使用者**從鏈結位址位址開始,比如 0x87800000 ,.imx 在 ddr 中的起始位址為:(鏈結位址 - 3kb )比如0x87800000-3072=0x877ff400

ivt 包含了映象程式的入口點、指向 dcd 的指標和一些用作其它用途的指標,不同的啟動裝置內部 boot rom 要求 ivt的存放位置不同(ivt在最前面,相當於要求 load.imx 在燒寫的時候應該燒寫到儲存裝置的指定位置去)

以 sd/emmc 為例,ivt 偏移為 1kbyte,ivt + boot data + dcd 的總大小為 4kbyte - 1kbyte = 3kbyte

① ivt 資料格式

header(頭)格式如下:

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

② boot data 的資料格式

dcd 區域不能超過 1768byte,區域結構如下:

其header 和 ivt 的 header 類似,結構如圖

其中 tag 是單位元組,固定為 0xd2,length 為兩個位元組,表示 dcd 區域的大小,包含 header,同樣是大端模式,version 是單位元組,固定為 0x40 或者 0x41

tag 為乙個位元組,固定為 0xcc。length 是兩個位元組,包含寫如的命令資料的長度,包含 header,同樣是大端模式。parameter 為乙個位元組,這個位元組的每個位含義如圖

bytes 表示是目標位置寬度,單位為 byte,可以選擇 1、2、和 4 位元組。flags是命令控制標誌位

address 和 vlalue/mask 就是要初始化的暫存器位址和相應的暫存器值,注意採用的是大端模式

復位以後,i.mx6u 片內的所有暫存器都會復位為預設值,但是這些預設值往往不是我們想要的值,而且有些外設我們必須在使用之前初始化它。使用dcd(device config data)即可解決此問題

總結:

dcd 裡面的初始化配置主要包括三方面

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

②、配置 ddr3 所用的所有 io

③、配置 mmdc 控制器,初始化 ddr3 i.mx6u mmdc 控制器簡介

如有錯誤,還望指正?

linux下postgreSQL初始化設定方法

1.首先建立postgres使用者 useradd m postgrespasswd postgres2.建立資料庫工作目錄mkdir opt postgres datachown r postgres opt postgres data3.切換到postgres使用者,開始初始化資料庫su pos...

ucos初始化及啟動

ucosii 裡,在建立乙個任務 或者呼叫其它系統服務之前 是需要先初始化系統的,初始化ucosii需要呼叫函式osinit 呼叫函式osinit的作用是什麼,主要 實現以下幾個功能。1.建立空閒任務級統計任務。2.初始化ucosii變數及資料結構,其中包括訊號量,郵箱,訊息佇列等初始化等。多工的啟...

springMVC啟動初始化過程

在web.xml裡配置分發servlet和contextloaderlistener,contextloaderlistener是spring提供的類,它繼承了contextloader類和實現了servletcontextlistener介面。servletcontextlistener負責監聽w...