OTA 升级

更新时间:2024-04-17 06:15:09下载pdf

本文介绍 OTA 固件升级。

概述

概念介绍

Over-the-Air(OTA)升级是一种通过无线通讯,进行固件升级的技术。TuyaOS 支持设备 OTA 升级能力,通过涂鸦智能 App 或者涂鸦网关,可以方便地为出货固件进行升级,不断提升产品体验。

OTA 流程

OTA 升级

代码分布

TuyaOS 蓝牙 LE OTA 相关的协议部分逻辑由组件 tuya_ble_ota.c 文件负责处理,不同芯片平台的处理逻辑完全相同。存储部分逻辑由 tkl_ota.c 文件负责处理,不同芯片平台的处理逻辑不同。

数据结构

tuya_ble_ota_data_type_t

typedef enum {
    TUYA_BLE_OTA_REQ,
    TUYA_BLE_OTA_FILE_INFO,
    TUYA_BLE_OTA_FILE_OFFSET_REQ,
    TUYA_BLE_OTA_DATA,
    TUYA_BLE_OTA_END,
    TUYA_BLE_OTA_UNKONWN,
} tuya_ble_ota_data_type_t;
  • TUYA_BLE_OTA_REQ:请求启动 OTA。
  • TUYA_BLE_OTA_FILE_INFO:读取 OTA 文件信息。
  • TUYA_BLE_OTA_FILE_OFFSET_REQ:读取 OTA 文件偏移信息。
  • TUYA_BLE_OTA_DATA:写入 OTA 数据。
  • TUYA_BLE_OTA_END:OTA 升级结束。
  • TUYA_BLE_OTA_UNKONWN:未知状态。

tuya_ble_ota_data_t

typedef struct {
    tuya_ble_ota_data_type_t type;
    UINT16_T data_len;
    UINT8_T *p_data;
} tuya_ble_ota_data_t;
  • type:详见 tuya_ble_ota_data_type_t
  • data_len:OTA 数据长度。
  • p_data:OTA 数据。

接口说明

宏开关

TUYA_BLE_FEATURE_OTA_ENABLE

接收数据接口

接口说明

UINT32_T tuya_ble_ota_handler(tuya_ble_ota_data_t* ota);

数据流动

App
蓝牙设备

参数说明

参数 说明
ota 接收到的 OTA 升级协议数据,详见 OTA 协议说明

回复数据接口

接口说明

tuya_ble_status_t tuya_ble_ota_response(tuya_ble_ota_response_t *p_data);

数据流动

蓝牙设备
App

参数说明

参数 说明
p_data 设备回复的 OTA 升级协议数据,详见 OTA 协议说明

OTA 请求处理接口

接口说明

STATIC UINT32_T tuya_ble_ota_req_handler(UINT8_T* cmd, UINT16_T cmd_size, tuya_ble_ota_response_t* rsp)

数据流动

App
蓝牙设备

参数说明

参数 说明
cmd 相应指令对应的协议内容
cmd_size 相应指令对应的协议内容长度
rsp 相应指令对应的回复协议内容

OTA 文件信息处理接口

接口说明

STATIC UINT32_T tuya_ble_ota_file_info_handler(UINT8_T* cmd, UINT16_T cmd_size, tuya_ble_ota_response_t* rsp)

数据流动

App
蓝牙设备

参数说明

参数 说明
cmd 相应指令对应的协议内容
cmd_size 相应指令对应的协议内容长度
rsp 相应指令对应的回复协议内容

OTA 文件偏移量处理接口

接口说明

STATIC UINT32_T tuya_ble_ota_file_offset_handler(UINT8_T* cmd, UINT16_T cmd_size, tuya_ble_ota_response_t* rsp)

数据流动

App
蓝牙设备

参数说明

参数 说明
cmd 相应指令对应的协议内容
cmd_size 相应指令对应的协议内容长度
rsp 相应指令对应的回复协议内容

OTA 数据处理接口

接口说明

STATIC UINT32_T tuya_ble_ota_data_handler(UINT8_T* cmd, UINT16_T cmd_size, tuya_ble_ota_response_t* rsp)

数据流动

App
蓝牙设备

参数说明

参数 说明
cmd 相应指令对应的协议内容
cmd_size 相应指令对应的协议内容长度
rsp 相应指令对应的回复协议内容

OTA 结束处理接口

接口说明

STATIC UINT32_T tuya_ble_ota_end_handler(UINT8_T* cmd, UINT16_T cmd_size, tuya_ble_ota_response_t* rsp)

数据流动

App
蓝牙设备

参数说明

参数 说明
cmd 相应指令对应的协议内容
cmd_size 相应指令对应的协议内容长度
rsp 相应指令对应的回复协议内容

获取已有固件信息接口

接口说明

OPERATE_RET tkl_ota_get_old_firmware_info(TUYA_OTA_FIRMWARE_INFO_T **info)

该接口用于 OTA 的断点续传功能。

参数说明

参数 说明
info 已存储的 OTA 固件信息

使用方法

通信流程

OTA 升级

代码开发

TUYA_BLE_FEATURE_OTA_ENABLE 默认开启。

参考 tuya_ble_protocol_callback.c 中的示例代码:

STATIC VOID_T tuya_ble_protocol_callback(tuya_ble_cb_evt_param_t* event)
{
    switch (event->evt) {
        …………

        case TUYA_BLE_CB_EVT_OTA_DATA: {
            if (event->ota_data.p_data[0] == 0) {
#if defined(TUYA_BLE_FEATURE_OTA_ENABLE) && (TUYA_BLE_FEATURE_OTA_ENABLE == 1)
                tuya_ble_ota_handler(&event->ota_data);
#endif
            } else {
                …………
            }
        } break;

        …………

        default: {
            TAL_PR_INFO("tuya_ble_protocol_callback Unprocessed event type 0x%04x", event->evt);
        } break;
    }
}

VOID_T tuya_ble_protocol_init(VOID_T)
{
    …………
#if defined(TUYA_BLE_FEATURE_OTA_ENABLE) && (TUYA_BLE_FEATURE_OTA_ENABLE == 1)
    tuya_ble_ota_init();
#endif
    …………
}

功能测试

前置条件

  • 您已经下载了智能生活 App。
  • 请确认您的设备已完成配网。
  • 创建好自己的 PID。

操作步骤

  1. 通过您 PID 对应的授权码,对设备进行授权。

  2. 打开 涂鸦 IoT 开发平台,进入您使用的 PID 界面,选择 硬件开发 页签,云端接入方式选择 TuyaOS,根据您使用的芯片平台选择 云端接入硬件

  3. 单击 新增自定义固件,根据提示填写对应信息。

  4. 单击 新增固件版本,根据提示填写对应信息,上传升级固件,并进行上架。

  5. 单击右侧的 OTA 升级,单击右侧的 新建固件升级,根据提示填写对应信息。

    OTA 升级 OTA 升级
  6. 单击 验证,单击 通过设备号直接添加

    OTA 升级
  7. 打开手机上的设备面板,单击右上角 铅笔字样的图标,单击 设备信息,复制 虚拟 ID,将虚拟 ID 粘贴到上一步骤的弹窗中。

    OTA 升级
  8. 返回到手机的上一级菜单中,单击 设备升级,单击 更新,等待升级完成即可。

    OTA 升级

联系涂鸦

开发过程中遇到任何问题,都可以在 涂鸦开发者论坛的蓝牙板块 进行提问。

提问前建议首先查阅 官方资料或参考已有帖子,提问前请认真阅读发帖规范