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 |
暂无使用 |