隨著互聯網的發展和無線通訊網絡的普及,低功耗窄帶通訊為物聯網帶來了更多機會。憑借著其覆蓋范圍廣、功耗低等特點,獲得了廣泛的關注與重視,不斷加速實現物與物之間建立智能化、數據化的聯系。借助通訊和云計算的高速發展,越來越多的設備開始物聯網化演進,大規模部署后的物聯網設備面臨著在線升級(OTA)的需求,從而解決系統更新,產品功能迭代、漏洞修復、和安全防護等問題。
這其中的在線升級功能,需要使用 OTA (Over-the-Air) 技術 。簡單地說,OTA 就是通過網絡來升級手中的智能設備。由于大多數物聯網終端受硬件資源、功耗、帶寬等限制,傳統的整包升級方式已經越來越難以滿足客戶需要,而穩定安全的差分升級在OTA這一技術領域中顯得尤為重要。尤其是NB-IOT這類窄帶通信技術,大多數應用都是由低功耗小資源的MCU+NB-IOT通訊模塊實現的,NB-IOT通訊模塊實現聯網功能,設備應用運行在MCU上,使用差分OTA升級,可以實現減低功耗、減少硬件資源消耗、提升升級體驗、加速下載過程,提供更好的安全性和可靠性,并且有效防止大量設備下載時候對基站等設施的沖擊。艾拉比提供的基于MCU+NB-IOT的差分技術方案已經廣泛應用在如門鎖、手表、定位器、路燈控制器、共享停車位、煙感和表計等領域。
下面以移遠BC28+STM32L053為例,來演示如何利用艾拉比的差分技術通過NB網絡升級STM32的APP固件。我們將從升級方案的設計,設備操作流程兩個部分來詳細講解這個方案:
01.升級方案的設計
下圖展示了這個升級方案的軟件框架:
從上圖可以看到STM32里中需要有三個部分的修改:
1.STM32L053的APP部分,需要集成與OTA服務器通信的程序,我們稱為Update Controller,簡稱UC
2.STM32L053的bootloader部分,需要集成差分升級算法程序,我們稱為Update Agent,簡稱UA
3.STM32L053上需要規劃處一定的存儲空間,用來存儲下載的差分包。
從設計的軟件框架來看升級將分為兩個階段:下載差分包階段和升級上報階段。在窄帶網絡下,我們以LWM2M協議為基礎來和OTA服務器進行交互通信,設備與服務器端建立的是COAP連接。
我們先來詳細分解下載階段的流程:
從上圖中我們可以看到整個下載差分包的流程分以下幾個步驟:
1. 初始化模組, STM32向BC28發送初始化的AT指令。
2. STM32發送AT指令給BC28,建立網絡鏈接。BC28返回建立網絡的結果給STM32。
3. STM32透過BC28,向OTA服務器發起注冊請求。OTA服務器透過BC28下發注冊結果,STM32將這些注冊信息保存下來。
4. STM32透過BC28,向OTA服務器發起檢測版本的請求。OTA服務器透過BC28下發新版本的信息,這其中包含了差分包的下載地址。
5. STM32基于得到的下載地址,透過BC28向OTA服務器發送下載差分包請求。OTA服務器會根據請求將差分包分段透過BC28下發給STM32,STM32在收到后將這些數據存儲在差分包存儲區域。
6. STM32在下載完差分包并經過校驗后,透過BC28上報下載升級包的結果給到OTA服務器。OTA服務器透過BC28下發上報結果。
7.STM32發送指令給BC28關閉網絡連接,BC28返回關閉網絡連接結果
8.STM32進行軟重啟,進入bootloader
接下來升級流程就進入了下一個階段,我們先來看流程圖:
從上圖中我們可以看到整個升級上報的流程分以下幾個步驟:
1. STM32在bootloader中運行UA程序,完成差分升級,升級完成后重啟。
2. STM32向BC28發送初始化的AT指令,BC28向STM32返回初始化結果。
3. STM32發送AT指令給BC28,建立網絡鏈接。BC28返回建立網絡的結果給STM32。
4. STM32透過BC28,向OTA服務器發起注冊請求。OTA服務器透過BC28下發注冊結果,STM32將這些注冊信息保存下來。
5. STM32透過BC28,向OTA服務器上報升級結果。OTA服務器透過BC28下發升級上報結果。
6. STM32通知BC28關閉網絡連接,至此整個升級流程結束。
通過對整個方案以及兩個階段流程解析,我們可以看到,在窄帶網絡下的差分升級,對于這種網絡特性,對差分包的大小以及差分包傳輸的穩定性需要有一定的保障,所以在下載差分包的時候,我們需要進行分段下載,并且需要對每段數據進行相應手段的校驗。下面我們從設備端的操作,來看一下整個升級的流程。
02、設備操作流程
從下圖我們看到,左邊的開發板基于STM32L053,右邊的開發板基于移遠BC28,我們將通過串口線將兩個設備連接在一起進行升級操作。STM32開發板上的藍色按鈕的功能是發起整個升級流程,黑色按鈕的功能是重啟STM32開發板,下面我們開始操作。
首先我們按下STM32開發板上的藍色按鈕,發起升級流程,這個時候STM32開發板屏幕上會有如下顯示:
此時,我們還可以通過連接到PC上的debug工具,可以看到相應log,這段動畫顯示的是STM32從初始化到檢測版本整個過程的log。
在檢測完成后,STM32自動進入下載差分包階段,下面兩張圖是STM32進入下載差分包流程時的屏幕進度顯示:
這個階段,我們也可以清晰的從PC的debug工具里看到整個下載流程:
在下載成功后,我們手動按一下STM32開發板上的黑色按鍵,重啟STM32開發板,讓設備進入bootloader開始升級,下面兩張圖是STM32開發板在升級時的屏幕顯示:
完成升級后,STM32開發板重啟重新進入APP,這個時候會自動將這次升級的結果進行上報,下圖是STM32開發板在進行升級上報時候的屏幕顯示:
同樣,我們也可以在PC上的debug工具里看到整個上報流程:
從STM32開發板的屏幕上看到完成這個流程后,STM32開發版本的固件從1.0成功的升級到了1.1,至此整個升級完成。
-
STM32
+關注
關注
2270文章
10915瀏覽量
356754 -
OTA
+關注
關注
7文章
583瀏覽量
35309
發布評論請先 登錄
相關推薦
評論