跳转至

启英泰伦-三代芯片OTA

1. OTA功能概述

CI230X OTA升级功能分为语音部分升级和WIFI部分升级,升级固件可以从云端获取,也可以从本地加载通过串口进行OTA升级,语音部分升级功能同样适用于CI130X芯片,OTA升级代码可参考启英泰伦发布的CI230X SDK:ci230x_wifi_combo_sdk_release,(如果使用第三方WIFI芯片对CI130X芯片进行OTA,下面流程可供参考):

2. CI230X 语音端OTA

2.1. 升级交互流程图

图 2-1

2.2 打包工具使用说明

  • 升级代理程序updater:ci130x_updater.bin。升级代理程序已默认使用芯片的UART1作为升级串口,若有特殊情况需要更改使用其他串口(如UART0或UART2),请联系启英泰伦技术支持!

  • OTA语音固件打包升级工具:使用\tools目录下PACK_UPDATE_TOOL355_FOR_OTA.exe工具打包,打包时请注意选中对应芯片型号后,右侧固件格式选项选择“FW_V1”再打包固件,如下图所示:

图 2-2

2.3 WIFI端核心代码说明

  1. CMakeList.txt(SDK/project/ci230x-wifi-sdk-combo/)文件中使能语音芯片OTA宏CIAS_AIOT_AUDIO_OTA_ENABLE以及需使用云平台的对应的宏

  2. 按照如下配置顺序进行OTA初始化:

    cias_ota_callback_init();                            //init ota callback func
    cias_get_cloud_data_main();                          //start firmware-get task
    get_cias_ota_handle()->cias_ota_task_delay_ms(2);     //delay few milliseconds
    get_cias_ota_handle()->cias_net_data_struct_init();  //Download the data package structure initialization
    cias_ota_get_partitions_info();                      //Get partition table information
    cias_ota_progress_task();                            //start firamware-update task

注意:g_cias_system_manage_param.ota_start_flag = 1 为ota升级任务启动标志,升级固件准备就绪开始升级时需要将ota_start_flag置1

  1. 如上所述要完成升级流程,WIFI端需要实现如下三个步骤:
  • 需在cias_ota_callback_init()中注册钩子函数,需要实现的接口如下所示:
typedef struct 
{
    /*audio升级固件获取,参数说明:1-存升级buf,2-距固件头偏移地址,3-需获取的大小*/
    int (*cias_get_audio_image) (unsigned char *, unsigned int, unsigned int);
    /*wifi芯片复位*/
    void (*cias_wifi_device_reboot) (void);
    /*audio芯片复位*/
    void (*cias_audio_device_reboot) (void);
    /*升级串口波特率更改*/
    void (*cias_communication_rate_change) (unsigned long);
    /*升级串口发送*/
    int (*cias_ota_communication_send) (char *, int);
    /*升级串口接收*/
    int (*cias_ota_communication_recv) (char *, int);
    /*延时(单位:ms)*/
    void (*cias_ota_task_delay_ms) (unsigned int);
    /*flash读取
    @param offset Starting offset from the beginning of the flash device.
    @param length Size of the portion of flash to read.
    @param buffer Pointer on data to read.
    @return uint8_t 0 if operation can start successfully.
    */
    unsigned char (*cias_ota_flash_read) (unsigned int offset, unsigned int length, unsigned char *buffer);
    /*网络通信协议等 初始化*/
    void (*cias_net_portocol_init) (void);
    /*ota网络端下载数据结构初始化*/
    int (*cias_net_data_struct_init) (void);
    /*上报升级状态到云端回调*/
    uint8_t (*cias_report_ota_status_to_iot)(uint8_t);
}cias_ota_handle_t;
  • cias_get_cloud_data_main创建云端固件包获取任务,等待指令开始获取数据包。

  • 延时2ms后ci_ota_progress_task()创建ota串口传输任务,在任务中初始化云端数据包结构cias_net_data_struct_init并获取云端固件分区表信息cias_ota_get_partitions_info,获取成功后进入update_ota_main()开始和audio端bootloader通信传输updater并校验,再和updater通信传输待升级固件包。


3. CI230X WIFI端OTA说明

3.1 使用配置

CMakeList.txt(SDK/project/ci230x-wifi-sdk-combo/)文件中使能wifi芯片OTA宏CIAS_AIOT_WIFI_OTA_ENABLE以及需使用云平台的对应的宏

3.2 核心代码接口说明

  1. ota_port_init()初始化wifi端flash操作接口

  2. cias_wifi_ota_callback_init()初始化函数中注册所需的回调函数:

typedef struct 
{
    /*从云端获取wifi升级数据*/
    int (*cias_get_wifi_image_from_cloud)(unsigned char *, unsigned int, unsigned int len);
    /*上报升级状态到云端回调*/
    uint8_t (*cias_report_ota_status_to_iot)(uint8_t);
}cias_wifi_ota_handle_t;
  1. cias_wifi_ota_main_task()创建wifi端ota主任务,等待升级任务使能(收到平台下发wifi端ota指令后,将g_cias_system_manage_param.wifi_ota_start_flag置1即使能)

  2. 升级任务使能后,初始化看门狗wifi_ota_watch_dog(),删除不需要运行的任务并创建cias_wifi_ota_get_cloud_data()云端固件包获取任务,延时2ms后创建cias_wifi_ota_progress_task()任务