大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是恩智浦i.MX RT118x系列MCU的Boot配置。
痞子衡舊文 《RT四位數Boot簡介》 里為大家介紹了 Boot 基本原理以及 i.MXRT1xxx Boot 方式,此外也有文章 《RT1xxx Boot配置》 介紹了 i.MXRT10xx/RT1170 Boot 的行為配置,鑒于 RT1180 系列在 Boot 配置上區別于以往,因此今天痞子衡就來專門聊一聊 i.MXRT118x Boot 行為配置的設計差異。
無論是什么芯片里的 BootROM,其最核心的功能無非兩個:
一、從存放 Application 的存儲器中加載執行;
二、通過支持的通信接口接收來自 Host 的 Application 數據完成更新,所以 Boot 配置也主要圍繞這兩個核心功能。
一、Boot行為模式選擇
如果你讀過痞子衡舊文 《RT三位數Boot配置》,你會發現其實 RT1180 在 Boot 配置設計上更偏向于 RT 三位數系列(相對精簡),但是在涉及到的名詞術語上還是盡量與 RT 四位數保持了一致。
RT1180 內部 eFuse memory 中的 FORCE_BT_FROM_FUSE 位和芯片外部管腳 BOOT_MODE[2:0] 狀態共同決定了 i.MXRT118x Boot 行為的最頂層配置。
1.1 行為模式定義1.1.1 FORCE_BT_FROM_FUSE等值定義
FORCE_BT_FROM_FUSE 是最高優先級的行為模式定義,其與 BOOT_MODE_FROM_FUSE[2:0] 位是一個組合。當 FORCE_BT_FROM_FUSE 被燒寫為 1'b1 時,此時芯片 Boot 行為完全由 BOOT_MODE_FROM_FUSE[2:0] 配置值決定。
1.1.2 BOOT_MODE[2:0]管腳狀態定義
當 FORCE_BT_FROM_FUSE bit 未燒寫時(即1'b0),BOOT_MODE[2:0] 引腳開始決定行為模式。下表是 BOOT_MODE 相關 pinout 信息,可在參考手冊的 External Signals and Pin Multiplexing 章節中找到。
BOOT_MODE[2:0] pin 狀態是在 POR_B pin 上沿時被自動采樣存儲在芯片內部的寄存器 SRC->SBMR2[29:24] 中的,這些 bit 也叫 IPP_BOOT_MODE[5:0],BootROM 其實是根據 IPP_BOOT_MODE 的值來決定 Boot 行為的。
Note: 如果改變了 BOOT_MODE[2:0] 引腳的輸入狀態而使用 ONOFF pin(RESET_B)去軟復位,Boot 行為并不會改變,因為 IPP_BOOT_MODE 值并未改變)。
當 BOOT_MODE[2:0] 被設置成 3'b000 時即所謂 Boot From Fuses 模式,其有效性還受 BT_FUSE_SEL 位二級控制(默認 1'b0 則仍然是 Serial Downloader 模式,燒寫成 1'b1 時才根據 BOOT_MODE_FROM_FUSE[2:0] 決定行為),當然痞子衡認為這里完全多此一舉,純粹是為了與 RT 四位數早期型號里 BootROM 相應代碼邏輯作兼容。
1.2 行為模式分類
不管是 FORCE_BT_FROM_FUSE 位還是外部管腳 BOOT_MODE[2:0] 狀態,他們決定的最終 Boot 行為模式是相似的,區別只是一個通過燒 eFuse 決定(一般用于量產階段),另一個通過切換引腳狀態決定(一般用于研發階段)。Boot 行為模式看起來非常多,但概括而言總共就兩大類:
1.2.1 Serial Downloader模式(UART/SPI/USB-HID)
Serial Downloader 模式顧名思義即串行下載模式,在這種模式下,BootROM 通過指定的 USB/UART/SPI 口來接收來自 Host(恩智浦提供了上位機工具 blhost.exe 或者 mfgtool 或者 MCUBootUtility)的 Application 數據,并將數據存儲在 SRAM 中執行。
Note: SPI 方式 SDP 雖然很早就被 RT 三位數系列 BootROM 支持,但是在 RT 四位數上首次支持是 RT1180。
這種模式其實就是從 SRAM 啟動,但是如果用這種模式去 Boot Application 缺點很明顯,每次上電都需要將 Application 重新下載進 SRAM,無法做到脫機自動 Boot,所以顯然這種模式的主要目的并不是從 SRAM 啟動 Application,那它到底有什么用?
其實 Serial Downloader 模式主要是用來從 SRAM 中啟動 Flashloader,恩智浦官方提供了 Flashloader 程序,Flashloader 程序可以用來將你的 Application 下載進 i.MXRT118x 支持的所有外部非易失性存儲器中,為后續從外部存儲器啟動做準備。除此以外 Serial Downloader 模式還可以用來查看 eFuse 值。
1.2.2 Device Boot模式(Serial NOR/Serial NAND/Raw NAND/SD/eMMC/Recovery LPSPI NOR)
Device Boot 模式就是直接從選定的外部非易失 Device 加載 Application 啟動,這種模式才是 i.MXRT118x 最核心的模式,畢竟離線運行 Application 才是最重要的任務。Device Boot 又分為 Primary Boot(Serial NOR/Serial NAND/Raw NAND/SD/eMMC)和 Recovery Boot(LPSPI NOR),前者是主動啟動設備,后者是備份啟動設備。當主動啟動設備中的 Application 失效時,芯片會從備份啟動設備中再嘗試去啟動一次 Application,實現雙重保障。
Note: Recovery LPSPI NOR 啟動在 RT 四位數早期型號上雖然也被支持,不過僅支持 1bit 模式,而在 RT1180 上可以同時支持 1/2/4bits 模式。
二、Boot Device具體配置
當 Boot 行為模式選定的是從某一類 Boot Device 啟動,底下就是配置該 Device 具體屬性了。假設我們選擇了Serial NOR FLASH,但是 Serial NOR 只是一類 FLASH 的統稱,市面上有非常多的 Serial NOR 芯片,每個芯片特性可能不完全一樣,那么 BootROM 怎么知道這些不同的 Serial NOR 芯片的特性呢?還是通過 eFuse memory 來指定。
eFuse 是 i.MXRT118x 里一塊特殊的存儲區域,用于存放全部芯片配置信息,其中有一部分區域分配給 Boot。參考手冊的 eFuse 相關章節中可見所有 bit 具體定義,這里痞子衡僅貼出一部分用于示例:
Note: 在 RT 四位數早期型號 eFuse 里關于 Device 具體屬性定義區域存在復用情況,而在 RT1180 上每一類 Device 都獨享一片區域。
至此,恩智浦i.MX RT118x系列MCU的Boot配置痞子衡便介紹完畢了,掌聲在哪里~~~