FOTA(Firmware Over-The-Air)即空中固件更新功能;CoAP(Constrained Application Protocol),字面意思為受限的應用協定,基于UDP,專為資源有限的物聯網裝置量身定制;是以AliOS Things的純CoAP FOTA就是專為資源有限的物聯網裝置(如基于NB-IoT,LoRa)提供的遠端固件更新功能。
我們先看一下目前版本(AliOS
Thing1.1.2)的FOTA結構圖:
簡要介紹:
資訊互動通道:指與特定的雲平台互動更新資訊如版本上報、查詢,下載下傳連結擷取,進度上報等控制或通知類資訊;
下載下傳通道:通過1中擷取的下載下傳連結下載下傳指定固件;
FOTA
service:fota主服務;
版本管理:維護更新前後的固件版本;
Security:fota安全部分,包括通道安全(mbedtls),固件下載下傳校驗,flash寫入校驗等;
Hal适配層:針對特定硬體的接口适配,主要指flash操作部分;
啟動參數設定/固件更新:這裡分兩種情況,1.乒乓更新,直接将新固件寫入與目前程式運作分區對等的另一個分區中,下載下傳完成後設定啟動參數讓下次程式啟動直接從FOTA下載下傳分區啟動,每次更新來回切換;2.下載下傳完成後設定啟動參數進入bootloader中,将下載下傳好的固件從下載下傳分區中複制到程式運作分區以完成固件更新。
CoAP協定格式:
RFC7959定義了CoAP協定的塊輸出規範,對于resource representation無法通過一個CoAP資料包承載時,發起塊傳輸過程。塊傳輸使用options字段進行控制。
CoAP塊傳輸标準新增了4個Option(size1最早在RFC7252中定義,RFC7959擴充了其含義)。
塊傳輸機制采用Block1和Size1完成Request中Resource Presentation的塊傳輸;采用Block2和Size2完成Response中的Resource
Presentation的塊傳輸;
FOTA CoAP下載下傳由用戶端像服務端請求資源,是以采用BLOCK2請求資源。
Block 格式:
Option Value為變長0-3個位元組的無符号數。
NUM:具有給定大小的塊序列内的塊(NUM)的相對數(從0開始編号),即塊序号
M:是否有更多塊
SZX:塊大小,取值0-6,實際每個塊的payload為2^ (4+SZX),即塊大小為16-1024Byte
Block2出現在Response中,Option value取值含義:
NUM:表示目前Message的Payload在整個body中的編号
M:表示是否還有更多塊才能完成整個body的傳輸
SZX:當M為1時,表示目前Message的Payload的大小(2**(SZX+4));當M為0時,實際Payload為1到2**(SZX+4)Byte;
Block2出現在Request中,屬于控制性用法:
NUM:期望Response傳輸的塊号
M:無意義,設定為0
SZX:當NUM為0時,表示希望采用的塊大小;當NUM非0時,直接采用上一個接收到的Response中的塊大小
通過上節我們對CoAP塊傳輸有了比較詳細的了解,CoAP FOTA正是借助了CoAP塊傳輸功能實作完整固件的下載下傳。如第一節FOTA架構圖,當互動通道與下載下傳通道都走CoAP協定時,即為純CoAP FOTA,僅僅依賴UDP協定,無需資源消耗較大的TCP協定支援,甚至連TCP/IP協定棧都不用實作,進而減少code size,ram等資源占用,更重要的是CoAP對網絡帶寬/網絡穩定性要求要求都很低,說到此,可能很多人都想到了NB-IoT,LoRa環境,沒錯,我們針對這種低功耗低性能場景有備而來。CoAP FOTA流程如下:
擷取相關内容。