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