--
痞子衡維護的NXP-MCUBootUtility工具距離上一個版本(v2.3.1)釋出過去2個月了,這一次痞子衡為大家帶來了版本升級v2.4.0,這個版本主要有一個非常重要的更新需要跟大家特別說明一下。
一、v2.4更新記錄
二、關於Flashloader的更換支援
Flashloader在嵌入式世界裡有很多種不同含義和應用場景,其中最讓人熟知的非配合模擬器使用的Flashloader(下載演算法)莫屬,有了合適的Flashloader,我們便可以在IDE裡一鍵下載和除錯應用程式,專案開發效率大大提升。
i.MXRT(主要是四位數系列)世界裡也有一個專用的Flashloader,它專門配合BootROM工具鏈(blhost.exe)使用,這個Flashloader可以幫助你將應用程式下載進i.MXRT可啟動的各種外部裝置裡(NOR/NAND/SD/eMMC),關於其使用方法痞子衡之前寫過一篇詳細的文章 《Flashloader初體驗(blhost)》。
NXP-MCUBootUtility軟體核心功能都是通過這個Flashloader和blhost工具來實現的,由於Flashloader本身也是一個嵌入式應用程式,是程式就可能存在功能缺陷,我們有時候遇到的NXP-MCUBootUtility使用缺陷可能是Flashloader本身的缺陷造成的,因此必要的時候我們需要為NXP-MCUBootUtility更新Flashloader檔案。
2.1 獲取方式
2.1.1 下載獨立包(僅可執行檔案)
在恩智浦官網i.MXRT晶片主頁TOOLS & SOFTWARE一欄下,我們可以下載到適用i.MXRT晶片的各種軟體工具,Flashloader及其配套工具就在其中,如下是i.MXRT1050的Flashloader包:
Flashloader包解壓後,可以看到裡面包含了文件、example、工具以及最重要的Flashloader可執行檔案:
Flashloader可執行檔案有如下三種格式,其中ivt_flashloader.bin是flashloader.elf/srec經過elftosb.exe轉換而來:
\Flashloader_RT1050_1.1\Flashloader\flashloader.elf
\Flashloader_RT1050_1.1\Flashloader\flashloader.srec
\Flashloader_RT1050_1.1\Tools\mfgtools-rel\Profiles\MXRT105X\OS Firmware\ivt_flashloader.bin
但是Flashloader獨立包的方式不是最推薦的獲取方式,早期i.MXRT型號(RT1050/RT1060等)官方提供了獨立包(其實並沒有實時更新,V1.1版本還是2018年3月釋出的),較新的i.MXRT型號(RT1170/RT1010)以及未來最新型號官方不再提供獨立包。
2.1.2 下載SDK(原始碼和工程)
Flashloader原始碼其實已經被官方開源在了SDK包裡,在 MCUX主頁 可下載對應i.MXRT型號的SDK包(繼續以i.MXRT1050為例),記得務必在middleware選項裡勾選mcu-boot後再下載:
SDK包解壓後,可在如下路徑找到Flashloader源工程(IAR/MDK/MCUX/GCC都有)以及跟獨立包裡一樣的ivt_flashloader.bin,注意此時我們需要自己編譯Flashloader源工程生成一個flashloader.srec檔案。
\SDK_2.8.2_EVKB-IMXRT1050\boards\evkbimxrt1050\bootloader_examples\flashloader
\SDK_2.8.2_EVKB-IMXRT1050\middleware\mcu-boot\bin\Tools\mfgtools-rel\Profiles\MXRT105X\OS Firmware\ivt_flashloader.bin
因為SDK本身是持續更新的,Flashloader作為其中元件,也是實時在更新,因此我們不用擔心Flashloader的維護問題,另外原始碼都開放了,不得已的情況下我們還可以自己改Flashloader。
2.2 更換方式
NXP-MCUBootUtility在其目錄/src/targets/下預設存放了Flashloader可執行檔案,主要是flashloader.srec和ivt_flashloader.bin。但是上一節兩種方式下得到的flashloader.srec和ivt_flashloader.bin能不能直接放到NXP-MCUBootUtility裡替換使用呢?答案是否定的。
NXP-MCUBootUtility其實並沒有自動識別預設的flashloader連結地址,而是將其連結和跳轉地址放到了src/targets/xxx/bltargetconfig.py檔案中,這意味著你在替換預設flashloader檔案時必須保證其跟bltargetconfig.py裡的兩個地址保持一致(不一致則需要改flashloader連結檔案或者改bltargetconfig.py裡的地址),這也是NXP-MCUBootUtility v2.3及其之前版本不方便更換Flashloader的原因。
NXP-MCUBootUtility v2.4做的一個重要更新,就是能夠自動識別新flashloader地址,只有一個小小的要求,就是更新的flashloader檔案(srec格式)需要固定命名為flashloader_user.srec並放到/src/targets/xxx/目錄下:
NXP-MCUBootUtility執行時一旦檢測到flashloader_user.srec的存在,便會獲取其連結和跳轉地址,並自動生成對應的ivt_flashloader_user.bin檔案(在/gen/bootable_image/ivt_flashloader_user.bin)去使用,這樣的設計下更換flashloader是不是相當輕鬆!
至此,這次更新的主要特性便介紹完了。MCUBootUtility專案地址為 https://github.com/JayHeng/NXP-MCUBootUtility , 雖然當前版本(v2.4.0)功能已經非常完備,你還是可以在此基礎上再新增自己想要的功能。如此神器,還不快快去下載試用?
歡迎訂閱
文章會同時釋出到我的 部落格園主頁、CSDN主頁、知乎主頁、微信公眾號 平臺上。
微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。