資料介紹
描述
介紹
*2021 年 9 月更新* Bootloader 和固件更新系統現在作為GitHub 上的STM32 Secure Patching Bootloader的一部分提供。
*更新于2020 年 12 月*演示現在使用引導加載程序中的嵌入式 USB 主機來使用 USB 閃存驅動器更新主應用程序。
每個物聯網和嵌入式系統都需要一種在現場更新固件的方法。除了最簡單的項目,添加功能、修復和推出更新已成為每個軟件項目的常態,固件也不例外。
該項目描述并演示了適用于 STM32 MCU 的完整固件更新解決方案,提供行業領先的功能集,包括:
- 加密
- 驗證
- 增量修補
- 雙圖像
- 外部 (Q)SPI 閃存上的圖像托管
- 構建工具和 IDE 集成
- 集成 USB 主機,用于使用 USB 閃存驅動器進行更新
該解決方案旨在支持現場更新最先進的固件應用程序——例如那些包含TouchGFX等 UI的應用程序。我們稱之為多段的新功能使用 TouchGFX 實現固件應用程序的無縫啟動、更新和修補,這些應用程序分布在內存映射的外部 SPI 閃存上——將內部和外部閃存的組合視為一個邏輯活動區域。
有了這個新功能,現在可以在 STM32 MCU 上為 8 MB GUI 應用程序系統中的單個 GUI 資產(比如 32 KB 圖標)打補丁。該固件更新系統可以在您的應用程序沒有任何限制的情況下做到這一點。
許多 STM32 MCU 包括具有主機功能的 USB OTG 內核(想想 L4、F4 等),因此 FM-SBSFU 與這種用戶友好的更新方法相結合,廣泛適用于采用 STM32 系列 MCU 的嵌入式設備。
此外,還有一些模塊可用于通過幾乎任何方法以 OTA 方式下載補丁,包括:
- 蜂窩網絡(HTTP/FTP - 適用于各種系統)
- LoRaWAN(對于小型物聯網項目,打補丁是必須的)
- USB 閃存驅動器(在這個新的更新演示中有特色 - 最終用戶的不錯選擇)
- 非接觸式 NFC(非常適合移動設備 - 萬歲,不需要藍牙!)
- YMODEM over UART(在之前的演示中有特色,更具技術性)
- 自定義(以太網等)
補丁和編程文件在每次構建結束時使用構建后 shell 和 python 腳本自動生成。我們已將其部署到 STM32CubeIDE。
如果您對此感興趣,請繼續閱讀。我們將深入了解其工作原理。讓我們從一個演示開始。
TouchGFX 固件更新演示
本demo在STM32F769I-DISCO上運行,將經歷補丁更新應用程序的過程。該演示會將中間圖像從“彩球”更改為水肺潛水員的圖像。
要運行演示,您需要一個STM32F769I-DISCO板、一個 USB 閃存驅動器、STM32CubeProgrammer和兩個演示文件:一個 main . hex編程文件和.sfbp更新補丁文件,位于該項目末尾的附件(“原理圖”)部分:
- SBSFU_MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0.hex
- MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0_v2.0.0.sfbp
簡而言之,要運行演示 1) 使用 STM32CubeProgrammer 加載 .hex 文件,以及 2) 將 .sfbp 放到 USB 記憶棒上,將其插入適配器,按下復位鍵。看到版本從 1 增加到 2,中間的圖像由于安全補丁文件的內容而改變。詳情如下。
.hex文件在每次構建結束時自動生成,并結合了安全引導加載程序、應用程序和 DISCO 的 QSPI 閃存的內容:分配給ExtFlashSection部分的所有內容。將所有元素組合到一個編程文件中,可以輕松地一步對您的設備進行編程。
.sfbp文件是一個安全補丁 -使用您自己的 AES 和 ECDSA 密鑰加密和簽名 - 僅包含設備內部和外部閃存上已有的內容與新版本之間的差異。這些差異應用于現有應用程序,以創建位于專用 QSPI 段中的第二個更新映像。在引導加載程序(再次)完全驗證重建的更新映像之前,不會觸及主應用程序。在此演示中,.sfbp文件僅包含新“水肺潛水員”圖像的內容和一些應用程序字符串修改。
對.hex 文件進行編程
啟動 STM32CubeProgrammer 并確保通過單擊左下方區域的圖標選擇“ External Loader ”。為 STM32F769I-DISCO 選擇加載程序。打開上面鏈接或附件中下載的hex文件進行燒錄,點擊program。編程過程擦除必要的內部和外部閃存扇區,然后將 hex 文件的內容寫入正確的位置,包括引導加載程序、應用程序和 QSPI。
運行應用程序
重置電路板(這在編程后自動發生)并觀察此終端輸出到 115200 N81 的 STLINK VCOM 端口。
= [SBOOT] RuntimeProtections: 0
= [SBOOT] System Security Check successfully passed. Starting...
QSPI Init status=2
= [FWIMG] Slot #0 @: 8080000 / Slot #1 @: 90400000 / Block size: 40000
======================================================================
= Firmware Modules =
= =
= Secure Boot and Secure Firmware Update =
= With Delta Patching =
= for STM32F7 =
= =
= *** Bootloader *** =
======================================================================
Build Date: Dec 15 2020 10:03:36
Build Version: v2.1.0-23-g5d206f7
Anti-rollback: Enabled
= [SBOOT] STATE: WARNING: SECURE ENGINE INITIALIZATION WITH FACTORY DEFAULT VALUES!
= [SBOOT] STATE: CHECK STATUS ON RESET
INFO: A Reboot has been triggered by a Software reset!
Consecutive Boot on error counter reset
Consecutive Boot on error counter = 0
Consecutive Boot on error counter updated
INFO: Last execution status before Reboot was:Checking Status on Reset.
INFO: Last execution detected error was:No error. Success.
= [SBOOT] STATE: CHECK NEW FIRMWARE TO DOWNLOAD
= [SBOOT] STATE: CHECK FLASH MEDIA
= [SBOOT] No valid firmware found on flash media, status=1
= [SBOOT] STATE: CHECK USER FW STATUS
= [FWIMG] No valid header found in slot 1.
A valid FW is installed in the active slot - version: 4096
= [SBOOT] STATE: EXECUTE USER FIRMWARE
======================================================================
= Firmware Modules FM-SBSFU =
= https://firmwaremodules.com =
= =
= Secure Boot and Secure Firmware Update =
= For STM32F7 =
= Multi-Segment QSPI Delta Patch FM-SBSFU Demo =
= With USB Flash Loader =
= =
= *** Demonstration Application *** =
======================================================================
FW Version: 1.0.0
FW Build: v2.1.0-23-g5d206f7
FW Tag: 0x6D70087E
QSPI string: This is a message from QSPI!
Images @ 0x90000000 0x9001c28a 0x90038514
=================== Main Menu ============================
Download a new Fw Image ------------------------------- 1
Read Application Info ----------------------------- 2
在屏幕上您將看到版本 1 圖像集:
每張圖片大約 112 KB。.sfbp補丁文件僅更改了一些文本字符串和中間圖像,因此大約為 113 KB。文本字符串駐留在 MCU 閃存中,而圖像駐留在 QSPI 閃存中。
執行更新
要執行更新,請將更新補丁文件 MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0_v2.0.0.sfbp 文件復制到 USB 閃存驅動器,將驅動器插入 USB micro-A 到 A 適配器并按下重置按鈕。如文件名所示,此補丁用于將“v1.0.0”更新為“v2.0.0”。它非常精確:要更新的圖像的 SHA-256 哈希標簽和最終重建的圖像包含在補丁文件中,以 100% 確定補丁過程每次都成功完成或根本不完成,以防萬一補丁對于設備上的固件不正確。
傳輸補丁、重建最終更新映像以及復制主應用程序插槽 (SLOT 0) 的頂部都是通過 USB 閃存驅動器快速完成的,主要受限于所涉及的閃存扇區的擦除次數。按下重置按鈕后,您將看到從頭到尾的更新以及更新進度跟蹤,如下所示:
= [SBOOT] STATE: CHECK NEW FIRMWARE TO DOWNLOAD
= [SBOOT] STATE: CHECK FLASH MEDIA
Open update file [MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0_v2.0.0.sfbp] 115488 bytes
[ ] 0%
[ ] 1%
[. ] 2%
[. ] 3%
[. ] 4%
[.. ] 5%
[.. ] 6%
[.. ] 7%
[... ] 8%
[... ] 9%
[... ] 10%
[.... ] 11%
[.... ] 12%
[.... ] 13%
[.... ] 14%
[..... ] 15%
[..... ] 16%
[..... ] 17%
[...... ] 18%
[...... ] 19%
[...... ] 20%
[....... ] 21%
[....... ] 22%
[....... ] 23%
[........ ] 24%
[........ ] 25%
[........ ] 26%
[......... ] 27%
[......... ] 28%
[......... ] 29%
[.......... ] 30%
[.......... ] 31%
[.......... ] 32%
[........... ] 33%
[........... ] 34%
[........... ] 35%
[............ ] 36%
[............ ] 37%
[............ ] 38%
[............ ] 39%
[............. ] 40%
[............. ] 41%
[............. ] 42%
[.............. ] 43%
[.............. ] 44%
[.............. ] 45%
[............... ] 46%
[............... ] 47%
[............... ] 48%
[................ ] 49%
[................ ] 50%
= [SBOOT] Firmware patched from flash media and ready to install, status=1
= [SBOOT] STATE: CHECK USER FW STATUS
= [FWIMG] Valid header found in slot 1. Version=8192 Size=390064
= [FWIMG] Valid installation trigger header found in slot 1.
Potentially valid backup or update firmware present and ready in SLOT 1 - see if it needs to and can be installed.
= [SBOOT] STATE: INSTALL NEW USER FIRMWARE
[................ ] 50%
[................ ] 51%
[................. ] 52%
[................. ] 53%
[................. ] 54%
[.................. ] 55%
[.................. ] 56%
[.................. ] 57%
[................... ] 58%
[................... ] 59%
[................... ] 60%
[.................... ] 61%
[.................... ] 62%
[.................... ] 63%
[.................... ] 64%
[..................... ] 65%
[..................... ] 66%
[..................... ] 67%
[...................... ] 68%
[...................... ] 69%
[...................... ] 70%
[....................... ] 71%
[....................... ] 72%
[....................... ] 73%
[........................ ] 74%
[........................ ] 75%
[........................ ] 76%
[......................... ] 77%
[......................... ] 78%
[......................... ] 79%
[.......................... ] 80%
[.......................... ] 81%
[.......................... ] 82%
[........................... ] 83%
[........................... ] 84%
[........................... ] 85%
[............................ ] 86%
[............................ ] 87%
[............................ ] 88%
[............................ ] 89%
[............................. ] 90%
[............................. ] 91%
[............................. ] 92%
[.............................. ] 93%
[.............................. ] 94%
[.............................. ] 95%
[............................... ] 96%
[............................... ] 97%
[............................... ] 98%
[................................] 99%
[................................] 100%
= [FWIMG] FW installation succeeded.
= [SBOOT] STATE: VERIFY USER FW SIGNATURE
= [SBOOT] STATE: EXECUTE USER FIRMWARE
======================================================================
= Firmware Modules FM-SBSFU =
= https://firmwaremodules.com =
= =
= Secure Boot and Secure Firmware Update =
= For STM32F7 =
= Multi-Segment QSPI Delta Patch FM-SBSFU Demo =
= With USB Flash Loader =
= =
= *** Demonstration Application *** =
======================================================================
FW Version: 2.0.0
FW Build: v2.1.0-23-g5d206f7
FW Tag: 0x7DCDB900
QSPI string: This is a message from QSPI!
Images @ 0x90000000 0x9001c28a 0x90038514
引導程序
FM-SBSFU 引導加載程序接管每個設備引導。它在Download SLOT 1中尋找有效的、完整的和重建的更新圖像在 QSPI 閃存中。如果它找到這樣的圖像,就像它在執行補丁的 USB 閃存更新后所做的那樣,它會將新固件的版本號與活動固件進行比較。如果新固件更高,例如 2.0.0 對 1.0.0 或 1.0.1 對 1.0.0,則執行更新:活動圖像被擦除并復制新圖像。如果活動映像已損壞且僅當新固件具有相同或更高版本時,才會執行更新。如果缺少活動圖像,則從任何版本執行更新。活動圖像標頭位于設備的安全內部閃存內,無法操縱它來安裝位于不安全外部閃存中的舊版本固件。
請注意,當我們使用此處介紹的 USB 閃存驅動器方法從 SBSFU(引導加載程序)執行更新時,補丁和更新過程是在線進行的,中間沒有重置。新應用程序立即啟動。另一方面,如果主應用程序正在使用某種 OTA 更新方法(例如通過蜂窩 HTTP)下載和安裝補丁,它顯然不能覆蓋自身并且必須重置以便引導加載程序接管并執行如上所述的更新。
FM-SBSFU 引導加載程序的工作是確保有效且最新版本的固件在設備上處于活動狀態。如果主應用程序因任何原因損壞,引導加載程序會通過重新安裝主應用程序(受版本檢查)來糾正該問題。引導加載程序使用 ECDSA 執行所有身份驗證檢查,以確保只有您的構建系統簽名的固件才能進入您的設備。這些相同的檢查由補丁系統和引導加載程序完成,以確保設備的最大安全性、正常運行時間和可用性。
更新完成后,應用程序啟動,在顯示屏上您會注意到中間的圖像已更改為水肺潛水員的圖像!
QSPI flash上??TouchGFX應用的補丁更新已經順利完成。想象一下如何將這些技術應用到具有外部 QSPI 閃存的物聯網和嵌入式系統產品中!
演示 Flash 布局
現在您已經看到了演示應用程序,我們可以更詳細地討論一下 Flash 布局。demo應用程序按如下方式放置在MCU內部flash和板卡QSPI flash中。此位置由構建工具自動設置,并包含在.hex文件和引導加載程序和補丁系統中。
ExtFlashSection(資源)內容映射到 MCU 內存地址(0x9000 0000),該地址在內存映射模式下為 QSPI 保留。內存映射模式允許固件指令從 QSPI 訪問數據,就好像它在閃存 (0x0800 0000) 或 SRAM (0x2000 0000) 等任何其他內存空間中一樣。好處是訪問圖像等 GUI 資源不必通過 SPI 閃存固件驅動程序層:STM32 MCU QSPI 外設負責處理。當 TouchGFX 在此模式下運行時,引導加載程序和修補系統使用直接 QSPI 模式執行讀取、寫入和擦除。
概括
您已經了解了一系列先進技術,可以在結合內部和外部閃存以及 USB 主機以通過 USB 閃存驅動器進行更新的項目中,在現場無縫部署和更新固件。
如果您想了解更多信息和/或有興趣以比自己安裝更快且成本更低的方式安裝此系統,
查看我們的 FM-SBSFU 項目:
- STM32F7系列的外設互連
- STM32F7技術--高速緩存
- UM1907_基于STM32F746NG的STM32F7系列探索套件
- UM2470_采用STM32F750N8MCU的STM32F7系列探索套件
- AN4936_從STM32F7到STM32H7的軟件移植
- AN4031_STM32F2、STM32F4和STM32F7系列的DMA控制器的應用
- AN4731_適用于STM32F7系列的STM32Cube固件例程
- AN5293 STM32F7系列移植到STM32H7系列
- AN5293 STM32F7系列移植到STM32H7系列
- STM32F7系列上緩存 3次下載
- STM32F7與STM32F4復位序列比較 0次下載
- 32位單片機STM32F7外擴QSPI SRAM芯片
- STM32F7與STM32F4之復位序列比較
- STM32F7與STM32F4的復位序列比較 0次下載
- STM32F7介紹 0次下載
- 泰凌微電子藍牙Mesh設備固件更新功能和測試說明(一) 1427次閱讀
- 如何添加觸摸屏驅動到TouchGFX中? 1674次閱讀
- 批量更新固件工具ControlFLASH Plus使用方法 3917次閱讀
- TouchGFX界面開發:TouchGFX軟件安裝 1319次閱讀
- 超低功耗MCU的安全固件更新注意事項 956次閱讀
- STM32程序HEX文件中加入固件版本信息 4166次閱讀
- stm32f030和stm32f103功能差異 2.1w次閱讀
- 微雪電子32F746GDISCOVERY STM32F7開發板簡介 4040次閱讀
- STM32的多個ADC模塊如何同時采樣轉換詳細應用實例說明 3.3w次閱讀
- 基于STM32介紹DMA的雙緩沖模式 2.3w次閱讀
- Cortex-M3處理器中斷和FreeRTOS中斷優先級配置 6920次閱讀
- 蘋果將為中國的iPhone用戶發布軟件更新系統解決合規問題 2923次閱讀
- STM32單片機固件庫建立工程的方法及步驟 5874次閱讀
- 基于ARM?Cortex?-M7內核的高性能微控制器STM32F7系列特色分析 4315次閱讀
- 《振南電子STM32視頻教程》第二講:STM32固件庫說明 1444次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多