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

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数据包结构如下ST-BlueNrg-lp蓝牙芯片OTA升级过程_第1张图片

  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 的能力。

ST-BlueNrg-lp蓝牙芯片OTA升级过程_第2张图片

蓝牙 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 应用程序。

你可能感兴趣的:(嵌入式,BLE&BLE,MESH,蓝牙,ota,ST)