概述
在 STM32WB 微控制器中,FUS(Firmware Upgrade Services)是用于固件升級的一種服務。這項服務可以讓你更新設備上的無線棧固件(如藍牙、Zigbee或 Thread 棧),以及無線 MCU (microcontroller unit) 的系統服務。
FUS 實質上是設備的一部分固件,它可以獨立于主應用程序運行,主要負責安全地處理設備固件的升級。這包括檢查新固件的有效性,確保新固件被正確地寫入設備,以及在出現問題時回滾到舊版本的固件。
總的來說,FUS 是 STM32WB 和其他 STM32 無線微控制器中一個非常重要的組件,可以確保設備固件的安全更新。
最近在弄ST的教程,需要樣片的可以加群申請:615061293/925643491 。
硬件準備
首先需要準備一個開發板,這里我準備的是自己繪制的開發板,需要的可以進行申請。
主控為STM32WB55RGV6
視頻教學
[https://www.bilibili.com/video/BV1nYmzY6EE9/]
樣品申請
[https://www.wjx.top/vm/OhcKxJk.aspx#]
源碼下載
[https://download.csdn.net/download/qq_24312945/90044071]
參考程序
[https://github.com/CoreMaker-lab/STM32WB55_SENSOR]
[https://gitee.com/CoreMaker/STM32WB55_SENSOR](
固件升級
FUS(固件升級服務)是在 STM32WB Cortex?-M0+上運行的固件,并提供安裝、升級或刪除 STM32WB Cortex?-M0+無線協議棧
存儲器映射
FUS 在 Flash 存儲器中有一個專用空間,該空間取決于 FUS 大小。它還使用 SRAM2a 和 SRAM2b 中的專用空間
以及 SRAM2a(共享表)中的共享空間。由選項字節定義 Flash 存儲器 SRAM2a 和 SRAM2b 中的專用空間大小。
若需更多信息,請參見產品參考手冊。
與無線協議棧(如果安裝)共享專用 Flash 存儲器和 SRAM 區域。但在給定時間,只能在 Cortex?-M0+上運行
FUS 或無線協議棧。
FLASH安全區設置
安全CPU2可以通過加載新的用戶選項SFSA來修改CPU2的安全起始地址。
從閃存存儲器的基地址開始加上[SFSA x 0x1000](包含),直到最后一個閃存存儲器地址。當啟用CPU2安全性時,CPU2安全區域的最小大小為一個扇區(4K字節)。
例如,一個從地址0x080C 7000(包含)到地址0x080F FFFF(包含)的CPU2安全區域。
SFSA[7:0]包含了安全閃存存儲區域第一個4K字節頁面的起始地址。
SRAM安全區設置
CPU2安全SRAM2a和SRAM2b區域以1 K字節的粒度定義,并通過安全備份RAM(SRAM2a)起始地址的用戶選項(BRSD和SBRSA)以及安全非備份RAM(SRAM2b)起始地址的用戶選項(NBRSD和SNBRSA)定義在閃存中。這些偏移由閃存內的安全SRAM2起始地址和CPU2復位向量寄存器(FLASH_SRRVR)中的SBRSA和SNBRSA字段控制。
CPU2安全的SRAM2a區域定義為備份SRAM2a基地址 + [SBRSA x 0x0400](包括),直到最后一個SRAM2a地址。
例如,對于CPU2安全的SRAM2a區域,從地址0x20035000(包括)到地址0x20037FFF(包括),需要將FLASH_SRRVR寄存器編程為SBRSA = 0x14。
任何CPU1的讀取訪問都不返回數據,并且對CPU2安全SRAM2a區域的寫訪問會被丟棄并觸發總線錯誤。
當BRSD設置為1時,SRAM2a是非安全的。
CPU2安全的非備份SRAM2b區域定義為非備份SRAM2b基地址 + [SNBRSA x 0x0400](包括),直到最后一個SRAM2b地址。
例如,對于CPU2安全的SRAM2b區域,從地址0x2003EC00(包括)到地址0x2003FFFF(包括),需要將FLASH_SRRVR寄存器編程為SNBRSA = 0x1B。
任何CPU1的讀取訪問都不返回數據,并且對CPU2安全SRAM2b區域的寫訪問會被丟棄并觸發總線錯誤。
當NBRSD設置為1時,SRAM2b是非安全的。
FUS 版本兼容性
FUS固件下載
Firmware Update Service(FUS)是一種用于在STM32WB微控制器上更新固件的功能。FUS下載是指通過FUS服務進行固件更新的過程。通過FUS下載,您可以通過無線方式將新的固件加載到STM32WB設備中,而無需使用傳統的有線編程方法。 在ST官網中提供了固件,下載地址:
[https://www.st.com/zh/embedded-software/stm32cubewb.html]
下載完畢之后,打開該目錄,有對應的版本說明文檔。
固件升級流程如下所示。
打開STM32CubeProgrammer,連接開發板。 進入固件升級服務,點擊Start FUS。
連接成功會彈出如下所示窗口,若沒鏈接成功,可以點擊復位鍵。
可以使用STM32CubeProgrammer軟件,通過點擊"Read FUS infos"按鈕,來讀取安裝在STM32WB微控制器中的FUS(Firmware Update Service)版本信息。這里的FUS版本為V0.5.3.0
通過打開上述的"Release_Notes.html"說明文檔,可以查看固件包中不同MCU所對應的地址差異。 同時這里要求的固件包為V1.2.0,如果不是的話需要進行 STEP 5/6 。
這里選擇stm32wb5x_BLE_Stack_full_fw.bin進行升級,是一個藍牙5.3的固件。
選擇相應的固件文件和起始地址后,您可以查看對應的固件等級,并點擊"Firmware Upgrade"按鈕進行固件升級。
升級成功如下所示。
若出現如下報錯,說明沒有進行第五步。
需要進行第五步,stm32wb5x_FUS_fw_for_fus_0_5_3.bin 這個二進制文件是用于刷新無線協處理器二進制文件的實用程序。
選中stm32wb5x_FUS_fw_for_fus_0_5_3.bin,同時輸入對應的地址進行升級。
成功升級會顯示如下所示窗口。
重新讀取FUS版本,可以看見已經由之前的V0.5.3.0變為了V1.2.0.0
重新升級stm32wb5x_BLE_Stack_full_fw.bin。
這個時候可以查看到固件是升級成功了的。
最后我們可以進行第八步,設置boot寄存器。
通過USB進行下載
通過USB下載固件的具體流程如下所示。
通過usb進行下載,需要進行一些跳線帽的設置。
同時需要將BOOT0進行上拉以及設置nSWboot0=1為1。
設置nSWboot0=1為1。
切換為USB連接,連接上如下所示。
對于FUS版本,不同的FUS版本對應的步驟不一樣。
由于我之前升級過了,可以直接下載固件。
下載成功如下所示。
注意事項
協議棧下載進去了可能無法運行,需要Start Wireless Stack。
審核編輯 黃宇
-
藍牙
+關注
關注
114文章
5823瀏覽量
170313 -
STM32
+關注
關注
2270文章
10900瀏覽量
355982
發布評論請先 登錄
相關推薦
評論