【BLE】蓝牙外围设备升级(OTA)

2023-11-17

需求分析

本案例中,智能手表作为中央设备对心率带通过BLE进行升级,这里手表首先要通过某种方式获得心率带的固件,然后通过BLE对心率带进行连接,连接后两者建立协议进行固件的发送及接收,最后心率带接收完固件后对自身进行加载。
为了蓝牙升级时简化协议逻辑,我们建立两个数据通道,一个是命令通道,专门用来发命令;一个是数据传输通道,专门用来发送固件数据,在实现中其实就是在心率带设备里面创建两个GATT service,然后手表分别对这两个服务进行连接,通过连接句柄来收发数据,一个发送命令相关的数据,一个只发送固件数据。
针对升级协议,我们已经制定好了两个数据通道:命令通道和数据通道。之前提到了数据通道只用来发送固件内容,那么命令通道呢?我们可以将命令通道用来干这些事情:

  • 发送升级指令
  • 发送数据校验值
  • 发送数据长度
  • 发送已经固件升级过程中的数据偏移

升级协议交互

在这里插入图片描述

协议具体定义

enum
{
	OTA_READY = 0,
	OTA_FLASH,
}CMD_E;

协议交互进一步解读

//命令结构
struct
{
	uint8_t cmd;
	uint8_t packet_num;
	uint8_t data[1];//可变长数组,这里代表任意数量数据
	uint8_t checksum;
}cmd_t;

//OTA完成命令格式
struct
{
	uint8_t cmd;
	uint8_t packet_num;
	uint32_t filesize;
	uint16_t crc;
	uint8_t checksum;
}cmd_finish_t;

准备命令是想获取心率带需要升级哪些文件或资源,如果都不要升级的话说明心率带的资源或固件都已经是最新的了。整个固件下载完成后,要对这个文件进行校验,校验值和主机传输过来的相等的话需要回应升级成功相应字段,反之升级失败,由 cmd_finish_t 实现。
固件数据是4K为一个校验单位发送的,每个4K需要分包发送,分包发送的每个包的大小可以自定义,一般不会太大。这部分在协议流程图里没有表现出来,具体算法请看下一节。

一个校验单位(4K)的具体传输方式

在这里插入图片描述

struct
{
	uint8_t file_type;
	uint32_t offset;
	uint16_t packet_len;
	uint32_t total_len;
	uint16_t crc;
	uint8_t checksum;
}section_start_t;

struct
{
	uint8_t crc_equal;//是否需要发送当前4K数据
	uint8_t is_fast_mode;
	uint8_t mtu;
	uint8_t packnum;//几包数据一个应答
}section_start_rsp_t;

方案实现

整个OTA方案可以分为三部分:

  • 手表里面保存到心率固件资源(可以通过APP或者线下串口或USB烧录)。
  • 蓝牙命令和数据服务的实现。
  • 心率带接收到数据后,BOOTLOADER进行固件加载。

如果想进一步了解实现细节的话可以私聊或者添加文章下方公众号获取。

总结

