1. 程式人生 > 其它 >痞子衡嵌入式:MCUBootUtility v3.5釋出,支援序列NOR的ECC及雙程式啟動

痞子衡嵌入式:MCUBootUtility v3.5釋出,支援序列NOR的ECC及雙程式啟動

--
  痞子衡維護的 NXP-MCUBootUtility 工具距離上一個大版本(v3.4.0)釋出過去半年了,這一次痞子衡為大家帶來了版本升級 v3.5.0,這個版本主要有幾個非常重要的更新需要跟大家特別說明一下。

一、v3.5更新記錄

二、幾個不可忽視的更新

2.1 支援序列NOR雙程式啟動下載

  部分 i.MXRT 型號 BootROM 支援序列 NOR Flash 的雙程式啟動,這意味著在這些型號上使用者可以不用額外設計二級 bootloader 也可以完成本地 OTA 升級。

  之前痞子衡把所有支援雙程式啟動的 i.MXRT 型號都試了一遍,一共寫了三篇文章,在文中痞子衡是藉助 MCUBootUtility v3.4 裡的通用程式設計器來手動做兩個 image 的下載的,並且 image 版本頭新增,以及 Fuse 燒寫也都是手工完成的,步驟稍顯複雜。

《i.MXRT1060,1010上序列NOR Flash冗餘程式啟動設計》
《i.MXRT1170上序列NOR Flash雙程式可交替啟動設計》
《i.MXRT500,600系列上序列NOR Flash雙程式可交替啟動設計》

  在 MCUBootUtility v3.5 上再去做同樣的事情就簡單多了,只需要在 FlexSPI NOR Device Configuration 介面裡設定雙程式啟動相關引數即可,工具會自動完成後續所有事情(燒寫相應 Fuse、新增 image 版本頭,燒寫兩份 image 進 Flash)。

  • Note1: Image 1 offset 保持預設 0,即不使能雙程式下載;如果設為非 0,這個值也會被燒寫進 Fuse。
  • Note2: Image 0/1 version 如果保持 none 值,在雙程式下載使能的情況下實際等同於 0xFFFF 值。

2.2 支援序列NOR的ECC方式下載

  在部分增強型 i.MXRT 型號上(比如 i.MXRT1170),晶片內部增加了很多 ECC 方面設計,從 RAM 到 Flash 再到 Fuse,全部都有 ECC 保護,這樣晶片可放心用於那些對穩定性要求高的產品場合(比如汽車)。

  在 i.MXRT1170 上是 XECC 模組負責了 FlexSPI 外設連線的 Flash 上 ECC 處理,痞子衡之前為此寫過一篇文章 《i.MXRT1170 XECC功能特點及其保護序列NOR Flash和SDRAM之道》

。但是官方 SDK 裡提供的 Flashloader (路徑在 \SDK_2.11.0_MIMXRT1170-EVK\boards\evkmimxrt1170\bootloader_examples\flashloader)並不支援 ECC 方式的寫入,而 MCUBootUtility 正是藉助這個官方 Flashloader 完成 Flash 的擦寫的,所以我們需要改這個官方 Flashloader,為此痞子衡建立了一個專案:

  在 imxrt-ecc-flashloader 工程裡,痞子衡引入了 XECC 模組驅動,並且將 ECC 功能整合到了 set-property 13 和 write-memory 這兩個命令裡。這裡有兩個注意點,一是:使能 ECC 寫入後,寫入首地址需要以 4KB 對齊(在 XECC 模組的限制下做的設定),二是:使能 ECC 寫入後,擦除長度需要是 image 長度的兩倍(XECC 原理決定的)。

// 初始化 Flash
blhost -u -- fill-memory 0x20200000 0x4 0xC0000005
blhost -u -- fill-memory 0x20200004 0x4 0x0
blhost -u -- configure-memory 0x9 0x20200000

// 關閉 ECC 寫入功能,復位 XECC 模組(預設配置)
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 需要關閉 ECC 寫入功能
blhost -u -- set-property 13 0

  痞子衡將 imxrt-ecc-flashloader 工程生成的可執行檔案(CM4版本)放到了 \NXP-MCUBootUtility\src\targets\MIMXRT1176\flashloader_user.srec,讓工具用這個含 ECC 功能的 Flashloader,並且在工具通用程式設計器介面增加了 ECC Write 按鈕,這個按鈕可以一鍵完成 .bin 格式檔案的 ECC 方式下載。

  • Note: v3.5版本工具裡沒有自動整合 ECC 使能的 Fuse 位燒寫,因為 Fuse 燒寫完,晶片需要復位一次,XECC 才生效,所以使用者需要自己手動燒寫 Fuse。

  至此,這次更新的主要特性便介紹完了。MCUBootUtility專案地址如下。雖然當前版本(v3.5.0)功能已經非常完備,你還是可以在此基礎上再新增自己想要的功能。如此神器,還不快快去下載試用?

歡迎訂閱

文章會同時釋出到我的 部落格園主頁CSDN主頁知乎主頁微信公眾號 平臺上。

微信搜尋"痞子衡嵌入式"或者掃描下面二維碼,就可以在手機上第一時間看了哦。