国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種使用LoRa通信的OTA差分升級方法

2022-06-21 11:27洋,王
物聯(lián)網(wǎng)技術 2022年6期
關鍵詞:子塊固件補丁

劉 洋,王 劍

(1.中國民用航空飛行學院 航空電子電氣學院,四川 廣漢 618307;2.清華四川能源互聯(lián)網(wǎng)研究院,四川 成都 610213)

0 引 言

LoRa(Long Range Radio, LoRa)是一種遠距離無線電,因采用線性調(diào)頻擴頻技術,具有長距離和低功耗的特點,工作于非授權頻段,被廣泛部署于智能表計、智慧農(nóng)業(yè)、智能物流等多個物聯(lián)網(wǎng)垂直行業(yè),前景廣闊。

然而,由于LoRa通信通常采用星形組網(wǎng),且目前較多應用使用LoRa“點對點”通信模式,在大面積工程應用時存在頻點沖突和固件升級困難的問題。現(xiàn)有的全量升級方案常用于初始化設備和恢復出廠設置時的批量升級,固件體積龐大,升級耗時,不適用于低速率的LoRa通信場景。增量升級,又稱差分升級,通過使用新舊版本的差異文件對舊固件做還原操作,差分固件體積小,適用于應用升級(In Application Programming, IAP)和空中固件升級(Over the Air, OTA)。

本文提出了一種用于LoRa通信的OTA差分升級方法,使用開源差分算法Bsdiff和壓縮算法FastLz77對新舊固件做差異提取并壓縮,以減小固件體積。為保證固件傳輸?shù)目煽啃裕碳?shù)據(jù)包使用LoRa跳頻和循環(huán)異或加密技術傳輸。文中詳細介紹了OTA系統(tǒng)構成、固件包制作和傳輸過程,最后搭建了OTA測試環(huán)境以驗證升級方案的可靠性。

1 OTA升級原理和系統(tǒng)組成

由于LoRa通信的速率不高,以最高速率(擴頻因子SF=7、編碼率CR=4/5、帶寬BW=500 kHz時)傳輸255字節(jié)的理論時間為135 ms。因此,OTA升級方案應選擇差分固件升級,通過對待升級的固件做差分,減小固件體積。

差分升級的基本原理如圖1所示,主要包括差分包制作、差分包傳輸、差分包還原三部分。首先將新固件與舊固件做差分,得到補丁文件;之后將補丁文件通過LoRa通信下發(fā)至待升級的終端設備;最后終端設備根據(jù)補丁文件和已有舊固件執(zhí)行還原操作得到新固件。將新固件寫入FLASH,設置終端程序跳轉到新固件的位置并執(zhí)行,實現(xiàn)空中升級。

圖1 差分升級基本原理

本文執(zhí)行OTA差分升級系統(tǒng)組成如圖2所示。系統(tǒng)由LoRa主、從節(jié)點構成,相關定義如下:LoRa服務器為Master節(jié)點,由PC上位機和USB轉LoRa設備構成;LoRa待升級終端為Slave節(jié)點。每個Slave節(jié)點有唯一的ID號,服務器已知各Slave節(jié)點ID號。待升級的新固件定義為New,舊固件定義為Old,補丁文件定義為Patch。

圖2 OTA升級系統(tǒng)組成

此外,需按功能劃分Slave節(jié)點固件和升級參數(shù)的存儲區(qū)域,在應用程序執(zhí)行過程中,將OTA接收的固件包存入相應區(qū)域。FLASH分區(qū)為BootLoader_Flash、APPA_Flash、APPB_Flash、Patch_Flash、Update_Flash、Other_Flash。其中,BootLoader_Flash用于啟動固件存放空間,負責patch文件的還原,新固件啟動引導。APPA_Flash、APPB_Flash和Patch_Flash分別用于存放新固件、舊固件和補丁固件。Update_Flash用于存放升級固件信息,Other_Flash是其他信息的預留空間。

2 構建patch補丁固件

