OTA组件设计方案

本文最后更新于:10 分钟前

OTA组件设计方案

一、组件概述

OTA(over the air)组件主要是针对设备端的固件升级功能,主要包括固件下载、固件校验、固件升级等功能。

二、需求分析

OTA业务需求包含:

  • 固件下载
  • 固件校验
  • 固件升级
  • 固件升级状态管理

三、软件设计

3.1 设计目标

  • 适用于各种协议:HTTP、MQTT、CoAP、BLE、串口等
  • 适用于各种平台:Linux、Windows、MacOS、FreeRTOS、uCOS、RT-Thread等
  • 适用于各种固件:Bootloader、Application、Bootloader+Application、双核场景等
  • 适用于各种升级方式:全量升级、增量升级、差分升级等
  • 适用于各种升级场景:远程升级、本地升级、远程升级+本地升级等

3.2 设计思路

OTA业务分层如下图所示:

升级数据包格式如下图所示:

升级流程如下图所示:

四、落地实践

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
typedef enum
{
EXCEPTION_TYPE_NONE = 0, // 无异常
EXCEPTION_TYPE_CRC, // CRC校验异常
EXCEPTION_TYPE_SIZE, // 大小校验异常
EXCEPTION_TYPE_TIMEOUT, // 超时异常
EXCEPTION_TYPE_ID, // ID校验异常
}EXCEPTION_TYPE;
// 数据接收回调类型
typedef void (*ota_data_recv)(uint8_t *data, uint16_t len);
// 升级异常处理回调类型
typedef void (*ota_exception)(uint8_t type);
// 升级开始回调类型
typedef void (*ota_start)(void);
// 升级结束回调类型
typedef void (*ota_end)(void);
typedef struct ota_t
{
uint8_t type; // 升级类型
uint16_t phase; // 升级状态
uint16_t id; // 升级包ID
ota_data_recv recv_cb; // 数据接收回调
ota_exception exception_cb; // 异常情况处理回调
ota_start start_cb; // 升级开始回调
ota_end end_cb; // 升级结束回调
uint32_t total; // 升级包总大小
uint32_t offset; // 接收偏移大小
uint32_t addr; // 当前写入地址
} ota;

OTA组件设计方案
https://hudaxia.top/2022/07/11/组件-一种OTA组件方案/
作者
胡大侠
发布于
2022年7月11日
更新于
2023年3月27日
许可协议