痞子衡維護(hù)的 NXP-MCUBootUtility 工具距離上一個大版本(v5.0.0)發(fā)布過去4個多月了,期間痞子衡也做過三個小版本更新,但不足以單獨(dú)介紹。這一次痞子衡為大家?guī)砹巳轮匾姹緑5.3.x,這次更新主要是想和大家特別聊聊 XMCD 這個特性的支持。
一、v5.1 - v5.3更新記錄
-- v5.1.0
Features:
1. [RT1180] 支持自動加載Edgelock固件
-- v5.2.0
Features:
1. [RTyyyy] 支持i.MXRT118x B0
2. [RT] 對于FlexSPI NOR設(shè)備,支持下載安全與非安全兩種地址鏈接的CM33程序
3. [RT] 對于FlexSPI NOR設(shè)備,支持別名地址鏈接的程序
Improvement:
1. [RT1180] 用戶輸入的源程序文件可以包含啟動頭 (Container)
-- v5.2.1
Bufixes:
1. [RTyyyy] 修復(fù)對FlexSPI NAND設(shè)備的下載支持
-- v5.3.0
Features:
1. [RTyyyy] 支持XMCD配置功能,可用于加載image進(jìn)FlexSPI RAM/SEMC SDRAM執(zhí)行
2. [RTyyyy] 支持第二個FlexSPI去下載啟動NAND
3. [RT] 新增FlexSPI NAND啟動設(shè)備模型支持
Improvement:
1. [RTyyyy] 將FlexSPI序號選擇從菜單欄改至設(shè)備配置界面
2. [RTyyyy] 可以識別鏈接在FlexSPI RAM區(qū)域的程序
Bufixes:
1. [RTyyyy] 無法識別IVT中復(fù)位函數(shù)地址相對向量表首地址偏移小于0xB00的可啟動程序文件
-- v5.3.1
Improvement:
1. [RT] 可以檢查不同F(xiàn)lexSPI序號的有效XIP范圍
2. [RTxxx] 可以識別鏈接在FlexSPI RAM區(qū)域的程序
Bufixes:
1. [RT1180] 在FlexSPI NOR啟動設(shè)備下無法生成一些Non-XIP程序的可啟動程序
二、幾個不可忽視的更新
2.1 完善的FlexSPI NOR映射地址支持
在 v5.0 及其之前的版本里,工具對于 FlexSPI NOR 設(shè)備映射地址的支持比較單一。在工具目錄 srctargetsxxxbltargetconfig.py 文件中僅可見如下定義(RT1180為例),即一個 FlexSPI 僅對應(yīng)一個主映射地址:
flexspiNorMemBase0 = 0x38000000
flexspiNorMemBase1 = 0x14000000
但是我們知道部分 i.MXRT 型號系統(tǒng)設(shè)計(jì)里對于 FlexSPI 除了支持主映射地址外,還支持所謂的別名映射地址(Aliased Address),甚至 CM33 內(nèi)核的 i.MXRT 型號里還區(qū)分 Secure 和 Non-Secure 地址。因此 v5.3 里進(jìn)一步豐富了 FlexSPI NOR 設(shè)備的映射地址,這樣我們在編譯鏈接 XIP 啟動程序的時(shí)候,地址選擇更加靈活。此外這里如果你仔細(xì)看,會發(fā)現(xiàn)工具對于最大映射地址空間檢查也按 RT 型號不同做了具體區(qū)分。
但是這里有關(guān)于 RT1180 的一點(diǎn)注意事項(xiàng),工具目錄 srctargetsMIMXRT1189 下預(yù)先放了兩個版本的 flashloader,一個僅支持 Secure 地址,另一個僅支持 Non-Secure 地址,這是當(dāng)前 flashloader 實(shí)現(xiàn)的限制。為了能讓工具自動根據(jù)用戶輸入源程序?qū)嶋H鏈接地址類型來選擇合適的 flashloader 去做擦寫操作,需要先點(diǎn)擊一次 Generate xxType Bootable Image 按鈕之后再點(diǎn)擊 Connect to ROM 按鈕,最后再 All-In-One Action。
cntr_flashloader_s.bin
cntr_flashloader_ns.bin
2.2 支持鏈接在FlexSPI RAM區(qū)域的程序
對于 Non-XIP 程序,除了鏈接在 RT 芯片內(nèi)部 SRAM 空間之外,還可以鏈接在外部 RAM 空間,比如 SEMC 接口對應(yīng)的 SDRAM 設(shè)備,或者 FlexSPI 接口對應(yīng)的 HyperRAM 或者 PSRAM 設(shè)備。v5.0 及之前工具僅能支持鏈接在 SDRAM 的程序,對于鏈接在 FlexSPI 映射空間的 Non-XIP 程序,工具會直接報(bào)非法地址。v5.3 版本開始,這個限制將不復(fù)存在(見如下對 RT1180 FlexSPI RAM 地址的支持),這也是為了配合 DCD 以及 XMCD 功能而做的改進(jìn)。
2.3 對于RT1170 XMCD功能支持
從 RT1160/1170 B0 以及其后的 RT1180 開始,BootROM 里新增了 XMCD 功能,這是對 DCD 功能的補(bǔ)充。我們知道 DCD 可以實(shí)現(xiàn)對芯片指定外設(shè)的用戶定制化配置,常常用于配置 SEMC 寄存器去初始化 SDRAM 或者 FlexSPI 寄存器去初始化 HyperRAM/PSRAM,但是 DCD 的配置太細(xì)致,需要從外設(shè)寄存器角度去理解那些外部 RAM 存儲器特性,這種方式從應(yīng)用角度來說不夠友好。XMCD 正是為了解決這個問題,其將對 SDRAM/HyperRAM 配置以一種對用戶更友好更簡潔的方式來呈現(xiàn),見如下界面設(shè)置:
XMCD 雖好,但是其和 DCD 配合使用在當(dāng)前工具里會有一些限制,這主要是因?yàn)楣ぞ咭蕾嚨?RT1170 底層工具鏈(elftosb)對于 dcd 數(shù)據(jù)的生成僅支持相對 IVT 起始地址 0x40 的偏移,但這個偏移恰恰又是 XMCD 的偏移位置,兩者有沖突:
限制 1:如果是 All-In-One Action 操作,不可在界面里同時(shí)使能 DCD 和 XMCD。如果兩者同時(shí)使能,XMCD 設(shè)置會被自動忽略。限制 2:如果是 All-In-One Action 操作,用戶源應(yīng)用程序里如果包含 DCD 數(shù)據(jù)結(jié)構(gòu),那么工具界面里 XMCD 設(shè)置也會被自動忽略。限制 3:如果是 All-In-One Action 操作,用戶源應(yīng)用程序里如果包含 XMCD 數(shù)據(jù)結(jié)構(gòu),且工具界面里 DCD 被使能,那么 XMCD 數(shù)據(jù)結(jié)構(gòu)將會被丟棄。
當(dāng)然如果你有一個同時(shí)包含 DCD 和 XMCD 數(shù)據(jù)的可啟動文件,可以在工具通用編程器(Boot Device Memory)界面使用 Write 按鈕去下載。
至此,這次更新的主要特性便介紹完了。MCUBootUtility項(xiàng)目地址如下。雖然當(dāng)前版本(v5.3.x)功能已經(jīng)非常完備,你還是可以在此基礎(chǔ)上再添加自己想要的功能。如此神器,還不快快去下載試用?
地址1:https://github.com/nxp-mcuxpresso/mcu-boot-utility地址2:https://github.com/JayHeng/NXP-MCUBootUtility地址3:https://gitee.com/jayheng/NXP-MCUBootUtility