NRF52840 DFU升级(三) : Buttonless 升级

参考文献:Nordic官方博客 《Getting started with Nordic's Secure DFU bootloader, a step by step guide》

                  Nordic官方文档 《Buttonless Secure DFU Service》《Buttonless DFU Template Application》

相关文章:《NRF52840 DFU升级(一): 按键升级》

                  《NRF52840 DFU升级(二):Hex文件打包》

                  《NRF52840 DFU升级(四):GPREGRET标志位升级》

前言

部分应用场景下,无法通过按键进入升级模式。例如需要由主机设备主动发起升级,而不是由设备本身来发起升级,就需要无按键的升级方式。

Buttonless Secure DFU Service相关配置

该服务用于支持在应用状态下进入DFU模式,该服务使用16位的UUID (0xFE59)

//APPLICATION 程序中的DFU配置项 sdk_config.h
#ifndef BLE_DFU_ENABLED
#define BLE_DFU_ENABLED 1
#endif
//  NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS  - Buttonless DFU supports bonds.
#ifndef NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS
#define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 0
#endif

//BOOTLOADER 程序中DFU配置项 sdk_config.h
#ifndef NRF_DFU_BLE_REQUIRES_BONDS
#define NRF_DFU_BLE_REQUIRES_BONDS 0

NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS设置为1时,应用程序与Bootloader共享已配对设备的信息,只对配对过的设备进行升级。当设置为0时,则不限制是否配对。通常为了更安全的升级,建议只针对配对设备进行升级。

上述的配置项中,

对于应用程序来说,BLE_DFU_ENABLED 必须设置为 1 来使能DFU服务,应用程序中的NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS和Bootloader中的NRF_DFU_BLE_REQUIRES_BONDS设置的值要保持一致,设置为1时,只针对配对设备升级,设置为0时,则无需配对就可以执行升级。

进入升级模式 

对于已配对设备,主机通过写入特征值0x01,目标设备自动复位进入升级模式,对于已配对设备来说此时主机需要重新连接目标设备。

对于未配对设备,主机通过广播Name,来使目标设备进入升级模式

应用程序中添加Buttonless Secure DFU Service

应用程序必须使用Peer Manager 和 Power Management libray

1.  填充static void ble_dfu_evt_handler(ble_dfu_buttonless_evt_type_t event), 用于处理DFU事件

2.  打开NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY 并填充static bool app_shutdown_handler(nrf_pwr_mgmt_evt_t event),使设备复位进入DFU

3.  调用ble_dfu_buttonless_init,来初始化DFU复位

 

 

 

 

 

 

 

 

你可能感兴趣的:(BLE)