当前位置: 首页 > news >正文

从零打造可落地的直流电机 PID 驱动系统 (八):蓝牙差分 OTA 升级,传输速度提升 10 倍以上

前言大家好!在之前的系列文章中,我们已经为直流电机 PID 驱动系统添加了完整的蓝牙 OTA 升级功能,实现了无需物理接触即可远程更新固件的目标。然而,在实际使用过程中,我们发现传统的整包 OTA 升级存在一个明显的痛点:对于蓝牙这种低速通信接口,传输较大的固件文件需要很长时间。以我们的系统为例,一个 45KB 的固件文件,通过 HC-05 蓝牙模块(波特率 115200bps)传输需要大约 15 秒。如果固件更大或者蓝牙信号不好,升级时间会更长,严重影响用户体验。更重要的是,大多数固件更新只是修复了几个 bug 或者添加了少量功能,新旧固件之间的差异非常小,传输整个固件是对带宽和时间的极大浪费。这就是 ** 差分升级(增量升级)** 技术的价值所在。差分升级只传输新旧固件之间的差异部分(差分包),而不是整个固件。对于大多数小版本更新,差分包的大小通常只有几 KB,传输时间可以缩短到 1-2 秒,提升 10 倍以上的升级速度,同时大大节省了流量消耗。本文将在上一篇蓝牙 OTA 升级的基础上,从零教你如何基于bsdiff 算法实现一套高效可靠的蓝牙差分 OTA 升级系统。我们将详细讲解差分升级的技术原理、Flash 分区规划、PC 端差分包生成工具、STM32 端轻量级 bspatch 移植,以及 Android APP 端的修改。全程代码带详细注释,零基础也能一步步跟着做。一、差分升级技术原理1.1 什么是差分升级差分升级(Incremental Update),也叫增量升级,是一种只传输新旧版本文件之间差异部分的更新技术。与传统的整包升级相比,差分升级具有以下显著优势:传输数据量小:通常只需要传输原固件 1%-10% 的数据量升级速度快:传输时间大幅缩短,用户几乎感觉不到等待流量消耗少:对于使用移动网络的设备,可以节省大量流量可靠性高:传输的数据量越小,出错的概率越低1.2 bsdiff 算法原理bsdiff 是由 Colin Percival 于 2003 年开发的一款高效的二进制差分算法,是目前应用最广泛的嵌入式固件差分算法之一。它基于后缀数组技术,能够高效地找到两个二进制文件之间的相似区域和差异区域,生成非常小的差分包。bsdiff 算法的工作流程分为两个部分:diff 过程(PC 端):比较旧固件和新固件,生成差分包patch 过程(设备端):使用旧固件和差分包,还原出新固件bsdiff 差分包格式:控制块:包含了如何使用差异块和额外块来构建新固件的指令差异块:包含了新旧固件之间的差异数据额外块:包含了新固件中新增的、在旧固件中不存在的数据验证来源:Colin Percival. bsdiff: Binary diff/patch utility[EB/OL]. https://www.daemonology.net/bsdiff/, 2003.1.3 差分 OTA 整体流程我们在原有整包 OTA 流程的基础上,增加了差分包生成和差分还原步骤,形成了完整的差分 OTA 升级流程:PC端:旧固件.bin + 新固件.bin → bsdiff生成差分包.patch → 复制到手机手机APP:选择差分包.patch → 发送差分升级指令(含差分包大小、SHA-256哈希) → 分块传输差分包STM32 Bootloader:接收差分包 → 从运行区读取旧固件 → bspatch还原新固件 → 写入升级区 → 校验新固件 → 切换运行区 → 重启运行新固件关键改进点:固件在 PC 端预先生成差分包,手机 APP 只负责传输差分包Bootloader 需要保留旧固件,用于还原新固件采用 "双运行区" 设计,新固件还原完成并校验通过后再切换运行区,确保设备不会 "变砖"二、Flash 分区规划调整为了支持差分升级,我们需要对 STM32F103C8T6 的 64KB 内部 Flash 进行重新分区。由于差分升级需要保留旧固件,我们采用 **"Bootloader + 双运行区"** 的三分区方案:地址范围用途大小说明0x08000000 - 0x08003FFFBootloader 区16KB存放引导加载程序,负责差分还原和分区切换0x08004000 - 0x0800BFFF运行区 A32KB存放当前运行的固件0x0800C000 - 0x0800FFFF运行区 B16KB存放升级后的新固件0x08003FF0 - 0x08003FFF升级标志区16 字节存储升级标志、当前运行区、固件大小和哈希值分区说明:Bootloader 区:大小保持 16KB 不变,增加了差分还原和分区切换功能运行区 A:作为主运行区,大小 32KB,足够存放我们的电机驱动固件运行区 B:作为升级区,大小 16KB,用于存放还原后的新固件升级标志区:增加了 "当前运行区" 标志位,用于 Bootloader 判断从哪个分区启动注意:由于 STM32F103C8T6 的 Flash 空间有限,我们将运行区 B 的大小设置为 16KB。这意味着新固件的大小不能超过 16KB。如果你的固件更大,可以考虑使用外部 Flash 或者更换更大 Flash 的 MCU。验证来源:STMicroelectronics. STM32F103xx 参考手册 (RM0008) 第 3 章:闪存和选项字节三、PC 端差分包生成工具实现我们首先需要开发一个 PC 端的差分包生成工具,用于比较新旧固件并生成 bsdiff 格式的差分包。本文使用 Python 语言开发,调用官方的 bsdiff 命令行工具。3.1 环境准备下载并安装 bsdiff 4.3 版本:Windows:从https://www.daemonology.net/bsdiff/下载预编译二进制文件Linux:sudo apt-get install bsdiffmacOS:brew install bsdiff安装 Python 依赖:pip install hashlib3.2 差分包生成工具代码实现创建一个名为diff_generator.py的文件,输入以下代码:import os import hashlib import subprocess import sys def generate_diff(old_firmware_path, new_firmware_path, diff_path): """ 使用bsdiff生成差分包 """ # 检查输入文件是否存在 if not os.path.exists(old_firmware_path): print(f"错误: 旧固件文件 {old_firmware_path} 不存在!") return False if not os.path.exists(new_firmware_path): print(f"错误: 新固件文件 {new_firmware_path} 不存在!")
http://www.gsyq.cn/news/1354508.html