Slave節(jié)點的FLASH存儲器一般按照完整扇區(qū)進行擦除后寫入,升級固件需要按扇區(qū)大小分包寫入。因此,patch補丁固件按FLASH扇區(qū)大小進行分塊做差分,每個FLASH塊的差分結果增加相應塊序號信息和校驗信息,組成patch固件子包patch_pkg_。最后將新固件信息和patch固件子包信息合并成完整的patch補丁固件。子包差分固件生成示意圖如圖3所示。Patch補丁固件包具體生成步驟如下:

圖3 子包差分固件生成示意圖

(1)固件分塊。將新固件和舊固件按Slave節(jié)點的FLASH扇區(qū)大?。‵lash_Page_Size=1 024 B,2 048 B等)分成若干個固件子塊,如式(1)。

(2)子塊差分。對比具有相同塊號的新、舊固件子塊(New_pkg_, Old_pkg_)內(nèi)容的一致性,若兩子塊內(nèi)容相同,則不對該新固件子塊創(chuàng)建補丁內(nèi)容,否則使用開源差分算法Bsdiff計算兩子塊內(nèi)容的差分結果bsdiff_out_,若新固件的子塊數(shù)大于舊固件子塊數(shù)(>),則多出的新固件子塊不計算差分,直接將該新固件子塊內(nèi)容作為差分結果。

(3)差分塊壓縮。由于差分結果具有高度稀疏特性,采用壓縮算法可進一步減小固件的數(shù)據(jù)量。調(diào)用fastLz77算法對新固件子塊差分結果bsdiff_out_進行壓縮,得到新固件第個子塊的補丁bsdiff_fastLz77_out_。

(4)合并子塊補丁。將新固件信息和壓縮后的固件子塊補丁組合,創(chuàng)建patch固件。patch固件由頭信息塊patch_header和各子信息塊patch_pkg_依次排列構成,其中頭信息patch_header包括總差分包數(shù)patch_pkg_total、新固件的文件大小newFile_size、新固件的md5信息摘要newFile_md5;子信息塊patch_pkg_由當前子塊序號、子塊差分壓縮包大小size_、子塊差分壓縮包bsdiff_fastLz77_out_、子塊差分壓縮包的CRC8校驗值組成。

3 LoRa固件傳輸

由于LoRa傳輸容量有限,單次無法發(fā)送全部patch補丁固件,需要拆分patch補丁固件進行多次傳輸。Master節(jié)點將Patch補丁固件按照單次最大傳輸字節(jié)長度(Max_Send_Size)可分為若干(nSend)包,send_pkg_1,send_pkg_2,...,send_pkg_。Master與Slave 每次交互發(fā)送一個OTA數(shù)據(jù)包OTA_pkg_,OTA數(shù)據(jù)包由OTA_header、OTA_Size、send_pkg_和sum32校驗值構成,發(fā)送至Slave節(jié)點,采用報文內(nèi)容加密和跳頻方式傳輸。

3.1 報文加密

采用指定密鑰循環(huán)異或(XOR-Cycle)的方式對報文加密。首先計算Slave節(jié)點ID值的128位信息摘要MD5,將明文報文與計算的MD5值依次按字節(jié)遍歷做異或處理,生成加密報文。由于采用異或加密,因此解密與加密的過程相同。其中,Master對報文加密,Slave對報文解密。加解密方法描述如下:

假設原始報文的明文字節(jié)數(shù)組=[,, ...,a],密文字節(jié)數(shù)組為=[,, ...,b],共計字節(jié);Slave節(jié)點的ID為ID=[id, id, ..., id]共計字節(jié)。

(1)計算MD5。計算Slave節(jié)點ID的128位MD5信息摘要值,MD5(ID)=[md5_1, md5_2, ..., md5_16]。

(2)循環(huán)異或加密。將明文與計算的MD5值依次按字節(jié)遍歷做異或加/解密處理:=⊕ md5_1;=⊕md5_2 ;…;=⊕md5_16;=⊕md5_1;=⊕md5_2;…;b=a⊕md5_。完成加解密。

3.2 跳頻傳輸

