IMX51啟動模式

2021-06-16 14:04:22 字數 2401 閱讀 8324

im51有4種啟動模式,通過gpio管腳boot_mode[1:0]來選擇。在系統重啟時,所有的啟動引腳被取樣並儲存到sbmr(system reset controller boot mode register,系統復位控制器啟動模式暫存器)。連線boot_mode到地對應邏輯0,對於邏輯1,飛思卡爾推薦連線到nvcc_per3(為什麼推薦此電平,是為了最大可能的避免啟動時啟動引腳電平處於unknown狀態導致啟動異常嗎?)。

這4中啟動模式分別是internal boot、reserved、internal boot-rom select和serial **********,它們對應於bmod[1:0](smbr暫存器的14和15位)的值如下:

其中bmod[1:0]=01是飛思卡爾預留用來作為內部測試使用的。

1.      internal boot(bmode = 00)

當設定為bmode = 00模式,將由efuse設定或使用gpio覆蓋的fuse設定來控制啟動流程,這兩種選擇是通過gpio引導選擇熔絲(gpio_bt_sel)來控制的:

⑴如果gpio_bt_sel(=1)熔絲被熔斷(被燒錄過),所有的啟動選項由efuses來控制。內部的啟動**可以從sbmr中讀取bmod[1:0]的值,或是直接通過iim(ic identification module,ic識別模組)模組讀取efuses。

⑵如果gpio_bt_sel(=0)熔絲是完整的(沒有被動過),啟動選項由sbmr的設定來決定。此模式下一些熔絲選型可能被覆蓋,具體哪些熔絲可以被覆蓋,這是由gpio那一列中寫明了yes來決定的,比如:

在此模式下之能通過sbmr來讀取啟動選項的值,比如圖2的bt_mem_ctl[1:0](也對應sbmr[1:0]),至於efuse中哪些驅動選項的值可以由哪些對應的gpio口來覆蓋的,見圖3:

由圖3可知,disp1_dat[14:13](gpio)的值會覆蓋bt_mem_ctl[1:0]的值,也就是說bt_mem_ctl[1:0]的值由disp1_dat[14:13]來決定,由此可見此模式下這些gpio的設計非常重要,否則很有可能導致啟動無法正常啟動。

2.      internal boot-rom select(bmode= 10)

bmode = 10模式相當於bmode = 00模式,差別在於bmode= 10模式忽略gpio的啟動覆蓋,也不管bt_gpio_sel的設定。此模式只使用efuse的設定來啟動,這樣可允許使用者在最終的產品上(完成開發,交付給客戶的產品)熔斷熔絲。沒有了外部的boot_mode引腳,沒啟動gpio上拉和下拉,這樣就不會出現在裝置啟動時,由於啟動引腳(比如圖3左邊的gpio)的不確定值導致了呼叫serial **********。

此模式下,啟動流程發現如果bt_blank=0沒有被燒錄過(rom沒有被燒錄過),啟動流程被重新定向並跳轉到serial **********。如果bt_blank=1被燒寫過,則是正常的啟動流程,並且使用efuse來啟動。

當板子第一次使用時,如果沒有熔絲被熔斷,連線到啟動gpio引腳上的pad可能產生一些值,這可能被rom code錯誤使用而導致啟動流程從不存在的裝置上啟動。這可能產生電氣/邏輯上的破壞,但此模式解決了這個問題。

3.      serial **********(bmode = 11)

當外部flash裝置沒有程式,或是在啟動過程中遇到錯誤,或是遇到下面的一些情況,啟動留出都會跳轉到serial **********:

⑴bmod[1:0] = 11 (serial ********** mode)

⑵bmod[1:0] = 10和efuse的bt_blank=0

⑶bmod[1:0] = 10但熔絲沒有被正確設定。

⑷bmod[1:0] = 00或10,且沒有有效的映象檔案在flash中。

⑸ security hardware failure

⑹執行時產生異常

⑺ error returned by the hab functions while in productionmode. errors are ignored in engineering

mode)

為了檢測有效的串列埠(uart或usb),處理器的rom程式定期間隔32s輪詢uart和usb狀態暫存器。如果在預定的輪詢時間內沒有發現有效的埠,rom程式就通過看門狗對處理器斷電。當serial **********有效,看門狗定時服務,如果serial host和im51之間的通訊在32s之外沒有反應或是處理器進入死迴圈,看門狗就timeout並對裝置下電。

IMX6ULL啟動流程

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

IMX6ULL uboot啟動分析(六)

已經對board init f函式進行了簡單介紹,在這個函式當中,會呼叫一系列的函式去初始化一些早期的板子外設和gd結構體的成員變數,但是board init f函式並沒有將所有的外設進行初始化,還有一些後續的工作需要完成,這些工作就是由board init r函式去完成。在介紹board init...

imx6q LINUX 啟動時間優化

1 u boot的優化 1 首先去掉無關緊要的串列埠資訊 2 將config bootdelay改為0 3 去掉一些不用的驅動,例如spi usb hdmi等等 4 關閉config cmd net 5 u boot會重複初始化mmc,修改do mmc dev 2 kernel的優化 1 首先開啟c...