本文將以低功耗模組Air780EPM系列開發板為例,分享FOTA應用示例要點。
一、升級包製作
LuatOS開發模式下,固件分為兩部分:
core:底層固件;
script:用户腳本;
遠程升級時可以僅升級script,也可以同時升級core+script,這為迭代和維護提供了極大的便利。
▼ 全量升級包 ▼
僅script升級時,升級包製作説明如下:
如果只是新增一些自己的腳本邏輯,沒有更新底層,可以選擇僅腳本升級;
更新完自己腳本後,修改版本號,點擊生成量產文件,生成的量產文件中以.bin結尾的就是僅腳本升級的升級包。
▼ 差分升級包 ▼
core+script都升級時,升級包製作説明如下:
每一次core的升級都會帶來一些網絡上的優化(例如信號差時的網絡穩定性)以及一些bug修復,所以在發佈新版本以後,用户可以先測試下core對自己腳本有無明顯影響或性能提升,然後進行遠程FOTA。
對於含core升級的話需要製作差分包,原始版本生成一次量產文件,新版本生成一次量產文件。
針對這兩個量產文件,製作一個差分文件:點擊到Luatools的主界面,依次點擊下方圖中藍框所示意的地方。
特別注意:必須使用luatools_3.0.9及其以上版本,要不差分包升級的時候可能會出問題。
按下圖所示選擇舊版本以及新版本的固件,然後點擊開始執行即可;如果不想輸出的差分包在Luatools根目錄下,可以自行選擇一個輸出路徑;在你選擇的目錄下看,新生成的.bin文件就是升級差分包。
二、FOTA升級示例demo
本demo演示的核心功能為,基於Air780EPM的兩種FOTA升級方式:
文件系統直接升級:通過模組文件系統中的文件直接升級,代碼演示通過Luatools的燒錄文件系統功能將升級包文件直接燒錄到文件系統然後升級。
分段升級:通過串口將升級包文件分多個片段發送,每個片段接收並寫入,代碼演示使用USB虛擬串口分段寫入升級包升級。
適用場景:非標準數據傳輸 -> 串口、TCP、MQTT等自定義通道升級;流程精細控制 -> 需要自定義升級前後處理邏輯。
兩種FOTA升級測試要點如下:
▼ 文件系統直接升級 ▼
1)核心代碼實現
fota_file.lua核心測試代碼如下,完整demo詳見源碼倉庫最新文件。
2)文件系統升級操作步驟
參考實操教程搭建好演示硬件環境;
修改配置:在main.lua中取消require("fota_file") 的註釋,註釋掉require("fota_uart");
製作升級包:按照第一章節,使用Luatools製作升級包;
燒錄文件:
使用Luatools燒錄內核固件和腳本代碼,通過"燒錄文件系統"功能將升級包文件燒錄到設備中;
自動升級:設備啓動後會自動檢測並執行升級流程。
注意:"燒錄文件系統"功能使用
將製作好的升級包修改名字為update.bin,然後放到一個空文件夾中,在Luatools的"燒錄文件系統"功能欄中選中這個文件夾,點擊下載即可;燒錄成功後,update.bin會在文件系統根目錄下,路徑為"/update.bin"。
3)查看運行日誌
開始升級,讀取文件系統目錄下的升級包文件/update.bin;
FOTA初始化 → 底層就緒 → 文件寫入 → MD5校驗通過;
升級完成,版本驗證成功;
設備自動重啓;
新版本1.0.1正常運行,新增日誌確認升級成功。
如下圖示:文件系統FOTA升級完全成功,版本從1.0.0升級到1.0.1。
▼ 串口分段升級 ▼
1)核心代碼實現
fota_uart.lua核心測試代碼如下,完整demo詳見源碼倉庫最新文件。
2)串口升級操作步驟
參考實操教程搭建好演示硬件環境;
修改demo腳本代碼:確保main.lua中已註釋 require("fota_file"),取消require("fota_uart") 的註釋;
製作升級包:按照第一章節,使用Luatools製作升級包;將製作好的升級包放在main.py同級目錄下;
燒錄文件:Luatools燒錄內核固件和修改前的demo腳本代碼,燒錄成功後,自動開機運行;
通過串口升級:確認設備連接到電腦的串口(虛擬USB串口);按一下板上的Powerkey鍵,然後運行Python腳本發送升級包;腳本會自動尋找設備虛擬串口,發送升級命令並傳輸fota_uart.bin文件;設備接收並驗證升級包,升級成功後會自動重啓。
3)查看運行日誌
USB虛擬串口連接,收到#FOTA起始指令;
開始分段接收升級包,每次256字節,累計5751字節;
所有數據包寫入成功,MD5校驗通過;
升級完成,重啓;
重啓後新版本1.0.2運行,新增日誌確認升級成功。
如下圖示:串口FOTA升級完全成功,版本從1.0.0升級到1.0.2。
今天的內容就分享到這裏了~