資料介紹
描述
介紹
*2021 年 9 月更新* Bootloader 和固件更新系統(tǒng)現(xiàn)在作為GitHub 上的STM32 Secure Patching Bootloader的一部分提供。
*更新于2020 年 12 月*演示現(xiàn)在使用引導(dǎo)加載程序中的嵌入式 USB 主機來使用 USB 閃存驅(qū)動器更新主應(yīng)用程序。
每個物聯(lián)網(wǎng)和嵌入式系統(tǒng)都需要一種在現(xiàn)場更新固件的方法。除了最簡單的項目,添加功能、修復(fù)和推出更新已成為每個軟件項目的常態(tài),固件也不例外。
該項目描述并演示了適用于 STM32 MCU 的完整固件更新解決方案,提供行業(yè)領(lǐng)先的功能集,包括:
- 加密
- 驗證
- 增量修補
- 雙圖像
- 外部 (Q)SPI 閃存上的圖像托管
- 構(gòu)建工具和 IDE 集成
- 集成 USB 主機,用于使用 USB 閃存驅(qū)動器進行更新
該解決方案旨在支持現(xiàn)場更新最先進的固件應(yīng)用程序——例如那些包含TouchGFX等 UI的應(yīng)用程序。我們稱之為多段的新功能使用 TouchGFX 實現(xiàn)固件應(yīng)用程序的無縫啟動、更新和修補,這些應(yīng)用程序分布在內(nèi)存映射的外部 SPI 閃存上——將內(nèi)部和外部閃存的組合視為一個邏輯活動區(qū)域。
有了這個新功能,現(xiàn)在可以在 STM32 MCU 上為 8 MB GUI 應(yīng)用程序系統(tǒng)中的單個 GUI 資產(chǎn)(比如 32 KB 圖標)打補丁。該固件更新系統(tǒng)可以在您的應(yīng)用程序沒有任何限制的情況下做到這一點。
許多 STM32 MCU 包括具有主機功能的 USB OTG 內(nèi)核(想想 L4、F4 等),因此 FM-SBSFU 與這種用戶友好的更新方法相結(jié)合,廣泛適用于采用 STM32 系列 MCU 的嵌入式設(shè)備。
此外,還有一些模塊可用于通過幾乎任何方法以 OTA 方式下載補丁,包括:
- 蜂窩網(wǎng)絡(luò)(HTTP/FTP - 適用于各種系統(tǒng))
- LoRaWAN(對于小型物聯(lián)網(wǎng)項目,打補丁是必須的)
- USB 閃存驅(qū)動器(在這個新的更新演示中有特色 - 最終用戶的不錯選擇)
- 非接觸式 NFC(非常適合移動設(shè)備 - 萬歲,不需要藍牙!)
- YMODEM over UART(在之前的演示中有特色,更具技術(shù)性)
- 自定義(以太網(wǎng)等)
補丁和編程文件在每次構(gòu)建結(jié)束時使用構(gòu)建后 shell 和 python 腳本自動生成。我們已將其部署到 STM32CubeIDE。
如果您對此感興趣,請繼續(xù)閱讀。我們將深入了解其工作原理。讓我們從一個演示開始。
TouchGFX 固件更新演示
本demo在STM32F769I-DISCO上運行,將經(jīng)歷補丁更新應(yīng)用程序的過程。該演示會將中間圖像從“彩球”更改為水肺潛水員的圖像。
要運行演示,您需要一個STM32F769I-DISCO板、一個 USB 閃存驅(qū)動器、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 記憶棒上,將其插入適配器,按下復(fù)位鍵。看到版本從 1 增加到 2,中間的圖像由于安全補丁文件的內(nèi)容而改變。詳情如下。
.hex文件在每次構(gòu)建結(jié)束時自動生成,并結(jié)合了安全引導(dǎo)加載程序、應(yīng)用程序和 DISCO 的 QSPI 閃存的內(nèi)容:分配給ExtFlashSection部分的所有內(nèi)容。將所有元素組合到一個編程文件中,可以輕松地一步對您的設(shè)備進行編程。
.sfbp文件是一個安全補丁 -使用您自己的 AES 和 ECDSA 密鑰加密和簽名 - 僅包含設(shè)備內(nèi)部和外部閃存上已有的內(nèi)容與新版本之間的差異。這些差異應(yīng)用于現(xiàn)有應(yīng)用程序,以創(chuàng)建位于專用 QSPI 段中的第二個更新映像。在引導(dǎo)加載程序(再次)完全驗證重建的更新映像之前,不會觸及主應(yīng)用程序。在此演示中,.sfbp文件僅包含新“水肺潛水員”圖像的內(nèi)容和一些應(yīng)用程序字符串修改。
對.hex 文件進行編程
啟動 STM32CubeProgrammer 并確保通過單擊左下方區(qū)域的圖標選擇“ External Loader ”。為 STM32F769I-DISCO 選擇加載程序。打開上面鏈接或附件中下載的hex文件進行燒錄,點擊program。編程過程擦除必要的內(nèi)部和外部閃存扇區(qū),然后將 hex 文件的內(nèi)容寫入正確的位置,包括引導(dǎo)加載程序、應(yīng)用程序和 QSPI。
運行應(yīng)用程序
重置電路板(這在編程后自動發(fā)生)并觀察此終端輸出到 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 閃存中。
執(zhí)行更新
要執(zhí)行更新,請將更新補丁文件 MultiSegPatchDemo-USBFlash_STM32F7DISCO_v1.0.0_v2.0.0.sfbp 文件復(fù)制到 USB 閃存驅(qū)動器,將驅(qū)動器插入 USB micro-A 到 A 適配器并按下重置按鈕。如文件名所示,此補丁用于將“v1.0.0”更新為“v2.0.0”。它非常精確:要更新的圖像的 SHA-256 哈希標簽和最終重建的圖像包含在補丁文件中,以 100% 確定補丁過程每次都成功完成或根本不完成,以防萬一補丁對于設(shè)備上的固件不正確。
傳輸補丁、重建最終更新映像以及復(fù)制主應(yīng)用程序插槽 (SLOT 0) 的頂部都是通過 USB 閃存驅(qū)動器快速完成的,主要受限于所涉及的閃存扇區(qū)的擦除次數(shù)。按下重置按鈕后,您將看到從頭到尾的更新以及更新進度跟蹤,如下所示:
= [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
引導(dǎo)程序
FM-SBSFU 引導(dǎo)加載程序接管每個設(shè)備引導(dǎo)。它在Download SLOT 1中尋找有效的、完整的和重建的更新圖像在 QSPI 閃存中。如果它找到這樣的圖像,就像它在執(zhí)行補丁的 USB 閃存更新后所做的那樣,它會將新固件的版本號與活動固件進行比較。如果新固件更高,例如 2.0.0 對 1.0.0 或 1.0.1 對 1.0.0,則執(zhí)行更新:活動圖像被擦除并復(fù)制新圖像。如果活動映像已損壞且僅當(dāng)新固件具有相同或更高版本時,才會執(zhí)行更新。如果缺少活動圖像,則從任何版本執(zhí)行更新。活動圖像標頭位于設(shè)備的安全內(nèi)部閃存內(nèi),無法操縱它來安裝位于不安全外部閃存中的舊版本固件。
請注意,當(dāng)我們使用此處介紹的 USB 閃存驅(qū)動器方法從 SBSFU(引導(dǎo)加載程序)執(zhí)行更新時,補丁和更新過程是在線進行的,中間沒有重置。新應(yīng)用程序立即啟動。另一方面,如果主應(yīng)用程序正在使用某種 OTA 更新方法(例如通過蜂窩 HTTP)下載和安裝補丁,它顯然不能覆蓋自身并且必須重置以便引導(dǎo)加載程序接管并執(zhí)行如上所述的更新。
FM-SBSFU 引導(dǎo)加載程序的工作是確保有效且最新版本的固件在設(shè)備上處于活動狀態(tài)。如果主應(yīng)用程序因任何原因損壞,引導(dǎo)加載程序會通過重新安裝主應(yīng)用程序(受版本檢查)來糾正該問題。引導(dǎo)加載程序使用 ECDSA 執(zhí)行所有身份驗證檢查,以確保只有您的構(gòu)建系統(tǒng)簽名的固件才能進入您的設(shè)備。這些相同的檢查由補丁系統(tǒng)和引導(dǎo)加載程序完成,以確保設(shè)備的最大安全性、正常運行時間和可用性。
更新完成后,應(yīng)用程序啟動,在顯示屏上您會注意到中間的圖像已更改為水肺潛水員的圖像!
QSPI flash上??TouchGFX應(yīng)用的補丁更新已經(jīng)順利完成。想象一下如何將這些技術(shù)應(yīng)用到具有外部 QSPI 閃存的物聯(lián)網(wǎng)和嵌入式系統(tǒng)產(chǎn)品中!
演示 Flash 布局
現(xiàn)在您已經(jīng)看到了演示應(yīng)用程序,我們可以更詳細地討論一下 Flash 布局。demo應(yīng)用程序按如下方式放置在MCU內(nèi)部flash和板卡QSPI flash中。此位置由構(gòu)建工具自動設(shè)置,并包含在.hex文件和引導(dǎo)加載程序和補丁系統(tǒng)中。
ExtFlashSection(資源)內(nèi)容映射到 MCU 內(nèi)存地址(0x9000 0000),該地址在內(nèi)存映射模式下為 QSPI 保留。內(nèi)存映射模式允許固件指令從 QSPI 訪問數(shù)據(jù),就好像它在閃存 (0x0800 0000) 或 SRAM (0x2000 0000) 等任何其他內(nèi)存空間中一樣。好處是訪問圖像等 GUI 資源不必通過 SPI 閃存固件驅(qū)動程序?qū)樱篠TM32 MCU QSPI 外設(shè)負責(zé)處理。當(dāng) TouchGFX 在此模式下運行時,引導(dǎo)加載程序和修補系統(tǒng)使用直接 QSPI 模式執(zhí)行讀取、寫入和擦除。
概括
您已經(jīng)了解了一系列先進技術(shù),可以在結(jié)合內(nèi)部和外部閃存以及 USB 主機以通過 USB 閃存驅(qū)動器進行更新的項目中,在現(xiàn)場無縫部署和更新固件。
如果您想了解更多信息和/或有興趣以比自己安裝更快且成本更低的方式安裝此系統(tǒng),
查看我們的 FM-SBSFU 項目:
- STM32F7系列的外設(shè)互連
- STM32F7技術(shù)--高速緩存
- UM1907_基于STM32F746NG的STM32F7系列探索套件
- UM2470_采用STM32F750N8MCU的STM32F7系列探索套件
- AN4936_從STM32F7到STM32H7的軟件移植
- AN4031_STM32F2、STM32F4和STM32F7系列的DMA控制器的應(yīng)用
- AN4731_適用于STM32F7系列的STM32Cube固件例程
- AN5293 STM32F7系列移植到STM32H7系列
- AN5293 STM32F7系列移植到STM32H7系列
- STM32F7系列上緩存 3次下載
- STM32F7與STM32F4復(fù)位序列比較 0次下載
- 32位單片機STM32F7外擴QSPI SRAM芯片
- STM32F7與STM32F4之復(fù)位序列比較
- STM32F7與STM32F4的復(fù)位序列比較 0次下載
- STM32F7介紹 0次下載
- 泰凌微電子藍牙Mesh設(shè)備固件更新功能和測試說明(一) 1427次閱讀
- 如何添加觸摸屏驅(qū)動到TouchGFX中? 1674次閱讀
- 批量更新固件工具ControlFLASH Plus使用方法 3917次閱讀
- TouchGFX界面開發(fā):TouchGFX軟件安裝 1319次閱讀
- 超低功耗MCU的安全固件更新注意事項 956次閱讀
- STM32程序HEX文件中加入固件版本信息 4166次閱讀
- stm32f030和stm32f103功能差異 2.1w次閱讀
- 微雪電子32F746GDISCOVERY STM32F7開發(fā)板簡介 4040次閱讀
- STM32的多個ADC模塊如何同時采樣轉(zhuǎn)換詳細應(yīng)用實例說明 3.3w次閱讀
- 基于STM32介紹DMA的雙緩沖模式 2.3w次閱讀
- Cortex-M3處理器中斷和FreeRTOS中斷優(yōu)先級配置 6920次閱讀
- 蘋果將為中國的iPhone用戶發(fā)布軟件更新系統(tǒng)解決合規(guī)問題 2923次閱讀
- STM32單片機固件庫建立工程的方法及步驟 5874次閱讀
- 基于ARM?Cortex?-M7內(nèi)核的高性能微控制器STM32F7系列特色分析 4315次閱讀
- 《振南電子STM32視頻教程》第二講:STM32固件庫說明 1444次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發(fā)指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應(yīng)用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關(guān)電源設(shè)計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅(qū)動電路設(shè)計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 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十天學(xué)會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論
查看更多