痞子衡嵌入式:MCUBootUtility v2.4發布,輕鬆更換Flashloader文件
- 2020 年 10 月 20 日
- 筆記
- 31.單片機i.MXRT-CM7
—
痞子衡維護的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項目地址為 //github.com/JayHeng/NXP-MCUBootUtility, 雖然當前版本(v2.4.0)功能已經非常完備,你還是可以在此基礎上再添加自己想要的功能。如此神器,還不快快去下載試用?
歡迎訂閱
文章會同時發布到我的 部落格園主頁、CSDN主頁、知乎主頁、微信公眾號 平台上。
微信搜索”痞子衡嵌入式“或者掃描下面二維碼,就可以在手機上第一時間看了哦。