相关文章:

  • Proxmox VE ARM64实战:在树莓派和ARM服务器上部署企业级虚拟化平台
  • 写给前端的 CANN-asnumpy:昇腾原生NumPy到底是啥?
  • 【Qt学习】信号槽
  • 2026大竹县黄金回收避坑指南;闲置黄金变现;认准铭润金银回收,诚信靠谱 - 亦辰小黄鸭
  • C++图文并茂轻松进阶面向对象
  • STM32CubeMX与Keil RTX中断优先级冲突解决方案
  • 义乌GEO优化公司哪家靠谱?拒绝转包套路,4个维度精准筛选优质服务商(2026年5月最新) - GEO排行榜
  • 2026大足县黄金回收避坑指南;闲置黄金变现;认准铭润金银回收,诚信靠谱 - 亦辰小黄鸭
  • DownKyi完整指南:如何轻松下载B站8K超高清视频的终极教程
  • Topit 技术深度:macOS窗口层级管理的现代SwiftUI实现与架构解析
  • 嘉兴黄金回收门店避坑指南 六家靠谱店铺推荐 优选长悦 - 专业黄金回收
  • 微信PC端二维码刷新机制深度解析:心跳、状态与逆向定位
  • ncmdumpGUI:一键解密网易云音乐NCM文件,让音乐重获自由
  • 2026年成都公司注销代办费用是多少? - 品牌推荐官方
  • 如何用Python轻松读取通达信数据:Mootdx完整指南
  • 详解Linux文件操作知识点
  • 终极指南:如何在Windows上轻松读写Btrfs文件系统
  • CVE-2026-20223深度解析:Cisco零信任平台满分漏洞,未认证API一键接管全局
  • 机器人任务级迭代学习控制技术解析与应用
  • Office RibbonX Editor:重塑Microsoft Office界面定制的终极免费工具
  • 同样是写毕业论文,为什么有人神速定稿,有人越写越崩?
  • JBoss JMXInvokerServlet反序列化漏洞深度解析
  • 如何5分钟打造Zotero中文文献管理终极方案:茉莉花插件完全指南
  • ppInk:Windows上最强大的免费屏幕标注工具终极指南
  • 终极Galgame翻译方案:如何免费畅玩日语视觉小说
  • 香城人力资源服务选购指南,实力与口碑兼具的选择 - mypinpai
  • 2026年AI智能算力服务研究报告:HBM、CPO与重构|附240+份报告PDF、数据、可视化模板汇总下载
  • Unity UGUI循环列表实战:SuperScrollView高性能滚动优化指南
  • 终极指南:如何使用Bilibili缓存视频合并工具完美导出完整MP4文件
  • 性价比高的热力管道厂商,锅炉安装口碑好 - mypinpai