補丁固件使用LoRa傳輸時會極大占用當前通信信道,嚴重干擾其他使用當前信道的設備正常工作。因此,在傳輸補丁固件包時使用跳頻傳輸方式,在多個業(yè)務信道隨機傳輸,避免信道擁堵。跳頻傳輸步驟如下:

(1)劃分信道。將LoRa通信頻段按照0.2 MHz劃分為若干通信信道CH=[ch_1, ..., ch_, ch_+1, ..., ch_, ..., ch_]。

(2)Master節(jié)點設置信道信息。Master節(jié)點發(fā)送(ch_)的報文中帶有Slave響應節(jié)點的跳頻信息ch_,Master節(jié)點發(fā)送結束后在對應的Slave響應頻點(ch_)接收Slave回復報文,如果Slave節(jié)點未及時響應,則Master節(jié)點使用上次的頻點(ch_)重發(fā)報文信息,并切換至Slave響應頻點(ch_)等待響應,再次超時響應則結束當前數(shù)據(jù)傳輸。

(3)頻點選擇。跳頻頻點ch_由Master節(jié)點隨機在所有備選信道中選取。

3.3 傳輸流程

3.3.1 Master固件傳輸

Master節(jié)點固件傳輸流程如圖4所示。Master節(jié)點首先初始化為默認信道(ch_1),在默認信道發(fā)送報文讀取指定ID的Slave節(jié)點運行狀態(tài)。

固件傳輸之前先在默認信道下發(fā)OTA升級信息,同時設置Slave節(jié)點應答頻點ch_并切換Master的接收頻點為ch_,等待終端應答。若終端正常應常,Master發(fā)送第個OTA數(shù)據(jù)包,并指定終端應答頻點ch_,切換Mastert的接收頻點為ch_,等待終端應答,重復該過程直到patch固件發(fā)送完成。

圖4 Master節(jié)點傳輸流程

3.3.2 Slave固件接收

Slave節(jié)點接收patch補丁固件的流程如圖5所示。Slave節(jié)點處于空閑狀態(tài)時,切換LoRa通信模式為接收模式,并設定接收信道為默認信道(ch_1)。接收到報文信息后,立即進行解密處理,如果解密后的報文滿足patch補丁固件傳輸流程,則根據(jù)報文進行回復。

圖5 Slave節(jié)點傳輸流程

4 Slave節(jié)點固件更新

Slave節(jié)點接收完OTA升級包后,將執(zhí)行固件更新操作,還原固件并檢查固件的一致性。運行BootLoader引導程序,讀取Patch_Flash區(qū)域的patch補丁固件信息,提取patch_header和patch子信息塊patch_pkg_;從patch子信息塊patch_pkg_提取子塊差分壓縮包bsdiff_fastLz77_out_和子塊差分壓縮包的CRC8校驗值。使用fastLz77解壓算法對子塊差分壓縮包bsdiff_fastLz77_out_解壓,計算解壓后數(shù)據(jù)包的CRC8校驗值,如果計算的校驗值與子信息塊patch_pkg_的校驗值相同,則使用bspatch還原算法和APPB_Flash存儲區(qū)第個扇區(qū)的固件信息還原新固件子包,并將其寫入APPA_Flash存儲區(qū)第個扇區(qū),重復直到還原所有子信息塊。

一致性校驗根據(jù)OTA升級信息,從APPA_Flash存儲區(qū)讀取指定長度為新固件newFile_size字節(jié)數(shù)的數(shù)據(jù),計算MD5值。如果計算的MD5值與新固件的MD5信息摘要newFile_md5相同,則OTA升級成功,將APPA_Flash存儲區(qū)的新固件拷貝至APPB_Flash存儲區(qū);否則OTA升級失敗。將APPB_Flash存儲區(qū)的舊固件拷貝至APPA_Flash存儲區(qū),清除Patch_Flash存儲區(qū)和相關OTA升級信息。

5 OTA升級測試

為驗證基于LoRa通信的OTA升級的可靠性,搭建包括1個Master節(jié)點和10個Slave節(jié)點的測試環(huán)境,其中 Master節(jié)點由PC端電腦軟件和LoRa透傳模組組成。PC端電腦軟件完成對Slave節(jié)點的OTA升級流程和協(xié)議控制,此外還制作patch文件;LoRa透傳模組接口為USB轉LoRa,模組如圖6所示,負責將PC端電腦軟件發(fā)出到USB口的數(shù)據(jù)轉換成LoRa通信無線方式發(fā)送。Slave節(jié)點的參數(shù)信息見表1所列。

