【NCS随笔】怎么打开DFU升级开始回调

在NCS上面开启DFU之后确认是否开始DFU以及传输过程

一、添加宏

在prj.conf添加如下宏

#enable MCUboot

CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y

#enable MCUboot_mamage

CONFIG_MODULE_BT_MGMT_DFU=y
CONFIG_MCUMGR_MGMT_NOTIFICATION_HOOKS=y
CONFIG_MCUMGR_GRP_IMG_UPLOAD_CHECK_HOOK=y
CONFIG_MCUMGR_GRP_IMG_STATUS_HOOKS=y

二、在main添加如下内容

///添加宏定义
#include <zephyr/mgmt/mcumgr/grp/img_mgmt/img_mgmt.h>
#include <zephyr/mgmt/mcumgr/mgmt/callbacks.h>
#include <zephyr/mgmt/mcumgr/mgmt/mgmt.h>

///添加回调

static enum mgmt_cb_return upload_confirm_cb(uint32_t event,
enum mgmt_cb_return prev_status,
int32_t *rc, uint16_t *group,
bool *abort_more, void *data,
size_t data_size)
{
struct img_mgmt_upload_check *imgData = (struct img_mgmt_upload_check *)data;

switch (event) {
case MGMT_EVT_OP_IMG_MGMT_DFU_STARTED:
LOG_INF("BLE Download start");
break;
case MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK:
LOG_INF("BLE Download %u/%llu bytes", imgData->req->off, imgData->action->size);
break;
case MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED:
LOG_INF("BLE Download stop");
break;
default:
LOG_ERR("Unknown event %u", event);
break;
}
return MGMT_CB_OK;
}
///初始化 DFU_update
static int app_update_init(void)
{
int err;
static struct mgmt_callback mgmt_callback = {
.callback = upload_confirm_cb,
.event_id = MGMT_EVT_OP_IMG_MGMT_DFU_STARTED | MGMT_EVT_OP_IMG_MGMT_DFU_CHUNK | MGMT_EVT_OP_IMG_MGMT_DFU_STOPPED,
};

mgmt_callback_register(&mgmt_callback);

return 0;
}

/////初始化
SYS_INIT(app_update_init, APPLICATION, CONFIG_APPLICATION_INIT_PRIORITY);

三、在Cmakelist.txt添加DFU库

zephyr_link_libraries(MCUBOOT_BOOTUTIL)

四、测试

可以看到点击DFU之后LOG开始打印 文件开始下载,以及文件下载的过程

image

你的点赞、收藏和评论是对我最大的支持,有问题多多指教,如果有需要Nordic开发板、Nordic的芯片以及Nordic技术支持的可以在个人资料获取我的联系方式,感谢读者支持!
posted @ 2025-12-17 17:34  TedLee  阅读(6)  评论(0)    收藏  举报