1、需求源起
MCU固件升級可以通過編程器、調試器或其他設備輔助進行操作,但這種升級方式主要應用于產品研發評估及量產應用階段。產品量產或設備部署后,若面對大規模設備升級,把產品返廠做升級將面臨拆機、人工燒錄等繁瑣流程,費時費力。隨著物聯網的發展,越來越多的產品具備無線遠程通信能力,產生了更多通過遠程通訊接口進行固件升級的需求。
2、升級步驟
固件升級,就是當前設備運行的舊固件有系統漏洞或者要在現有設備添加新功能時,將設備中的舊固件更新為新的固件,使設備運行的程序滿足新的功能需求,從MCU內部層面來看就是新固件覆蓋舊固件,如圖1所示。
圖1固件升級示意圖
獲取新固件:通過NBIoT、WIFI、Bluetooth、LoRa、ZigBee等通信協議定期查詢新版本或者接收升級請求。
覆蓋舊固件:將新固件數據分塊寫入舊固件所在Flash覆蓋舊固件。
3、全量升級
通常情況下,在MCU中運行的具有升級功能的程序需要具備兩個可獨立運行的程序,分別為BootLoader引導程序和實現產品功能的App應用程序。一般情況下BootLoader程序燒錄后不會再更新,修復漏洞或者添加功能時升級的均為App應用程序。Flash全量升級分區示意圖如圖2所示。固件可以通過App或者BootLoader進行接收,如圖3所示。
圖2Flash分區示意圖
圖3 固件接收方式分類
3.1 App接收固件
設備在運行時App查詢到有新版本固件或者收到升級請求時,先通過無線通信接口下載新的固件。一般有兩種方式更新固件:一種運行App1時,將新的固件分包接收并下載存至App2 Flash分區,下載完成后跳轉至App2 分區運行新的固件(MCU需要支持雙BANK運行),升級示意圖如圖4所示;第二種跳轉Bootloader程序執行固件遷移,將App2固件按塊寫入App1 Flash分區,待固件遷移無誤后再跳轉至App1 Flash分區運行。
圖4 具有備份區的固件升級示意圖
3.2BootLoader接收固件
設備在運行App時查詢到有新版本固件或者收到升級請求時,跳轉Bootloader程序將新的固件分包接收并下載至App Flash分區。下載完成時,舊固件被新固件覆蓋,然后再跳轉App Flash分區運行,示意圖如圖5所示。
圖5 單區固件升級示意圖
App與BootLoader接收固件都需要完整的下載新的固件包,即便新的固件相較于舊固件改動量很小,往往MCU RAM資源有限,需要分包下載,每包數據必須正確無誤,如果有錯誤或者遺漏則需要重新下載。升級過程中如果斷電,需要再次請求網絡重新下載新的固件包,所以整包升級下載時間較長,升級失敗風險較高。對一些電池供電的設備,下載時間越長系統功耗越高。
4、差分升級
在服務器端基于差分算法將舊固件V1和新固件V2的差異進行提取并應用壓縮算法計算出差分包,將差分包由服務器端傳輸給MCU客戶端,再由差分解壓縮算法還原出新的固件V2,這樣的升級方式稱為差分升級,差分升級的示意圖如圖6所示。
圖6 差分升級示意圖
一般差分算法核心思想為:對舊固件新固件文件做子字符串匹配或使用Hash技術, 提取公共部分, 再將新固件文件中剩余的部分打包成差分包;在差分還原時, 用復制和插入兩個基本操作將舊固件和差分包合成新固件。對于固件代碼較大而修改量較小的新固件,使用差分升級算法,差分包大小相較于新固件會明顯變小,無線升級時下載流量也會相應大幅度降低。
6、差分升級vs全量升級
差分升級和全量升級各有各的優點和適合應用的領域,設計者在實際產品開發中可根據不同應用選擇不同的升級方式。例如,產品是電池供電,并且數據傳輸速率比較低,則要求產品升級時能夠盡可能減少數據量的傳輸,節約功耗,此時可優先采用差分升級的方式。差分升級與全量升級的主要特點比較如圖7所示。
圖7差分升級與全量升級的主要特點比較
審核編輯:劉清
-
ZigBee技術
+關注
關注
3文章
115瀏覽量
42392 -
FlaSh
+關注
關注
10文章
1635瀏覽量
148025 -
RAM
+關注
關注
8文章
1368瀏覽量
114697 -
電池供電
+關注
關注
0文章
255瀏覽量
22158
原文標題:差分升級方案(上)——全量升級vs差分升級
文章出處:【微信號:小華半導體有限公司,微信公眾號:小華半導體有限公司】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論