1、 背景
因項目原因,需要開發(fā)差分FOTA升級功能,差分升級優(yōu)點是節(jié)省OTA傳輸數(shù)據(jù)量,非常適合LoRa,Zigbee等小無線升級場景,節(jié)省功耗等。
2、 原理
首先設備開機從boot跳轉到app,當接收到來自無線的升級請求后,進行差分包下載,下載成功把ROM標志位置于某個值。然后設備重啟進入boot。boot啟動會進入差分升級分支,先解壓差分包,然后程序運行差分算法,把APP分區(qū)和剛剛解壓的差分包進行融合處理還原出新的固件包,并做更新。更新成功再重啟,即可。
3、 操作流程
3.1 差分升級包制作
確保設備先運行老固件,然后分別打包兩個bin固件。導入舊版本選擇已經(jīng)運行的老固件,導入新版本選擇將要升級或降級的固件。然后選擇差分文件打包。
原包:Tl-Z214_CTRL_SCR_1.0.0.406_20230311.bin

原包固件啟動正常,編譯于2023-03-11 12:27:22
升級包:Tl-Z214_CTRL_SCR_1.0.0.406_20230305.bin

升級包固件啟動正常,編譯于2023-03-05 14:39:35
差分包制作

差分升級包制作成功,并生成pach.bin文件。
3.2 APP下載差分升級包
使用JFlash工具燒錄patch.bin文件到指定地址0x08011000模擬APP下載。

3.3 重啟進入bootloader
發(fā)送shell命令 dbg diffota,程序將把ROM啟動標志位置為差分升級標志,并重啟進入boot。

3.4 解壓差分包并運算差分算法還原新固件

3.5 校驗新還原固件
校驗還原的文件和新固件對不上,通過Jlink回讀數(shù)據(jù),用beyond工具比對,發(fā)現(xiàn)步驟3.4的確有微小差異。

串口打印crc校驗錯誤

Jlink回讀數(shù)據(jù)和原始對不上

下載到設備的查分包和原始是一致的
有可能是解壓有問題,打印出來看看解壓的數(shù)據(jù),在排查差分算法的問題。

最后一步解壓狀態(tài)可能不對


對比差分算法還原的內容,顯示是flash寫的問題。

3.6 拷貝新固件至APP運行分區(qū)并置位
不要拷貝新固件分區(qū),直接擦寫APP運行區(qū),節(jié)省flash。
3.7 重啟檢查差分升級是否成功

差分升級成功

差分降級成功
4、 常見問題
FAQ1 差分算法還原的新固件和原始固件有細微差異,差異是兩個字節(jié)FFFF?
答:是由于flash每次只能寫4個字節(jié)導致。
FAQ2 差分升級報fsl err錯?
答:是由于寫flash的地址必須是偶數(shù)。
FAQ3 差分升級還原的新固件和原始固件還是對不上,有細微差異,差異是一個字節(jié)FF?
答:需要記住最后一個字節(jié)。
-
ZigBee技術
+關注
關注
3文章
115瀏覽量
43483 -
ROM
+關注
關注
4文章
579瀏覽量
89079 -
OTA
+關注
關注
7文章
628瀏覽量
38291 -
LoRa模塊
+關注
關注
5文章
152瀏覽量
15297
發(fā)布評論請先 登錄
怎樣采用開源算法BSDIFF實現(xiàn)數(shù)據(jù)的差分化呢
基于差分演化算法的PID參數(shù)優(yōu)化算法
對Rijndael的JAVA差分攻擊與防范
(Xilinx)FPGA中LVDS差分高速傳輸?shù)?b class='flag-5'>實現(xiàn)
基于差分隱私的軌跡模式挖掘算法
基于密度差分的自動聚類算法
基于雙變異策略的骨架差分算法
面向隨機森林的差分隱私保護算法
如何使用差分隱私保護進行譜聚類算法
基于ExtraTrees的差分隱私保護算法DiffPETs
差分探頭在mipi測試中的應用
高頻靈活定制-存儲與計算 可編程差分振蕩器YSO210PR應用于服務器與大數(shù)據(jù)
基于BSDIFF差分算法在TLZ210中控屏的實現(xiàn)
評論