痞子衡維護(hù)的 NXP-MCUBootUtility 工具距離上一個大版本(v3.4.0)發(fā)布過去半年了,這一次痞子衡為大家?guī)砹税姹旧?v3.5.0,這個版本主要有幾個非常重要的更新需要跟大家特別說明一下。
一、v3.5更新記錄
二、幾個不可忽視的更新
2.1 支持串行NOR雙程序啟動下載
部分 i.MXRT 型號 BootROM 支持串行 NOR Flash 的雙程序啟動,這意味著在這些型號上用戶可以不用額外設(shè)計二級 bootloader 也可以完成本地 OTA 升級。
之前痞子衡把所有支持雙程序啟動的 i.MXRT 型號都試了一遍,一共寫了三篇文章,在文中痞子衡是借助 MCUBootUtility v3.4 里的通用編程器來手動做兩個 image 的下載的,并且 image 版本頭添加,以及 Fuse 燒寫也都是手工完成的,步驟稍顯復(fù)雜。
《i.MXRT1060,1010上串行NOR Flash冗余程序啟動設(shè)計》
《i.MXRT1170上串行NOR Flash雙程序可交替啟動設(shè)計》
《i.MXRT500,600系列上串行NOR Flash雙程序可交替啟動設(shè)計》
在 MCUBootUtility v3.5 上再去做同樣的事情就簡單多了,只需要在 FlexSPI NOR Device Configuration 界面里設(shè)置雙程序啟動相關(guān)參數(shù)即可,工具會自動完成后續(xù)所有事情(燒寫相應(yīng) Fuse、添加 image 版本頭,燒寫兩份 image 進(jìn) Flash)。
- Note1: Image 1 offset 保持默認(rèn) 0,即不使能雙程序下載;如果設(shè)為非 0,這個值也會被燒寫進(jìn) Fuse。Note2: Image 0/1 version 如果保持 none 值,在雙程序下載使能的情況下實際等同于 0xFFFF 值。
2.2 支持串行NOR的ECC方式下載
在部分增強(qiáng)型 i.MXRT 型號上(比如 i.MXRT1170),芯片內(nèi)部增加了很多 ECC 方面設(shè)計,從 RAM 到 Flash 再到 Fuse,全部都有 ECC 保護(hù),這樣芯片可放心用于那些對穩(wěn)定性要求高的產(chǎn)品場合(比如汽車)。
在 i.MXRT1170 上是 XECC 模塊負(fù)責(zé)了 FlexSPI 外設(shè)連接的 Flash 上 ECC 處理,痞子衡之前為此寫過一篇文章 《i.MXRT1170 XECC功能特點及其保護(hù)串行NOR Flash和SDRAM之道》。但是官方 SDK 里提供的 Flashloader (路徑在 SDK_2.11.0_MIMXRT1170-EVKboardsevkmimxrt1170bootloader_examplesflashloader)并不支持 ECC 方式的寫入,而 MCUBootUtility 正是借助這個官方 Flashloader 完成 Flash 的擦寫的,所以我們需要改這個官方 Flashloader,為此痞子衡創(chuàng)建了一個項目:
- 包含ECC功能的Flashloader項目:https://github.com/JayHeng/imxrt-ecc-flashloader
在 imxrt-ecc-flashloader 工程里,痞子衡引入了 XECC 模塊驅(qū)動,并且將 ECC 功能集成到了 set-property 13 和 write-memory 這兩個命令里。這里有兩個注意點,一是:使能 ECC 寫入后,寫入首地址需要以 4KB 對齊(在 XECC 模塊的限制下做的設(shè)定),二是:使能 ECC 寫入后,擦除長度需要是 image 長度的兩倍(XECC 原理決定的)。
// 初始化 Flash
blhost -u -- fill-memory 0x20200000 0x4 0xC0000005
blhost -u -- fill-memory 0x20200004 0x4 0x0
blhost -u -- configure-memory 0x9 0x20200000
// 關(guān)閉 ECC 寫入功能,復(fù)位 XECC 模塊(默認(rèn)配置)
blhost -u -- set-property 13 0
// 擦除 Flash 前 16KB 空間
blhost -u -- flash-erase-region 0x30000000 0x4000
// 正常寫入 Flash
blhost -u -- write-memory 0x30000000 bt_image_16KB.bin 0x9
// 使能 ECC 寫入功能
blhost -u -- set-property 13 1
// 擦除 Flash 前 32KB 空間
blhost -u -- flash-erase-region 0x30000000 0x8000
// 先初始化 XECC 模塊,然后以 ECC 方式寫入 Flash(寫入地址需要以 4KB 對齊)
blhost -u -- write-memory 0x30000000 bt_image_16KB.bin 0x9
// 每一次寫完 Flash 需要關(guān)閉 ECC 寫入功能
blhost -u -- set-property 13 0
痞子衡將 imxrt-ecc-flashloader 工程生成的可執(zhí)行文件(CM4版本)放到了 NXP-MCUBootUtilitysrctargetsMIMXRT1176flashloader_user.srec,讓工具用這個含 ECC 功能的 Flashloader,并且在工具通用編程器界面增加了 ECC Write 按鈕,這個按鈕可以一鍵完成 .bin 格式文件的 ECC 方式下載。
- Note: v3.5版本工具里沒有自動集成 ECC 使能的 Fuse 位燒寫,因為 Fuse 燒寫完,芯片需要復(fù)位一次,XECC 才生效,所以用戶需要自己手動燒寫 Fuse。
至此,這次更新的主要特性便介紹完了。MCUBootUtility項目地址如下。雖然當(dāng)前版本(v3.5.0)功能已經(jīng)非常完備,你還是可以在此基礎(chǔ)上再添加自己想要的功能。如此神器,還不快快去下載試用?
- 地址1:https://github.com/NXPMicro/mcu-boot-utility地址2:https://github.com/JayHeng/NXP-MCUBootUtility地址3:https://gitee.com/jayheng/NXP-MCUBootUtility