摘要: FOTA(Firmware Over-The-Air)即空中固件升級功能;CoAP(Constrained Application Protocol),字面意思爲受限的應用協議,基於UDP,專爲資源有限的物聯網設備量身定製;因此AliOS Things的純CoAP FOTA就是專爲資源有限的物聯網設備(如基於NB-IoT,LoRa)提供的遠程固件升級功能。git
FOTA(Firmware Over-The-Air)即空中固件升級功能;CoAP(Constrained Application Protocol),字面意思爲受限的應用協議,基於UDP,專爲資源有限的物聯網設備量身定製;因此AliOS Things的純CoAP FOTA就是專爲資源有限的物聯網設備(如基於NB-IoT,LoRa)提供的遠程固件升級功能。github
1.AliOS Things1.1.2 FOTA簡介安全
咱們先看一下當前版本(AliOS Thing1.1.2)的FOTA結構圖:
簡要介紹:
信息交互通道:指與特定的雲平臺交互更新信息如版本上報、查詢,下載連接獲取,進度上報等控制或通知類信息;
下載通道:經過1中獲取的下載連接下載指定固件;
FOTA service:fota主服務;
版本管理:維護升級先後的固件版本;
Security:fota安所有分,包括通道安全(mbedtls),固件下載校驗,flash寫入校驗等;
Hal適配層:針對特定硬件的接口適配,主要指flash操做部分;
啓動參數設置/固件更新:這裏分兩種狀況,1.乒乓升級,直接將新固件寫入與當前程序運行分區對等的另外一個分區中,下載完成後設置啓動參數讓下次程序啓動直接從FOTA下載分區啓動,每次更新來回切換;2.下載完成後設置啓動參數進入bootloader中,將下載好的固件從下載分區中複製到程序運行分區以完成固件升級。網絡
2.CoAP塊傳輸框架
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請求資源。ide
Block 格式:
Option Value爲變長0-3個字節的無符號數。性能
NUM:具備給定大小的塊序列內的塊(NUM)的相對數(從0開始編號),即塊序號
M:是否有更多塊
SZX:塊大小,取值0-6,實際每一個塊的payload爲2^ (4+SZX),即塊大小爲16-1024Byteui
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;spa
Block2出如今Request中,屬於控制性用法:
NUM:指望Response傳輸的塊號
M:無心義,設置爲0
SZX:當NUM爲0時,表示但願採用的塊大小;當NUM非0時,直接採用上一個接收到的Response中的塊大小3d
3.純CoAP FOTA
經過上節咱們對CoAP塊傳輸有了比較詳細的瞭解,CoAP FOTA正是藉助了CoAP塊傳輸功能實現完整固件的下載。如第一節FOTA框架圖,當交互通道與下載通道都走CoAP協議時,即爲純CoAP FOTA,僅僅依賴UDP協議,無需資源消耗較大的TCP協議支持,甚至連TCP/IP協議棧都不用實現,從而減小code size,ram等資源佔用,更重要的是CoAP對網絡帶寬/網絡穩定性要求要求都很低,說到此,可能不少人都想到了NB-IoT,LoRa環境,沒錯,咱們針對這種低功耗低性能場景有備而來。CoAP FOTA流程以下:
4.上板測驗:
至此,咱們對CoAP FOTA應該有了較深的理解,若是想實戰試一把,請移步 AliOS Things github,下載代碼搭建環境親自體驗一把,咱們配有較豐富並持續豐富中的指導文檔,請參考https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-FOTA-Porting-Guide 功能驗證章節。