BLE Peripheral HR OTA¶
1 功能概述¶
此项目演示从机heartrate以及用于BLE升级的SMP
服务,可以配合手机nrf connect
进行演示该OTA功能。
2 环境要求¶
board:
pan107x evb
uart(option): 用来显示串口log(波特率921600,选项
8n1
)手机app
nrf connect
4 演示说明¶
分别编译和烧录
pan107x_mcu_boot
和bleprph_hr_ota
工程,上电后log如下。Try to load HW calibration data.. DONE. - Chip Type : 0x80 - Chip CP Version : None - Chip FT Version : 8 - Chip MAC Address : D0000C0CBBF5 - Chip Flash UID : 32313334320EAC834330FFFFFFFFFFFF - Chip Flash Size : 512 KB LL Spark Controller Version:d7c4bfa app started
然后编译用于升级的测试固件,任意工程均可用于升级,但是其他工程暂无OTA功能,为了模拟实际应用中的连续更新OTA升级,我们将
bleprph_hr_ota
修改启动log,以便生成的固件不一样。 如果升级的固件和运行的固件是一样的,nrf connect
app检查校验签名一致则不进行升级,校验签名和bin文件内容有关。void app_init(void) { int rc; printf("app started ota success\n");/*此处为修改处,升级后将打印该log*/ #if CONFIG_SMP_OTA img_mgmt_module_init(); #endif
生成的image在路径
bleprph_hr_ota\keil\Images
路径下,找到ndk_app.signed.bin
文件,将该文件导入到手机APP。nrf connect
扫描连接ble_hr
设备,连接上会显示SMP Service,同时右上角会DFU
标示。点击该DFU
标示选则待升级的``ndk_app.signed.bin`文件,点击Test and Confirm,启动OTA升级流程。升级完成后设备会自动复位,并且打印对应bin文件启动log。
Try to load HW calibration data.. DONE.
- Chip Type : 0x80
- Chip CP Version : None
- Chip FT Version : 8
- Chip MAC Address : D0000C0CBBF5
- Chip Flash UID : 32313334320EAC834330FFFFFFFFFFFF
- Chip Flash Size : 512 KB
LL Spark Controller Version:d7c4bfa
app started ota success /*此处为我们修改后的启动log*/
connection established; status=0
5 OTA功能移植¶
如果其他工程想要支持OTA功能,需要执行以下四个步骤:
在“sdk_config.h”中使能OTA配置,如下图所示:
在”main.c”中添加ota相关头文件:
#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);
在“main.c中增加ota service初始化代码:
rc = gatt_svr_init(); assert(rc == 0); img_mgmt_module_init(); smp_ble_pkg_init();
放在”gatt_svr_init();”初始化后面。
修改”post.bat”,在工程目录下:
以下修改后的代码
@echo off %5 --bin --output %1 %3 %5 --text -a -c --output %2 %3 python ..\..\..\..\scripts\signed_image.py .\Images\ndk_app.bin .\Images\ndk_app.signed.bin echo %1 srec_cat %4.bin -binary -offset 0xA000 -o %4.hex -intel echo "Proccess Over!"
最后重新编译工程,新的工程也支持OTA功能了。