3.4.6. APP - Custom double update

3.4.6.1. 概述

Note

自定义双备份升级(串口传输方式), 可用于第三方升级协议接入.

3.4.6.2. 工程配置

  • app配置,在工程代码中找到对应的文件(apps/demo/transfer/include/app_config.h)进行APP选择,本案例中选择多连,其结果如下所示:

//apps example 选择,只能选1个,要配置对应的board_config.h,配置应用切换时对应选择的应用都要置1
#define CONFIG_APP_CUSTOM_DB_UPDATE       1 //自定义双备份升级(串口传输方式), 可用于第三方升级协议接入
  • 板级选择,接着在文件(apps/demo/transfer/board/bd57/board_config.h)下进行对应的板级选择如下:

#define CONFIG_BOARD_AW33N_DEMO
#include "board_aw33n_demo_cfg.h"
  • 板级配置,接着在文件(apps/demo/transfer/board/bd57/board_aw33n_demo_cfg.h)下进行对应的板级选择如下:

  • 配置通用串口用于数据传输。

#define TCFG_COMMON_UART_ENABLE             ENABLE_THIS_MOUDLE                    //通用数据转串口模块使能
#define COMMON_UART_TX_PIN                  IO_PORTA_06                            //串口发送脚配置
#define COMMON_UART_RX_PIN                  IO_PORTA_06                            //串口接收脚配置
#define COMMON_UART_INDEX                   UART_NUM_1
#define TCFG_COMMON_UART_BAUDRATE  	        115200                                //串口波特率配置

Note

默认不开启蓝牙功能

3.4.6.3. 主要代码讲解(app_custom_db_update.c)

  • 通用串口初始化

    // 配置一个通用串口做数据传输
#if TCFG_COMMON_UART_ENABLE
    common_uart_init(TCFG_COMMON_UART_BAUDRATE, COMMON_UART_TX_PIN, COMMON_UART_RX_PIN);
#endif
  • 通用uart接收数据处理

/*************************************************************************************************/
/*!
 *  \brief      uart操作回调函数
 *
 *  \param      [in] uart_num:串口号 uart_event:事件
 *
 *  \return
 *
 *  \note       内部调用
 */
/*************************************************************************************************/
static void common_uart_irq_func(int uart_num, enum uart_event event)
{
    ......

#if (CONFIG_DOUBLE_BANK_ENABLE && CONFIG_DB_UPDATE_DATA_GENERATE_EN && CONFIG_ONLY_GRENERATE_ALIGN_4K_CODE)
    if (event & UART_EVENT_RX_TIMEOUT || event & UART_EVENT_RX_DATA) {
        memset(db_update_packet, 0, sizeof(db_update_packet));
        memcpy(db_update_packet, uart_rx_data, r_len);
        if (r_len) {
            app_db_updata_event_to_user(0, (u32)r_len);
        }
    }
#endif
    
    ......
}
  • 调用第三方升级协议接口处理串口接收的bin数据

static int custom_update_event_handler(struct application *app, struct sys_event *event)
{
    switch (event->type) {
    case SYS_KEY_EVENT:
        custom_update_key_event_handler(event);
        return 0;
    case SYS_BT_EVENT:
        return 0;
    case SYS_DEVICE_EVENT:
        if ((u32)event->arg == DEVICE_EVENT_FROM_DUAL_UPDATE_UART) {
            log_debug("dual_update revice data[%d]:", event->u.dev.value);
            log_debug_hexdump(db_update_packet, event->u.dev.value);
            dual_ota_app_data_deal(0, db_update_packet, event->u.dev.value);
        }
        return 0;
    default:
        return false;
    }
}

3.4.6.4. case默认应用资源(默认使用AW33N DEMO开发板)

Note

demo默认占用外设资源如下,具体可以查看board_aw33n_demo_cfg.h

I/O口占用情况

PA口 I/O

默认占用情况

PA4

默认打印UART0引脚

PA1

adkey检测引脚

PA9

LED控制引脚

硬件定时器占用情况

定时器

默认占用情况

TIMER0

暂无使用

TIMER1

暂无使用

TIMER2

暂无使用

TIMER3

暂无使用

串口占用情况

串口

默认占用情况

UART0

SDK打印

UART1

通用串口

UART2

暂无使用