BLE Peripheral OTA¶
1 功能概述¶
ble_periph_ota例程演示了如何使用通过SMP服务进行OTA固件升级。
2 环境要求¶
board:
pan107x evb
uart(option): 用来显示串口log(波特率921600,选项
8n1
)手机app
nrf connect
3 编译和烧录¶
ble_periph_ota 例程位置:<home>\nimble\samples\bluetooth\ble_periph_hr_ota\keil_107x
bootloader工程位置:<home>\nimble\mcu_boot\keil
使用keil
打开项目并编译和烧录。
4 运行说明¶
分别编译
mcu_boot
和ble_periph_hr_ota
工程,并烧录这两个固件,给设备上电,通过串口助手可以查看程序运行log。通过手机App NRF Connect可以搜索到名字为pan_ble_ota
的设备。编译用于升级的测试固件,任意工程均可用于升级,但是其他工程暂无OTA功能,为了演示OTA固件升级,可以将
ble_periph_ota
工程中蓝牙设备名修改为其他名称,例如:pan_ble_ota_2
。Note: 如果升级的固件和运行的固件是一样的,
nrf connect
检查校验签名一致则不进行升级,校验签名和bin文件内容有关。生成的测试固件在路径
ble_periph_ota\keil\Images
路径下,找到ndk_app.signed.bin
文件,将该文件导入到手机APP。nrf connect
扫描并连接名称为pan_ble_ota
的设备,连接上会显示SMP Service,同时右上角会DFU
标示。在进行DFU之前先在Request connection priority
中选择HIGH(11.25-15ms,0,20s)
,然后点击DFU
标示选则待升级的ndk_app.signed.bin
文件,点击Test and Confirm,启动OTA升级流程。nrf connect连接, 显示SMP服务¶
nrf connect选则待升级文件¶
nrf connect SMP OTA升级中¶
升级完成后,设备将自动重启
5 OTA功能移植¶
如果其他工程想要支持OTA功能,需要执行以下四个步骤:
在
sdk_config.h
中配置bootloader空间、App image空间以及App交换区空间,如下图所示:

OTA配置选择¶
在工程中添加OTA相关的源码文件(参看ble_periph_hr_ota工程),并在keil中添加头文件路径。涉及到的头文件和函数如下
#include "smp_bt.h" #include "smp/smp.h" #include "img_mgmt/img_mgmt.h" extern void img_mgmt_module_init(void); extern void smp_ble_pkg_init(void);
在ble_stack初始化时,初始化OTA模块,如下:
void app_ble_pre_init_cb(void) { /* Set MAC address initialization. */ app_ble_set_mac_addr(); /* BLE Service initialization. */ app_ble_svc_init(); /* SMP OTA initialization. */ img_mgmt_module_init(); smp_ble_pkg_init(); }
copy ble_periph_hr_ota工程下的
port_build.bat
脚本到新工程,并在keil post build 中调用该脚本文件