在上一篇中,介紹了基于移遠BC28的STM32+NB-IOT的OTA案例分享,以移遠BC28+STM32L053C8為例,來演示如何利用艾拉比的差分技術通過NB網絡升級STM32的APP固件,詳見:基于移遠BC28的STM32+NB-IOT的OTA案例分享
本案例將展示,在STM32L452RE這顆MCU上如何將艾拉比的差分升級功能,移植入STM32L452RE的bootloader中,從而使STM32L452RE能夠擁有差分升級的能力。
差分升級的原理:
差分算法的基本思想是求解新文件和老文件的差的最優解,并使用壓縮算法生成差分包;升級時就可以在老文件的基礎上應用差分包進行升級。用形象的圖像表達如下:
艾拉比一直致力于差分算法的研究和開發,并且獨創了一種對差分中間數據混合打包壓縮的技術。目前,艾拉比在該領域已經有三項國家發明專利。
艾拉比算法特點:
1. 自適應確定差分方向。
2. 對于生成的中間數據使用艾拉比的 “整數數組的混合打包壓縮技術”。
3. 差分包體積小,比公開算法得到的差分包小30~90%。
4. 升級速度快,升級的速度是公開算法的2至3倍。
5. 資源消耗少,Lite版算法最低要求RAM 2KB。
代碼移植:
我們通過STM32CubeMX生成STM32L452RE-Nucelo這個工程代碼,然后我們在KEIL中打開這個工程。
1. C文件移植:
在STM32L452RE-Nucelo工程目錄下新建Abup/HAL文件目錄,abup_bl_main.c,adups_bl_main.c,adups_bl_flash.c,abup_hal_flash.c,abup_hal_uart.cabup_hal.c
2. 庫文件移植:
1)添加默認庫;2)選擇庫的版本;3)選擇默認庫腳本。
3. 頭文件路徑添加:
將..\..\Abup\inc,..\..\Abup\Wosun\inc,..\..\Abup\Wosun\inc\lzma, ..\..\Abup\lusun\inc, ..\..\Abup\inc\BL頭文件路徑加入項目工程頭文件路徑中。
4. 代碼的修改:
main.c中添加如下代碼
5. 代碼空間的配置:
配置需同ABUP_FLASH_BASE_ADDR、ABUP_BL_SIZE等宏一致。
差分包的制作:
在代碼移植完成后,我們需要制作差分包,并驗證這個差分包是否能夠升級成功。我們使用的是艾拉比的在線差分工作來這個差分包
1.在KEIL中配置自動生成制作差分包使用的軟件包
abup.bat參數說明:第一個是生成bin工具目錄,第二個是壓縮工具目錄,第三個是編譯文件夾,生成壓縮包名為:版本號_日期_時間.zip
2.登錄到艾拉比的差分工具,將目標版本和源版本兩個軟件包提交給查分工具,制作生成差分包。
驗證差分包:
在差分包制作成功后,我們將差分包通過設備的聯網能力下載到設備上,下載完成后軟重啟設備,進入Bootloader開始升級。
同時我們也可以在串口工具中看到整個Bootloader運行升級程序的過程。
當串口工具中打印出Update Suss后,表明升級成功。通過一系列工作我們也成功的為STM32L452RE構建了差分升級能力。
特別感謝:艾拉比物聯網研發部研發總監趙星和高級工程師沈瑞,對本篇文章做出的貢獻!
了解更多艾拉比智能合作伙伴相關信息,點擊閱讀原文