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