ST-BlueNrg-lp蓝牙芯片OTA升级过程

2023-10-29

1. “无线”固件升级的概念

“空中下载”(OTA) 固件升级是一种协议,它允许低功耗蓝牙从设备通过空中接收来自低功耗蓝牙主设备的固件映像并将其写入闪存。 为了将事情置于低功耗蓝牙技术的正确环境中,OTA 固件升级框架定义了一项暴露其自身特征的服务,该服务可以与运行在低功耗蓝牙堆栈上的任何给定应用程序使用的其他服务共存。

  • 蓝牙 LE 主控器是由 BlueNRG-LP 开发套件平台通过 USB 连接到 PC 组成的组合系统。 该 BlueNRG-LP 平台由 BlueNRG GUI 驱动。 由于这种选择,PC 可以获得大量资源,特别是关于固件映像生成的编译器和在无线部署固件升级之前存储映像所需的内存空间。
  • 或者是手机App。

2. OTA固件升级服务说明

OTA FW 升级服务通过 BlueNRG-LP DK 软件包(Middlewares\ST\BLE_Application\OTA 文件夹)中提供的文件 OTA_btl.[ch] 解决。 OTA固件升级服务及其相关特性的简要说明如下:

  • Btl OTA service(OTA_SRVC_UUID):是固件升级服务——aci_gatt_srv_add_service((ble_gatt_srv_def_t *)&ota_service);
  • Btl image characteristic (IMAGE_CHR_UUID):它对包含OTA FW 升级服务的当前应用程序所建议的一些有关可用存储下限和上限的信息。
  • Btl new image characteristic (NEW_IMAGE_CHR_UUID):它包含主机打算通过ota发送的镜像的基地址和大小,以及请求从机在ota 传输期间发送ack的通知范围。
  • Btl new image content characteristic (IMAGE_CONTENT_CHR_UUID):它包含由主机发送的 16 字节固件映像数据块(通过特征写入命令)以及一些控制信息,例如:块序列号(2 个字节)和完整性检查的校验和(1 个字节)。
  • Btl expected image sequence number characteristic (IMAGE_SEQ_NUM_CHR_UUID: 它允许从设备通知主设备它期望的下一个数据块和错误条件。

OTA FW 升级服务和特性专有 UUID(128 位)在文件 OTA_btl.c 中定义。

OTA固件升级传输

本节将介绍 OTA 固件升级的步骤:

蓝牙LE OTA服务固件升级架构

  1. 一旦设置了运行 OTA FW 升级服务的主设备和从设备,就需要完成一个发现过程,以允许两个设备连接。 发现是通过侦听来自无线电范围内设备的广播(主动扫描)并在扫描响应中选择包含 OTA FW 升级服务 UUID(128 位)的广播来实现的。

  2. 此外,从主设备使用的广告消息中读取所选设备的名称,以增强从设备识别过程。

  3. 连接后,master 发送‘ACI_GATT_CLT_DISC_CHAR_BY_UUID’命令以读取所有 OTA FW 升级特征句柄。

  4. 主设备通过“ACI_GATT_CLT_READ”命令读取 Btl 镜像特征,以了解目标从设备Flash上的可用空间。

  5. 主机根据上一步携带的信息,选择合适的镜像进行空中发送。 候选镜像(作为 *.bin 文件放置在Master上的某处)必须适合目标可用的 Flash 范围。

  6. 选择完成后,主机发送“ACI_GATT_CLT_WRITE”以将镜像基地址、大小和通知范围写入 Btl 新镜像特征,并通过“ACI_GATT_CLT_READ”读回以进行验证。

  7. master 将预期的镜像序列号特征描述符写入 Btl,以启用镜像块序列号和错误的从属通知。 一旦从设备收到此命令,它就会发回一个Notification。

  8. 镜像传输开始。主机通过一系列“ACI_GATT_CLT_WRITE_WITHOUT_RESP”命令(每个 (N16) 字节块一个)以 (N16) 字节块发送图像。每次新的写入命令到达目标从设备时,它都会在 Btl 新镜像内容特征中写入新的数据块。每个 (N16) 字节的块都带有一个 2 字节长的序列号和一个字节长的校验和字段,以检查目的地的排序和消息完整性。每次从设备内部缓冲区被 (N16) 字节块填满时,它就会下载到Flash中。一旦从设备完成了对 (N*16) 字节块的内部缓冲区的管理,它就会向主设备发送一条通知消息,提供下一个预期块的块号。它可能会在最新的块上通知Flash写入错误和Flash验证错误,在这种情况下,引导加载会话应该在我们处理目标设备Flash问题的假设下停止。

    N = ((OTA_ATT_MTU_SIZE - 3 - 4)/16) 为 OTA FW 升级过程启用数据长度扩展。在 BlueNRG-LP 上,蓝牙 LE 堆栈 v3.0 或更高版本具有数据长度扩展功能(最大 PDU 长度 = 251 字节)和增加的 ATT_MTU 大小(> 23 字节),N 被定制以获得尽可能适合最大的 OTA 数据包大小。 允许 BlueNRG-LP OTA 客户端 ATT_MTU 大小 (OTA_ATT_MTU_SIZE)。这允许在链路层级别的每个蓝牙 LE OTA 数据包上增加和传输数据大小,并加快 OTA FW 升级过程。

    BLE API HCI_LE_SET_DATA_LENGTH() 和 ACI_ATT_CLT_EXCHANGE_MTU() API 用于在 OTA 客户端发送器和 OTA 服务器接收器端设置数据长度扩展功能,并就最大值达成一致。 支持的 ATT_MTU 大小。

    ACI_GATT_CLT_WRITE_WITHOUT_RESP命令使用的OTA FW数据包结构如下

  9. Where:

    • 校验和字节用于数据包完整性检查

    • 镜像数据字节包含要传输的输入文件的(N * 16)个字节

    • 需要 ack 字节指示 OTA 客户端在 OTA FW 传输期间何时期望来自从设备的通知(1:如果需要通知;0 如果不需要通知)

      (1:如果需要通知;0 如果不需要通知)

    • 序列号字节用于指示OTA FW传输期间使用的预期图像序列号值

  10. 如果目标设备 Flash 上成功下载的字节数等于最初提供的镜像大小信息,则 OTA FW 升级过程在每个应用程序中断向量表的保留条目上写入特定的应用程序有效性标签,以允许 OTA 复位 manager 正确识别新的有效应用程序的地址。

  11. 存储在中断向量表中的应用程序有效性标签允许通过避免跳转到无效应用程序(控制权始终转移到最后一个有效应用程序)来处理 OTA FW 升级会话失败。

OTA service manager framework(ota程序和应用不在一个程序中)

一种更简单的方法来自图 1 中描述的低功耗蓝牙 OTA 服务架构。 BlueNRG-LP OTA 主从设备,包括使用基本 OTA 服务管理器应用程序,其中包括低功耗蓝牙 OTA 服务及其特性和 OTA reset manager 的能力。

蓝牙 LE OTA 服务管理器架构包括以下组件:

  • OTA service manager

    它仅包含蓝牙 LE OTA 服务和特性,并为任何应用程序提供 OTA 固件升级功能。 它还包括 OTA 重置管理器功能,可将控制权传递给最新更新的有效应用程序。

  • 新应用程序

    • 是通过OTA服务管理器下载的应用镜像。
    • 不需要包含OTA固件升级服务。
    • 为了使用此功能,应用程序只需激活 OTA 服务管理器(特定 OTA_Switch_To_OTA_Service_Manager_Application() API 在 OTA_btl.c 文件中提供)。
    • 它位于固定的 Flash 地址。

OTA service manager application

OTA service manager application充当独立的 OTA FW 升级应用程序,为任何想要使用此功能的应用程序提供 OTA 固件升级功能,但不包括任何 OTA 服务。 它还包括 OTA 重置管理器功能,可将控制权传递给最新更新且有效的蓝牙 LE 应用程序。

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

ST-BlueNrg-lp蓝牙芯片OTA升级过程 的相关文章

  • ContOS7镜像下载与安装

    contos7的安装 文章目录 contos7的安装 一 镜像下载 二 安装 一 镜像下载 官网下载链接 http isoredirect centos org centos 7 isos x86 64 阿里云镜像站点 http mirro

随机推荐

  • Vite跨域设置

    Vite跨域设置 步骤一 vite config ts配置 proxy 跨域代理 apis target http env VUE APP BASE API target http url port changeOrigin true re
  • 一起学nRF51xx 6 - uart

    前言 通用异步接收器 发送器提供快速 全双工 内置流量控制的异步串行通信 CTS RTS 在硬件方面支持高达1Mbps波特率 支持奇偶校验和第9位数据生成 用于每个UART接口线的GPIO可从芯片上的GPIO中任选 而且可独立配置 这使得芯
  • CentOS8基础篇3:使用vim编辑文档

    一 vim编辑器 vim 编辑器共有三种工作模式 分别是命令模式 输入模式和末行模式 例2 24 使用vim编辑器创建并编辑文件hello c 二 查看文件内容命令 1 more less 浏览文件全部内容 当文件内容过多时 可以用more
  • 2.2析取范式与合取范式

    2 2析取范式与合取范式 本节给出命题公式的两种规范表示方法 这种规范的表达式能表达真值表所能提供的一切信息 定义2 2命题变项及其否定统称作文宇 仅由有限个文字构成的析取式称作简单析取式仅由有限个文字构成的合取式称作简单合取式 P g p
  • [正能量系列]失业的程序员(三)

    注 本文原型为作者的好友们 全文不完全代表作者本人的意图 本系列前两章 失业的程序员 一 二 一 这段时间我去参加了一个管理培训班 说实话去之前真的很痛苦 我一向认为那些都是骗人的玩意儿 在qq上找我学姐吐槽 说现在的广告真烦 搞这么多培训
  • Qt注册自定义类型

    一 自定义类型注册必要性 如果要在Qt信号槽中使用自定义类型 需要注意使用qRegisterMetaType对自定义类型进行注册 当然在不跨线程时使用自定义类型signal slot来传递 可能不会出现什么问题 一旦涉及跨线程就很容易出错
  • SPSS(基础篇09)--拆分数据文件

    拆分数据文件 文章目录 拆分数据文件 前言 1 在原始文件中拆分 1 1 拆分文件 比较组 1 2 拆分文件 按组来组织输出 1 3 其它用法 2 直接存储为多层 拆分结果单独存为文件 前言 导语 拆分文件是一种很常见的操作 比如 一个数据
  • 关于loss.backward()函数反向传播时叶子节点被释放

    之前写代码的时候遇到的一个问题 一直没有解决 后来稀里糊涂的解决了 我也不知道原因 这里贴出来 希望大家遇到这个问题的时候能有些启发 图来自网上搜索 由于问题是很久以前的了 当时没有保存截图 抱歉了 这个问题的出现其实可以将 loss ba
  • spring-aop组件详解——TargetSource目标源

    TargetSource 目标源 是被代理的target 目标对象 实例的来源 TargetSource被用于获取当前MethodInvocation 方法调用 所需要的target 目标对象 这个target通过反射的方式被调用 如 me
  • [工业互联-19]:如何在QT中增加SOEM主站

    目录 第1章 基本步骤 第2章 详细步骤 2 1 QT安装 2 2 VS安装 2 3 Win10 Debuggers 2 4 QT配置 2 5 SOEM移植 lib库生成 2 文件移植 文件整理 第1章 基本步骤 要在QT中添加SOEM主站
  • jsp 实现在线人数统计

    首先写个类 import javax servlet import javax servlet http public class SessionCounter implements HttpSessionListener private
  • Xcode7.1环境下上架iOS App到AppStore 流程 (Part 三)

    前言部分 part三 部分主要讲解 Xcode关联绑定发布证书的配置 创建App信息 使用Application Loader上传 ipa文件到AppStore 一 Xcode配置发布证书信息 1 给应用绑定App ID并添加Team账号
  • 爬取某网站的内容、得不到html页面的内容

    Python爬取 1 爬取内容 对某网站内容与热度进行爬取 分析 我们所需的数据是热搜榜的1 10 第一个数据pass divs html xpath div class wbpro side card7 div position gt 1
  • npm init @vitejs/app 初始化项目报错

    我的解决办法在红色加粗的那里 仅供参考 npm init vitejs app vitejs create app is deprecated use npm init vite instead C Users AppData Local
  • List排序 Sort的用法

    目录 1 简要说明 2 官方文件 3 举例说明 3 1 默认排序Sort 3 2Sort IComparer comparer 3 3Sort Comparison comparison 3 4Sort int index int coun
  • C++11新特性之右值引用

    目录 前文 一 什么是右值引用 二 左值引用和右值引用比较 三 右值引用的应用场景以及作用 四 右值引用左值的场景分析 五 完美转发 总结 前文 在C 98标准后 C 11标准的更新为C 注入了新活力 C 11新加了140多个新特性 我们这
  • C#反射Activator

    一 反射的定义与使用场景 反射是指程序可以访问 检测和修改它本身状态或行为的一种能力 程序集包含模块 而模块包含类型 类型包含成员 反射提供了封装程序集 模块和类型的对象 Type类型 可以使用反射动态创建类型的实例 将类型绑定到现有对象
  • 【自己创建分词器tokenizer】(2)——BPE tokenizer

    自己创建分词器 WordPiece tokenizer 自己创建分词器 BPE tokenizer 自己创建分词器 Unigram tokenizer 1 整体步骤 分词包括以下几个步骤 标准化 Normalization 对文本进行必要的
  • mysql带入参的存储过程_MySQL带参数的存储过程小例子

    http wwty iteye com blog 698239 mysql存储过程也提供了对异常处理的功能 通过定义HANDLER来完成异常声明的实现 语法如下 DECLARE handler type HANDLER FOR condit
  • ST-BlueNrg-lp蓝牙芯片OTA升级过程

    1 无线 固件升级的概念 空中下载 OTA 固件升级是一种协议 它允许低功耗蓝牙从设备通过空中接收来自低功耗蓝牙主设备的固件映像并将其写入闪存 为了将事情置于低功耗蓝牙技术的正确环境中 OTA 固件升级框架定义了一项暴露其自身特征的服务 该