蓝牙设备固件升级

蓝牙设备固件升级_第1张图片

1. 升级介绍

蓝牙固件升级是使用手机给固件进行更新,以达到修复 bug 的目的,完善功能的作用。升级的大概流程是:

  1. 当蓝牙设备的固件需要升级时,由嵌入式开发人员提供新的固件,由服务器管理人员将固件放到服务器上。
  2. 用户打开手机 APP 的时候会检测到服务器有更新,请求更新蓝牙设备固件,确认更新后,手机会从服务器下载固件。
  3. 下载完毕后,APP 会读取固件内容,并根据升级协议将内容传到蓝牙设备里,完成升级。

DFU = Device Firmware Update (设备固件更新)
OTA = Over The Air (空中升级)

2. 升级流程

各个蓝牙设备不尽相同,以下是我测试设备的升级流程:

2.1 OTA下载固件

从云端下载的固件为 .bin 后缀的文件,文件名会有一定的格式,含有固件版本号和文件 CRC32 校验值。

2.2 数据分块

规定一个数据块大小比如 2048 字节,然后把升级数据进行分块,不够的就剩余多少作为一块。蓝牙一次发送的数据量是有限的,所以每次发送 20 字节的数据。这个数据要遵循升级数据格式,带指令头和校验和,下载包的数据只是这 20 字节中的一部分。所有包内数据都携带在每条升级数据指令中。

2.3 升级过程
  1. 连接设备,发送升级请求。
  2. 待蓝牙确认之后,开始发送数据头告知蓝牙此次发送的数据量和 CRC 校验。
  3. 开始发送升级数据。(每条数据之间间隔 20ms 为了蓝牙能够方便处理)。
  4. 等待一个块发送完就发送块结束命令。
  5. 蓝牙确认发送下一个块,返回错误则终止此次升级。
  6. 发完所有数据之后发送升级完成。
  7. 蓝牙确认则升级完成,返回错误则升级失败。

3. 流程图

蓝牙设备固件升级_第2张图片

4. 总结

蓝牙升级最复杂的就在升级过程,大量的数据与蓝牙交互,这时最好记录发送到升级数据的那一部分,可以给用户展示升级的进程。

作者:zhangferry
链接:https://juejin.im/post/5cb6a852f265da03ad054966

你可能感兴趣的:(iOS)