当前页面为 开发中 版本,查看特定版本的文档,请在页面左下角的下拉菜单中进行选择。

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 运行说明

  1. 分别编译mcu_bootble_periph_hr_ota工程,并烧录这两个固件,给设备上电,通过串口助手可以查看程序运行log。通过手机App NRF Connect可以搜索到名字为pan_ble_ota的设备。

  2. 编译用于升级的测试固件,任意工程均可用于升级,但是其他工程暂无OTA功能,为了演示OTA固件升级,可以将ble_periph_ota工程中蓝牙设备名修改为其他名称,例如:pan_ble_ota_2

    Note: 如果升级的固件和运行的固件是一样的,nrf connect检查校验签名一致则不进行升级,校验签名和bin文件内容有关

  3. 生成的测试固件在路径ble_periph_ota\keil\Images路径下,找到ndk_app.signed.bin文件,将该文件导入到手机APP。

  4. 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升级流程。

    image

    nrf connect连接, 显示SMP服务

    image

    nrf connect选则待升级文件

    image

    nrf connect SMP OTA升级中

  5. 升级完成后,设备将自动重启

5 OTA功能移植

如果其他工程想要支持OTA功能,需要执行以下四个步骤:

  1. sdk_config.h中配置bootloader空间、App image空间以及App交换区空间,如下图所示:

image

OTA配置选择

  1. 在工程中添加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);
    
  2. 在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();
    }
    
  3. copy ble_periph_hr_ota工程下的port_build.bat脚本到新工程,并在keil post build 中调用该脚本文件

6 RAM/Flash资源使用情况

PAN107x:

RAM Size:39.97 k
Flash Size: 131.28k