当前文档版本为 NDK-v0.7.0,您可以访问当前页面的 开发中 版本以获取最近可能的更新。

BLE Peripheral HR OTA

1 功能概述

此项目演示从机heartrate以及用于BLE升级的SMP服务,可以配合手机nrf connect进行演示该OTA功能。

2 环境要求

  • board: pan107x evb

  • uart(option): 用来显示串口log(波特率921600,选项8n1

  • 手机app nrf connect

3 编译和烧录

例程位置:<home>\nimble\samples\bluetooth\bleprph_hr_ota\keil_107x

使用keil进行打开项目进行编译烧录。

4 演示说明

  1. 分别编译和烧录pan107x_mcu_bootbleprph_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
    
  2. 然后编译用于升级的测试固件,任意工程均可用于升级,但是其他工程暂无OTA功能,为了模拟实际应用中的连续更新OTA升级,我们将bleprph_hr_ota修改启动log,以便生成的固件不一样。 如果升级的固件和运行的固件是一样的,nrf connectapp检查校验签名一致则不进行升级,校验签名和bin文件内容有关

    void app_init(void)
    {
        int rc;
    
        printf("app started ota success\n");/*此处为修改处,升级后将打印该log*/
    
        #if CONFIG_SMP_OTA
        img_mgmt_module_init();
        #endif
    
  3. 生成的image在路径bleprph_hr_ota\keil\Images路径下,找到ndk_app.signed.bin文件,将该文件导入到手机APP。

  4. nrf connect扫描连接ble_hr设备,连接上会显示SMP Service,同时右上角会DFU标示。点击该DFU标示选则待升级的``ndk_app.signed.bin`文件,点击Test and Confirm,启动OTA升级流程。

    image

    nrf connect连接ble_hr,显示SMP服务

    image

    nrf connect选则待升级文件

    image

    nrf connect SMP OTA升级中

  5. 升级完成后设备会自动复位,并且打印对应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功能,需要执行以下四个步骤:

  1. 在“sdk_config.h”中使能OTA配置,如下图所示:

image

OTA配置选择

  1. 在”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);
    
  2. 在“main.c中增加ota service初始化代码:

    rc = gatt_svr_init();
    assert(rc == 0);
    
    img_mgmt_module_init();
    
    smp_ble_pkg_init();
    

    放在”gatt_svr_init();”初始化后面。

  3. 修改”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功能了。

6 RAM/Flash资源使用情况

PAN107x:

RAM Size:38.38 k
Flash Size: 129.24k