在之前文章中(STM32L425RE的差分升級能力構(gòu)建、【艾拉比】基于移遠(yuǎn)BC28的STM32+NB-IOT的OTA案例分享),我們演示了如何利用艾拉比的差分技術(shù)通過NB網(wǎng)絡(luò)升級STM32的APP固件。本篇案例我們將換個方向,詳細(xì)介紹如何通過WIFI模組將STM32F469的下載差分包,并且利用艾拉比的差分技術(shù)進(jìn)行升級。
升級方案的設(shè)計
考慮到ESP8266模組內(nèi)部的空間資源都十分的充足,所以我們?yōu)檫@個案例的升級設(shè)計了兩套升級方案,下面我們分別展開來描述這兩種方案。
(1) WIFI模組透傳差分包升級MCU
如下面框架圖所示,與NB網(wǎng)絡(luò)下升級MCU的方式一致,需要在MCU里內(nèi)置艾拉比的UA和UC的程序,同樣MCU上也要規(guī)劃一塊區(qū)域來存放差分包。
基于上面的軟件框架,我們將基于HTTP協(xié)議來和OTA服務(wù)器進(jìn)行交互通信,以下是整個升級的流程圖:
從上圖中我們可以看到整個升級的流程分以下幾個步驟:
1. STM32透過ESP8266,向OTA服務(wù)器發(fā)起注冊請求。OTA服務(wù)器透過ESP8266下發(fā)注冊結(jié)果,STM32將這些注冊信息保存下來
2. STM32透過ESP8266,向OTA服務(wù)器發(fā)起檢測版本的請求。OTA服務(wù)器透過ESP8266下發(fā)新版本的信息,這其中包含了差分包的下載地址
3. STM32基于得到的下載地址,透過ESP8266向OTA服務(wù)器發(fā)送下載差分包請求。OTA服務(wù)器會根據(jù)請求將差分包透過ESP8266下發(fā)給STM32,STM32在收到后將這些數(shù)據(jù)存儲在差分包存儲區(qū)域
4. STM32在下載完差分包并經(jīng)過校驗(yàn)后,透過ESP8266上報下載升級包的結(jié)果給到OTA服務(wù)器。OTA服務(wù)器透過ESP8266下發(fā)上報結(jié)果
5. STM32在接收到云端返回的上報結(jié)果后,進(jìn)行軟重啟,啟動UA程序
6. STM32運(yùn)行UA程序,進(jìn)行差分升級,升級完成后存儲本次升級的結(jié)果并進(jìn)入系統(tǒng)
7. STM32透過ESP8266上報本次升級的結(jié)果給到OTA服務(wù)器。OTA服務(wù)器透過ESP8266下發(fā)上報結(jié)果
8. STM32在接收到云端返回的上報結(jié)果后,斷開網(wǎng)絡(luò),至此整個升級流程結(jié)束
(2) WIFI內(nèi)部完成MCU升級回刷MCU方案
如下面框架圖所示, 這個方案需要在ESP8266內(nèi)置入UC和UA程序,并且在ESP8266內(nèi)劃分兩個區(qū)域,一個區(qū)域用于存儲下載的差分包,另外一個用于臨時存儲MCU的部分固件。
基于上面的軟件框架,我們將基于HTTP協(xié)議來和OTA服務(wù)器進(jìn)行交互通信,以下是整個升級的流程圖:
從上圖中我們可以看到整個升級的流程分以下幾個步驟:
1. STM32向ESP8266發(fā)起升級請求
2. ESP8266通過獲取的STM32的信息,向OTA服務(wù)器發(fā)送注冊請求
3. OTA服務(wù)器返回注冊信息給到ESP8266,ESP8266將MCU的注冊信息存儲下來
4. ESP8266向OTA服務(wù)器發(fā)起STM32的檢測請求, OTA服務(wù)器返回STM32
新版本的信息
5. ESP8266根據(jù)獲取的新版本信息,向OTA服務(wù)器發(fā)起下載差分包的請求,OTA服務(wù)器收到請求后下發(fā)差分包。
6. ESP8266收到差分包,并校驗(yàn)通過后,向OTA服務(wù)器發(fā)送下載情況上報請求,OTA服務(wù)器收到后返回上報結(jié)果。
7. ESP8266中的UC程序通知UA程序開始進(jìn)行STM32的差分升級
8. ESP8266中的UA程序完成MCU的固件升級后,向STM32請求回刷固件,在STM32允許刷寫后,進(jìn)行固件回刷
9. ESP8266中UA程序在STM32升級完成后,存儲升級的結(jié)果,并通UC程序進(jìn)行升級結(jié)果上報,UC在收到通知后,向OTA服務(wù)器上報STM32升級的結(jié)果,OTA服務(wù)器收到后返回上報的結(jié)果給到ESP8266
10. ESP8266收到OTA服務(wù)器下發(fā)的上報結(jié)果后,斷開網(wǎng)絡(luò),至此整個升級流程結(jié)束。
從上面兩個升級方案中,MCU的升級都采用的是差分升級,這相較于傳統(tǒng)WIFI下的MCU升級優(yōu)勢在于:
(1)升級包下載的時間大大減小,同時也降低了升級的功耗。
(2) 升級的時間也會比整包升級的時間也大為減小,整體提升了升級的效率。下面我們再來看一下,整個設(shè)備升級的實(shí)際過程。
從下面兩張圖上我們看到,一張圖是STM32F469的Discovery開發(fā)板子,一張圖是ESP8266的串口模塊,我們將通過串口線將兩個設(shè)備連接在一起,對STM32開發(fā)板進(jìn)行差分升級。
這個STM32的開發(fā)板是支持觸屏操作的,所以首先我們點(diǎn)擊屏幕上的“Check for Update“發(fā)起升級流程。
點(diǎn)擊屏幕后,OTA服務(wù)器很快返回了新版本的信息,屏幕這時候也顯示了新版本的差分包大小。
檢測到新版本后,設(shè)備會自動去請求下載差分包,從下面兩張圖中我們可以從屏幕上看到下載的進(jìn)度顯示。
從上圖來看,差分包已經(jīng)下載完成,設(shè)備會立即向OTA服務(wù)器上報這個下載的結(jié)果。我們也可以從PC上的Debuger工具中看到這個過程的log
差分包下載完成后,設(shè)備會進(jìn)行重啟,進(jìn)入了bootloader,在這個階段,集成在設(shè)備bootloader里的UA程序會進(jìn)行差分升級的工作,我們從下面兩張圖來看一下這個過程
從上圖可以看到,屏幕上顯示升級進(jìn)度已經(jīng)完成,升級已經(jīng)完成,我們也可以在PC端的Debuger工具中看到這個過程
接下來,設(shè)備會進(jìn)入APP,我們?yōu)榱藚^(qū)別版本特意將這個版本的屏幕顏色做了改動,大家可以從下面兩張圖上看到
我們從屏幕上可以看到,這個時候軟件的版本好已經(jīng)升級為2.0,設(shè)備自動開始
升級結(jié)果的上報并且已經(jīng)上報成功,從PC端的Debuger軟件中我們也能看到這個過程
升級結(jié)果的上報并且經(jīng)上報成功,從PC端的Debuger軟件中我們也能看到這個過程
至此,STM32F469的這個開發(fā)板已經(jīng)差分升級成功,升級流程結(jié)束。從這幾個階段的log來看,這次的差分包大小是1875個字節(jié),整個固件的大小是87KB,下載的差分包的時間是3秒,升級的時間是11秒,不過這個時長也受限于log的串口打印以及模組的AT交互的消耗,如果在商用批量產(chǎn)品使用中不考慮這些限制,整個升級需要的時長、消耗的功耗都將進(jìn)一步大幅降低。