圖6 USB轉LoRa模組

表1 Slave節(jié)點參數(shù)

同步Master節(jié)點和Slave節(jié)點的LoRa跳頻信道劃分,配置默認信道為ch_1:472.5 MHz,從472.7~485.1 MHz,間隔0.2 MHz,共計62個跳頻信道。其余LoRa通信參數(shù)設置為帶寬500 kHz、編碼率4/5、擴頻因子12。為模擬信道沖突,10個Slave節(jié)點都在ch_1信道每隔10 s隨機發(fā)送業(yè)務數(shù)據(jù)。

Master節(jié)點選擇測試用新固件new.bin,大小為31.2 KB;舊固件old.bin,大小為33 KB;依次執(zhí)行固件分包、子包差分、子包壓縮、patch文件拼包操作,生成patch補丁固件源文件。其中,固件按照扇區(qū)1 KB進行分包,patch補丁固件源文件(patch.bin)大小為2.3 KB。

OTA傳輸?shù)挠行atch數(shù)據(jù)包設置為255字節(jié),Master節(jié)點將patch補丁固件按照255字節(jié)分成10個數(shù)據(jù)包,每個數(shù)據(jù)包增加頭文件信息OTA_header、整包數(shù)據(jù)量OTA_Size和sum32校驗值,構成OTA數(shù)據(jù)包。Master節(jié)點發(fā)送報文由Slave節(jié)點1的ID計算MD5值循環(huán)異或加密;默認信道472.5 MHz發(fā)送廣播報文,查詢該Slave節(jié)點1的狀態(tài)、固件版本號,發(fā)送OTA固件升級信息,并設置隨機響應信道ch_為17,即476.1 MHz,設置Master節(jié)點在476.1 MHz等待接收Slave節(jié)點1的回復報文,等待延時120 ms后Master報文接收成功。

Master節(jié)點在信道476.1 MHz發(fā)送第一幀OTA數(shù)據(jù)報文,并隨機指定Slave節(jié)點的響應跳頻信道ch_為32,即479.1 MHz,發(fā)送之后設置Master節(jié)點在479.1 MHz等待接收Slave節(jié)點的回復報文,等待延時260 ms后Master報文接收成功。

Master節(jié)點依次發(fā)送至最后一幀OTA數(shù)據(jù)報文,Slave節(jié)點均正常響應。此時,Slave節(jié)點重啟進入BootLoader引導程序,執(zhí)行固件還原操作,校驗新固件MD5,并將該新固件寫入APPB_Flash區(qū)進行備份,程序跳轉至APPA_Flash區(qū),正確執(zhí)行,OTA升級完畢。多次測試結果見表2所列,成功率為100%。

表2 OTA升級結果

6 結 語

本文提出了用于LoRa通信的OTA差分升級方案,通過Bsdiff差分和FastLz77壓縮進一步減小了固件的體積以適應LoRa低速率傳輸場景。為避免對現(xiàn)有業(yè)務信道的傳輸沖突,使用LoRa跳頻和循環(huán)異或加密方式對固件傳輸信道和固件數(shù)據(jù)包進行優(yōu)化,顯著提高了固件升級的成功率。驗證結果表明,本方案適用于LoRa“點對點”通信場景下的固件升級應用。

猜你喜歡
子塊固件補丁
基于八叉樹的地震數(shù)據(jù)分布式存儲與計算
基于特征值算法的圖像Copy-Move篡改的被動取證方案
健胃補丁
基于波浪式矩陣置換的稀疏度均衡分塊壓縮感知算法
補丁奶奶
基于固件的遠程身份認證
基于分布式ICA-PCA模型的工業(yè)過程故障監(jiān)測
大病醫(yī)保期待政策“補丁”
一種通過USB接口的可靠固件升級技術
多路手機固件升級工具設計