每4K作为一个校验单位的传输方式可以起到断点续传的效果,相当于每开始传输一个4K之前,判断FLASH里面的数据是不是已经写过的,如果写过的话,则跳过该4K。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【BLE】蓝牙外围设备升级(OTA) 的相关文章

  • 链塔智库

    目录 一 各地政策要闻 宁夏 推广区块链等技术实现数字化转型 宁波 前瞻性布局区块链等未来产业 重庆 区块链等新一代信息技术产业占全市软件业务收入总额近两成 云南 积极探索区块链等新技术在药品安全事前事中事后监管应用 广西 充分发挥跨境金融
  • MQTT.js 入门教程

    简介 MQTT js 是一个开源的 MQTT 协议的客户端库 使用 JavaScript 编写 主要用于 Node js 和 浏览器环境中 是目前 JavaScript 生态中使用最为广泛的 MQTT 客户端库 MQTT 是一种基于发布 订
  • C#使用欧姆龙PLC的Fins协议读写PLC地址(基本封装)

    FINS通讯概述 FINS factory interface network service 通信协议是欧姆龙公司开发的用于工业自动化控制网络的指令 响应系统 运用 FINS指令可实现各种网络间的无缝通信 通过编程发送FINS指令 上位机
  • EMC测试的那些项目,你都知道么?

    转载 EMC电磁兼容 2022 03 27 08 30 EMC检测 电磁兼容性检测 的全称是Electro Magnetic Compatibility 其定义为 设备和系统在其电磁环境中能正常工作且不对环境中任何事物构成不能承受的电磁骚扰
  • 一文读懂Matter协议的前世今生和未来

    从事Zigbee行业的应该都知道今年Zigbee联盟已经改名为CSA联盟 并推出一个全新的 定位于解决IOT碎片化的统一协议 即Matter协议 Matter协议的由来 Matter协议的前身CHIP Connected Home Over
  • 智慧农业物联网系统 智慧农业解决方案

    智慧农业是智慧经济发展在农牧业上的运用反映 伴随着5G无线通信技术 互联网大数据信息资源管理技术性等现代化技术性普及化 物联网的实际运用标准逐渐完善 传统农业便熟练掌握物联网 摇身一变变成智能农业 智慧农业应用农业地区的每个传感器连接点检测
  • ECCO首家全球旗舰店在上海正式开业;海立马瑞利全球总部启动运营;西门子医疗完成收购瓦里安

    一周企业资讯看点 ECCO首家全球旗舰店正式开业 海立马瑞利全球总部启动运营 赛诺菲中国首个全球研究院落成启用 西门子医疗完成收购瓦里安 温德姆酒店集团计划今年大中华区新开超过100家酒店 Club Med丽江度假村预计将于今年秋天开业 三
  • 正点原子STM32 H743完成RT Thread下的LAN8720 网卡驱动 LWIP跑起来

    目前RT官网对H743的支持力度还不理想 本想按照F407的搞定网卡的套路来搞定H743的网卡 因为phy也是LAN 8720 以为会很轻松 没想到却是一条遍布荆棘的路 好在已经有不少大佬做了不少工作 终于在巨人肩膀人完成了网卡的驱动 能p
  • 普洛斯与宁德时代签署战略合作协议;高博昌平国际研究型医院成为北京自贸区首批签约项目

    今日看点 普洛斯宣布与宁德时代签署战略合作协议 双方凭借在各自产业领域内的领先优势 组建资产管理合资公司 持有 管理和运营宁德时代电池 储能系统及其支持的各类车辆 船舶等资产 通过绿色能源资产服务化 降低物流 运输等相关企业大规模使用新能源
  • [AWS] 利用serverless将WebSockets与AWS API Gateway和Lambda一起使用来构建实时应用程序

    1 WebSocket API 概念 WebSocket API由一个或多个路由组成 路由选择表达式用于确定特定请求应使用的路由 该选择将在请求中提供 根据请求对表达式进行求值 以产生与您的路线的routeKey值之一相对应的值 例如 如果
  • ROS串口通信

    1 USB转串口设备连接到Ubuntu虚拟机 1 1 查看windows 是否能识别USB转串口 将 USB转串口设备 插入电脑的USB接口 在搜索中输入 设备管理器 打开 设备管理器 windows识别到USB转串口 1 2 USB转串口
  • 蓝牙-基础篇-蓝牙简介

    文章目录 蓝牙特点 蓝牙功能 蓝牙的两种技术 蓝牙特点 低功耗 短距离 跨设备 蓝牙功能 跨设备传输流式音频 跨设备传输数据 广播信息 蓝牙的两种技术 传统蓝牙技术 蓝牙版本2 0 2 1 即Basic Rate Enhanced Data
  • MQTT-java使用说明

    MQTT java使用说明 本文的资料下载 链接 https pan baidu com s 1OCfsQ NqcehKy86kYkA wg pwd 1234 提取码 1234 MQTT基本介绍 MQTT是一个客户端服务端架构的发布 订阅模
  • 使用Arduino开发ESP32(22):蓝牙作为客户端使用

    文章目录 目的 基础准备 搜索蓝牙设备 搜索设备 信息查询 连接与交互 总结 目的 ESP32的蓝牙除了作为服务器 从设备 使用还可以作为客户端 主机 使用 这篇文章将对相关内容做个简单说明 基础准备 这篇文章中测试需要先准备一个蓝牙服务器
  • DSS部署-11、Spark on Yarn部署

    文章目录 第七部分 Spark on Yarn部署 相关配置 操作记录如下 spark sql e show databases 第七部分 Spark on Yarn部署 相关配置 tar xf spark 2 3 2 bin hadoop
  • BLE连接、配对和绑定

    参考 一篇文章带你解读蓝牙配对绑定 参考 BLE安全之SM剖析 1 参考 BLE安全之SM剖析 2 参考 BLE安全之SM剖析 3 参考 https blog csdn net chengbaojin article details 103
  • Azure IoT 中心中的设备反欺骗如何工作?

    来自Azure开发指南https azure microsoft com en us documentation articles iot hub devguide 有一小节 如下图 讲的是设备防欺骗 我不清楚 它说 IoT 中心用属性标记
  • 如何在 Windows Core IoT 应用程序中显示当前时间的时钟?

    我正在尝试创建一个在 Raspberry Pi 2 上无头运行的 Windows 10 IoT 应用程序 一切都设置正确 我可以使用 Raspberry Pi 作为远程机器进行调试 从 Visual Studio 进行调试 现在我想在应用程
  • AWS IOT - 建立设备所有权和防止未经授权的访问的最佳方式是什么

    在AWS IOT中 我没有在网上看到任何解释来描述确保发布带有敏感数据的主题的设备只能由设备所有者访问的最佳方法 例如 Bob 登录他的智能手机应用程序并使用 Cognito 进行身份验证 身份池身份验证角色已有一项策略 允许访问 AWS
  • 视频馈送至 ThingsBoard 仪表板

    我目前使用 ThingsBoard 作为 IoT 代理来捕获来自多个传感器的遥测数据并将其显示到仪表板 我想添加显示来自 iPhone 相机或网络摄像头的实时视频源的功能 我想知道这里是否有人知道 ThingsBoard 是否支持任何类型的

