小程序
传感搜
传感圈

基于BSDIFF差分算法在TLZ210中控屏的实现

2023-05-19
关注

1、 背景

因项目原因,需要开发差分FOTA升级功能,差分升级优点是节省OTA传输数据量,非常适合LoRaZigbee等小无线升级场景,节省功耗等。

2、 原理

首先设备开机从boot跳转到app,当接收到来自无线的升级请求后,进行差分包下载,下载成功把ROM标志位置于某个值。然后设备重启进入boot。boot启动会进入差分升级分支,先解压差分包,然后程序运行差分算法,把APP分区和刚刚解压的差分包进行融合处理还原出新的固件包,并做更新。更新成功再重启,即可。

3、 操作流程

3.1 差分升级包制作

确保设备先运行老固件,然后分别打包两个bin固件。导入旧版本选择已经运行的老固件,导入新版本选择将要升级或降级的固件。然后选择差分文件打包。

原包: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

发送shell命令 dbg diffota,程序将把ROM启动标志位置为差分升级标志,并重启进入boot。

3.4 解压差分包并运算差分算法还原新固件

3.5 校验新还原固件

校验还原的文件和新固件对不上,通过Jlink回读数据,用beyond工具比对,发现步骤3.4的确有微小差异。

串口打印crc校验错误

Jlink回读数据和原始对不上

下载到设备的查分包和原始是一致的

有可能是解压有问题,打印出来看看解压的数据,在排查差分算法的问题。

最后一步解压状态可能不对

对比差分算法还原的内容,显示是flash写的问题。

3.6 拷贝新固件至APP运行分区并置位

不要拷贝新固件分区,直接擦写APP运行区,节省flash。

3.7 重启检查差分升级是否成功

差分升级成功

差分降级成功

4、 常见问题

FAQ1 差分算法还原的新固件和原始固件有细微差异,差异是两个字节FFFF?

答:是由于flash每次只能写4个字节导致。

FAQ2 差分升级报fsl err错?

答:是由于写flash的地址必须是偶数。

FAQ3 差分升级还原的新固件和原始固件还是对不上,有细微差异,差异是一个字节FF?

答:需要记住最后一个字节。

  • 软件
您觉得本篇内容如何
评分

评论

您需要登录才可以回复|注册

提交评论

感知论坛

这家伙很懒,什么描述也没留下

关注

点击进入下一篇

34980A 多功能开关/测量单元

提取码
复制提取码
点击跳转至百度网盘