网络升级

本文说明网络 OTA 的升级流程、关键接口和应用接入方式。

1. 参考代码

文件

作用

solution\components\ota\ota_net\ota_net_recv.c

接收网络 OTA 数据并驱动下载状态流转

solution\components\ota\ota_net\ota_net_dec.c

处理网络 OTA 数据解析和写入前解码

solution\components\ota\ota_ext\ota_resume.c

保存和恢复 OTA 断点续传状态

solution\components\ota\ota_ext\ota_packet.c

解析 OTA 数据包并校验包状态

solution\components\ota\ota_ext\ota_nvm.c

读写 OTA 过程中的 NVM 状态

solution\components\ota\ota_ext\ota_bin.c

管理 OTA bin 文件信息和升级入口

2. 应用例程

场景

文件

调用接口

OTA 进度界面

ota_window.c

ota_ui_get_ctx()ota_send_construct_msg_to_ui()ota_net_download()

OTA 错误提示

ota_error.c

ota_send_construct_msg_to_ui()ota_net_download()ota_error_func_register()

3. 简介

HTTP OTA通过BT PAN(后续支持WIFI/4G等方式)连接服务器,直接和服务器交互完成升级固件,无需手机APP中转,实现"有网即可升级"。升级包是由butterfli.exe编译生成的ota_all.bin,属于全包升级。HTTP OTA使用的升级包和TF OTA一致,所以安装流程两者相同

4. 配置

HTTP OTA升级需要备份,目前支持NAND, NOR RAMRUN, NOR + TF三种工程升级。三种升级区别:

  • NAND 网络升级均在HCPU中进行,属于边下载边升级,升级过程中不可逆

  • NOR RAMRUN网络升级在HCPU和ota manager中进行,属于边下边升级,升级过程中不可逆。ota manager中进行HCPU的解压升级处理

  • NOR + TF 网络升级在HCPU中下载,在ota manager中升级,属于先下载后升级,下载过程中可逆,ota manager中进行解压升级处理。

  1. HCPU

../../../_images/http_ota1.png
  1. OTA MANAGER

../../../_images/http_ota2.png

5. 如何升级

通过主菜单->设置->系统->系统升级->在线升级进行升级。 注意

  • 需要先连接BT PAN

  • 服务器端有更新的升级包

6. 新增bin升级

新增bin升级,需要在ota_bin.c的bin_tbs[]中增加bin描述,描述结构如下:

typedef struct
{
    uint8_t         can_upgrade; //0 不可升级,bin在升级时会忽略 1,可升级。
    uint8_t         is_overwrite; //0 备份方式, 需要设定备份地址 1.覆盖方式,直接写入到bin的目的地址
    uint32_t        update_bit;  //升级位,参考ota_bin.h中定义,最多支持32个bin(u32)
    const char      *name;       //固件名,需要和ota_mix.exe制作出bin中的名称一致
    uint32_t        target_addr;  //bin在固件的目的地址
    uint32_t        bin_size;     //bin在固件的大小
    bin_comm_process_cb  preprocess_cb; //覆盖前的处理,对于覆盖模式,接收时调用,备份模式,安装覆盖时调用
    bin_comm_process_cb  postprocess_cb;//覆盖后的处理,对于覆盖模式,接收完成调用,备份模式,安装覆盖完成时调用
} bin_desc_t;

注意

  • 未在bin_tbs[]中的bin,固件统一按照覆盖模式处理,起始地址和大小以固件包为准;

  • 采用备份模式的bin,需在ota_ext_get_backup_addr中实现备份地址的获取逻辑。

7. 续传

HTTP OTA支持续传处理,在以下场景时会自动记录续传点:

  • 固件包解析单个bin时;

  • 解析的非压缩bin,接收的大小相较于上次续传记录点刚好是1MB;

  • 解析的非压缩bin,接收的大小相较于上次续传记录点大于等于1MB且解压写入的长度是flash的blk_size的倍数。

8. 进度

下载进度获取,通过接口注册更新升级百分比,NAND 和NOR RAMRUN升级获取下载进度即可,NOR + TF升级,安装进度也由此接口注册

void ota_register_progress_cb(ota_progress_cb_t callback)

9. 注意事项

  • 续传时的显示的进度可能出现回退现象;

  • 若固件包的 flashmap 发生变化,升级过程中重启后需重新开始升级;

  • 若固件包的 flashmap 未变化,在文件系统 bin(fs_bin)升级过程中重启,该 fs_bin 需从头开始升级;

  • 升级包由 Butterfli 生成,是全量包,其中文件系统 bin(fs_bin1、fs_bin2…)及 HCPU、LCPU、L_PATCH 统一采用 gzip 压缩,其余 bin 不压缩,自定义包可以通过 ota_mix.exe 生成;

  • FTABLE,BOOTLOADER,OTA MANAGER暂不支持升级。