0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

冬至子 来源:Tianlair工作室 作者:落霞天 2023-05-19 17:11 次阅读

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?

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ZigBee技术
    +关注

    关注

    3

    文章

    115

    浏览量

    42390
  • ROM
    ROM
    +关注

    关注

    4

    文章

    572

    浏览量

    85769
  • OTA
    OTA
    +关注

    关注

    7

    文章

    580

    浏览量

    35217
  • LoRa模块
    +关注

    关注

    5

    文章

    135

    浏览量

    13924
收藏 人收藏

    评论

    相关推荐

    如何去实现基于单片机的分升级

    算法有开源的bsdiff,压缩算法也有开源的单片机就能用的,把这两个结合起来放单片机里就可以实现
    发表于 11-19 06:14

    怎样采用开源算法BSDIFF实现数据的分化呢

    怎样采用开源算法BSDIFF实现数据的分化呢?如何去实现呢?
    发表于 02-10 06:14

    基于演化算法的PID参数优化算法

    PID 参数优化是自动控制领域研究的一个重要问题. 提出了一种演化算法的PID参数优化算法, 同时, 为了增强算法的易用性, 对
    发表于 06-20 10:19 25次下载

    对Rijndael的JAVA攻击与防范

    本文探讨了对Rijndael算法的各种攻击,介绍了一种对Rijndael算法攻击的JAVA实现,提出了几种防范对Rijndael
    发表于 08-22 10:06 14次下载

    基于遗传加算法的云计算任务调度

    基于遗传加算法的云计算任务调度
    发表于 01-07 21:28 0次下载

    (Xilinx)FPGALVDS高速传输的实现

    (Xilinx)FPGALVDS高速传输的实现
    发表于 03-01 13:12 66次下载

    基于隐私的轨迹模式挖掘算法

    针对现有基于隐私的频繁轨迹模式挖掘算法全局敏感度过高、挖掘结果可用性较低的问题,提出一种基于前缀序列格和轨迹截断的隐私下频繁轨迹模式
    发表于 11-25 11:38 0次下载
    基于<b class='flag-5'>差</b><b class='flag-5'>分</b>隐私的轨迹模式挖掘<b class='flag-5'>算法</b>

    基于密度的自动聚类算法

    聚类作为无监督学习技术,已在实际得到了广泛的应用,但是对于带有噪声的数据集,一些主流算法仍然存在着噪声去除不彻底和聚类结果不准确等问题.本文提出了一种基于密度的自动聚类
    发表于 12-18 11:16 0次下载

    基于双变异策略的骨架算法

    骨架分进化算法能够较好规避分进化算法控制参数和变异策略选择问题。针对基于双变异策略的经典骨架
    发表于 01-16 16:08 0次下载

    面向随机森林的隐私保护算法

    提出一种基于随机森林的隐私保护算法DiffPRFs,每一棵决策树的构建过程采用指数机制选择分裂点和分裂属性,并根据拉普拉斯机制添加噪
    发表于 02-08 17:10 3次下载

    如何使用隐私保护进行谱聚类算法

    ,干扰样本个体之间的权重值,实现样本个体间的信息隐藏以达到隐私保护的目的。通过UCI数据集上的仿真实验,表明该算法能够一定的信息损失度范围内实现
    发表于 12-14 10:54 11次下载
    如何使用<b class='flag-5'>差</b><b class='flag-5'>分</b>隐私保护进行谱聚类<b class='flag-5'>算法</b>

    基于单片机的分升级

    算法有开源的bsdiff,压缩算法也有开源的单片机就能用的,把这两个结合起来放单片机里就可以实现
    发表于 11-12 21:06 11次下载
    基于单片机的<b class='flag-5'>差</b>分升级

    探头mipi测试的应用

    探头是一种广泛应用于电子测试领域的测试工具。MIPI(Mobile Industry Processor Interface)是由一组移动行业领先公司联合开发的一种高效的串行总线协议。移动设备的生产和测试
    的头像 发表于 05-31 09:59 1001次阅读
    <b class='flag-5'>差</b><b class='flag-5'>分</b>探头<b class='flag-5'>在</b>mipi测试<b class='flag-5'>中</b>的应用

    高频灵活定制-存储与计算 可编程振荡器YSO210PR应用于服务器与大数据

    可编程振荡器 YSO210PR机器人的智能视觉控制、工业、望远镜等领域具有显著优势。其高精度、稳定性和灵活的定制特性使得YSO
    的头像 发表于 01-03 17:14 429次阅读
    高频灵活定制-存储与计算 可编程<b class='flag-5'>差</b><b class='flag-5'>分</b>振荡器YSO<b class='flag-5'>210</b>PR应用于服务器与大数据

    可编程晶振YSO210PR满足电子通信行业多种应用解决方案

    到线路转换)领域是现代通信系统必不可少的一环,而可编程振荡器则是该领域中的重要组成部分。它能够提供稳定可靠的时钟信号,确保数据的准确传输和同步。高速通信的背景下,YSO
    发表于 08-05 10:45 0次下载