随机推荐

  • 韦东山和正点原子IMX6ULL开发版的区别

    网卡驱动复位引脚硬件区别 网卡 复位脚 厂家 io 网卡0 SNVS TAMPER9 100ask gpio5 IO9 网卡1 SNVS TAMPER6 100ask gpio5 IO6 网卡0 SNVS TAMPER7 正点原子 gpio
  • 平头哥(T-Head )开源RISCV处理器OpenC906 RTL仿真

    在过去的几年里 阿里集团平头哥陆续推出了几款RISCV处理器 有些处理器已经在产业界得到了应用 比如在某志的D1处理器中 就嵌入了平头哥的玄铁C906内核为 芯 RISCV虽然是一个开放标准 并且网络上也不乏一些开源核的RTL实现 但是商用
  • 布局-ConstrainLayout

    Relative positioning 相对位置 layout constraintLeft toLeftOf 将所需视图的左边与另一个视图的左边对齐 layout constraintLeft toRightOf 将所需视图的左边与另一
  • Vue中使用TailwindCSS实现深色模式(跟随系统和手动控制)

    Vue中使用TailwindCSS实现深色模式 跟随系统和手动控制 源码下载 先贴一下手动控制的成品效果 创建VUE工程 初始化 Tailwind CSS 安装 Tailwind 以及其它依赖项 创建配置文件 在 CSS 中引入 Tailw
  • 174万亿采购,奔向数字化

    采购不单纯发生在外部 更发生在内部 只有两者同时进行 才能完成采购中心从成本到利润中心角色的转变 作者 斗斗 编辑 皮爷 出品 产业家 数字化 让很多企业业务流程发生了质变 2022数字化采购发展报告 显示 数字化采购的价值可降低30 供应
  • 基于java的小区车辆管理系统

    本系统主要采用JSP为编程语言 可以方便管理小区车辆管理需要 后台主要包括车辆管理 停车卡管理 车位管理等功能 本系统操作简单 使用方便 本系统旨在为小区物业管理人员提供一个功能齐全 使用方便的基于卡式的小区车辆管理系统 以代替传统的人员管
  • C#—DataTable常见用法

    1 构建DataTable数据源 DataTable dt new new DataTable dt new Columns Add column1 typeof string dt new Columns Add column2 type
  • check original full command

    suppose I create a shortcut command named sql how can I know its original full command xxx 1014 type sql sql is hashed a
  • 【centos8.2下载安装netcat监听工具】——关注紫灵小姐姐不踩坑

    下载 wget https sourceforge net projects netcat files netcat 0 7 1 netcat 0 7 1 tar gz 解压 安装 cd netcat 0 7 1 configure 如果报
  • 数据库 练习(五)

    创建student表 CREATE TABLE Student S VARCHAR 10 Sname VARCHAR 10 Sage DATETIME Ssex NVARCHAR 10 创建数据 INSERT INTO Student VA
  • typora使用教程

    typora使用教程 1 多级标题的使用 加空格 表示一级标题 加空格 表示二级标题 加空格 表示三级标题 加空格 表示四级标题 typora最多支持六级标题 2 有序列表和无序列表的使用 或 加空格 会生成无序列表 如下 这是 加空格生成
  • 【你哥电力电子】THE BOOST 升压斩波电路1

    BOOST电路1 2023年1月12日 nige in Tongji University elecEngeneer 上链 文章目录 BOOST电路1 1 BOOST电路来源 2 CCM下的理想稳态分析 2 1 分析流程 3 DCM下的理想
  • Post请求的四种方式

    Post请求四种传送方式的Python实现 HTTP 协议规定 POST 提交的数据必须放在消息主体 entity body 中 但协议并没有规定数据必须使用什么编码方式 常见的四种编码方式如下 1 application x www fo
  • 【微服务】一张图搞懂微服务架构设计

    一张图搞懂微服务架构设计 1 前言 2 流量入口 Nginx 3 网关 4 业务组件 5 服务注册中心 6 缓存和分布式锁 7 数据持久层 8 结构型数据存储 9 消息中间件 10 日志收集 11 任务调度中心 12 分布式对象存储 1 前
  • 区块链密码学(一):密码学基础及概念

    一 概念 主要介绍非对称加密的一些概念 公钥 私钥 均可加密或解密 配对即可 一般来讲 私钥用来进行解密和签名 是给自己用的 公钥由本人公开 用于加密和验证签名 是给别人用的 签名 内容 gt hash gt digest gt 私钥加密
  • zookeeper学习网址

    1 分布式服务框架 ZooKeeper 管理分布式环境中的数据 http www ibm com developerworks cn opensource os cn ZooKeeper 2 ZooKeeper系列讲座 很全面 http w
  • ES6数组及编程题

    1 forEach var arr 1 2 3 4 arr forEach item index arr gt console log item 结果为1 2 3 4 数组的遍历方法 无返回值 不改变原数组 2 map var arr 1
  • 100天精通Python(基础篇)——第27天:函数初体验

    函数的定义 def 函数名 传入参数 函数体 return 返回值 参数不需要可以省略 返回值不需要可以省略 示例代码 str1 123456 str2 1234567 str3 12345678 def my len data count
  • C/C++的头文件 / 源文件 / 条件编译 / 多文件编译

    C C 的头文件 源文件 条件编译 多文件编译 头文件 头文件的定义与作用 include编译指令 头文件实例 源文件 条件编译 什么是条件编译 为什么要用条件编译 条件编译的使用 多文件编译 总结 头文件 头文件的定义与作用 之前我的博客
  • 【BLE】蓝牙外围设备升级(OTA)

    目录 需求分析 升级协议交互 协议具体定义 协议交互进一步解读 一个校验单位 4K 的具体传输方式 方案实现 总结 需求分析 本案例中 智能手表作为中央设备对心率带通过BLE进行升级 这里手表首先要通过某种方式获得心率带的固件 然后通过BL