加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專業(yè)用戶
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長期合作伙伴
立即加入
  • 正文
    • 一、v2.3.1 更新記錄
    • 二、兩個不可忽視的更新
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請入駐 產(chǎn)業(yè)圖譜

MCUBootUtility v2.3.1發(fā)布,解決非空flash無法下載問題

2020/08/26
153
閱讀需 6 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

痞子衡維護(hù)的 NXP-MCUBootUtility 工具距離上一個版本(v2.3)發(fā)布過去 3 個月了,這一次痞子衡為大家?guī)砹诵“姹旧?v2.3.1(第一次做 x.y.z 中 z 級別更新),這個版本主要有兩個比較重要的改動需要跟大家特別說明一下。

一、v2.3.1 更新記錄

二、兩個不可忽視的更新

> 改進(jìn): 在使用 Flashloader 里擦除操作時,某些情況下需要先檢查目標(biāo)區(qū)域是否為空

> 修復(fù): 當(dāng)連接得到的 flash Page/Sector/Block Size 信息有誤時,無法做進(jìn)一步下載

2.1 確定指定 Flash 區(qū)域?yàn)榉强蘸笤俨?/strong>

我們知道,工具對于 i.MXRT1xxx 系列開發(fā)板的外掛 Flash 擦寫支持是通過加載二級

Flashloader 來實(shí)現(xiàn)的,而 Flashloader 來自于 SDK 包中的

boardsevkimxrt1xxxbootloader_examplesflashloader 工程。

Flashloader 中集成了完整的 FlexSPI NOR Flash 驅(qū)動,對于擦除操作,我們知道很多 Flash 都同時支持 4KB 和 64KB 擦除粒度,因?yàn)?Flashloader 是因 i.MXRT 芯片而異的,每個芯片的

具體 Flashloader 對于擦除的處理不盡相同,目前主要有兩個策略:

策略 1:永遠(yuǎn)用 64KB 的粒度去做擦除。

策略 2:混合使用 4KB 和 64KB 的粒度來做擦除,大區(qū)域先用 64KB,到小區(qū)域再用 4KB 細(xì)化。

對于工具 v1.1 及之前版本,這兩種策略的 Flashloader 配合工具使用都不會有問題。但是從 v1.2 開始,工具配合使用策略 1 的 Flashloader 會有一些問題。目前已知 RT1050 在 HAB 加密模式下,一鍵下載 App 后去回讀會發(fā)現(xiàn)偏移 0x2000 之后本該是 App 的地方全是 0xFF,沒能正確下載,原因是工具流程里會在下載完 App 之后寫一次 FDCB,而做擦除時因?yàn)榱6仁?64KB,所以誤擦了已下載的 App。

因此 v2.3.1 里的解決方案是,先判斷 FDCB 區(qū)域是否為全 0xFF,如果是的話,就不做擦除了,直接寫 FDCB。這個不是完美的解決方案,最好的方案還是修改 Flashloader 去使用策略 2 的擦除方法。

2.2 不依賴讀回的 Page/Sector/Block 信息去下載

工具在一鍵下載前首先需要連接上主芯片,在連接過程中會在左下角芯片狀態(tài)窗口顯示 Flash 的 Page/Sector/Block 信息,這個信息是從哪里來的呢?不同的情況下來源不同:

情況 1:如果當(dāng)前 Flash 是全空的(或者沒有 FDCB),那么 Flashloader 會讀取 Flash 中的 SFDP 表,根據(jù) SFDP 表中的信息(包含 Page/Sector/Block Size)自動生成用于啟動的 512bytes 的 FDCB 寫入 Flash 的起始地址處,并在軟件界面同步顯示。

情況 2:如果 Flash 中已有 FDCB(這個 FDCB 可能來自于 SDK 里的啟動頭,也可能是 Flashloader 讀 SFDP 表生成的),那么 Flashloader 便會復(fù)用這個信息,不再重新寫入 FDCB。

對于情況 2 中的 FDCB 來自于 SDK 里的啟動頭,如果啟動頭中沒有填充有效的 Page/Sector/Block Size 信息,那么在工具窗口你會看到 Page/Sector/Block Size = 0x0/0xFFFFFFFF 的情況下,在這種情況下工具無法再進(jìn)行后續(xù)下載,因?yàn)?v2.3 之前工具會用 Page/Sector Size 對擦除或燒寫的長度做對齊,顯然無法用 0x0/0xFFFFFFFF 做有效的對齊。

v2.3.1 做了改進(jìn),不再強(qiáng)制用 Page/Sector Size 對擦除或燒寫的長度做對齊,因?yàn)?Flashloader 里本身就對傳入的區(qū)域參數(shù)做了對齊處理。

至此,這次更新的主要特性便介紹完了。MCUBootUtility 項(xiàng)目地址為 https://github.com/JayHeng/NXP-MCUBootUtility, 雖然當(dāng)前版本(v2.3.1)功能已經(jīng)非常完備,你還是可以在此基礎(chǔ)上再添加自己想要的功能。如此神器,還不快快去下載試用?

相關(guān)推薦

電子產(chǎn)業(yè)圖譜

碩士畢業(yè)于蘇州大學(xué)電子信息學(xué)院,目前就職于恩智浦(NXP)半導(dǎo)體MCU系統(tǒng)部門,擔(dān)任嵌入式系統(tǒng)應(yīng)用工程師。痞子衡會定期分享嵌入式相關(guān)文章