准备需要加入DFU功能的工程

在工程main文件services_init函数中加入DFU服务

  1. uint32_t err_code;
  2.  
  3. // Initialize the async SVCI interface to bootloader.
  4. err_code = ble_dfu_buttonless_async_svci_init();
  5. //APP_ERROR_CHECK(err_code);
  6. if(NRF_ERROR_NO_MEM != err_code)
  7. {
  8. ble_dfu_buttonless_init_t dfus_init =
  9. {
  10. .evt_handler = ble_dfu_evt_handler
  11. };
  12.  
  13. err_code = ble_dfu_buttonless_init(&dfus_init);
  14. APP_ERROR_CHECK(err_code);
  15. }

加入DFU事件处理函数

  1. // YOUR_JOB: Update this code if you want to do anything given a DFU event (optional).
  2. /**@brief Function for handling dfu events from the Buttonless Secure DFU service
  3. *
  4. * @param[in] event Event from the Buttonless Secure DFU service.
  5. */
  6. static void ble_dfu_evt_handler(ble_dfu_buttonless_evt_type_t event)
  7. {
  8. switch (event)
  9. {
  10. case BLE_DFU_EVT_BOOTLOADER_ENTER_PREPARE:
  11. NRF_LOG_INFO("Device is preparing to enter bootloader mode.");
  12. // YOUR_JOB: Disconnect all bonded devices that currently are connected.
  13. // This is required to receive a service changed indication
  14. // on bootup after a successful (or aborted) Device Firmware Update.
  15. break;
  16.  
  17. case BLE_DFU_EVT_BOOTLOADER_ENTER:
  18. // YOUR_JOB: Write app-specific unwritten data to FLASH, control finalization of this
  19. // by delaying reset by reporting false in app_shutdown_handler
  20. NRF_LOG_INFO("Device will enter bootloader mode.");
  21. break;
  22.  
  23. case BLE_DFU_EVT_BOOTLOADER_ENTER_FAILED:
  24. NRF_LOG_ERROR("Request to enter bootloader mode failed asynchroneously.");
  25. // YOUR_JOB: Take corrective measures to resolve the issue
  26. // like calling APP_ERROR_CHECK to reset the device.
  27. break;
  28.  
  29. case BLE_DFU_EVT_RESPONSE_SEND_ERROR:
  30. NRF_LOG_ERROR("Request to send a response to client failed.");
  31. // YOUR_JOB: Take corrective measures to resolve the issue
  32. // like calling APP_ERROR_CHECK to reset the device.
  33. APP_ERROR_CHECK(false);
  34. break;
  35.  
  36. default:
  37. NRF_LOG_ERROR("Unknown event from ble_dfu_buttonless.");
  38. break;
  39. }
  40. }

加入几个必要的文件到工程

SDK_14.2.0工程\components\ble\ble_services\ble_dfu下的

SDK_14.2.0工程\components\libraries\bootloader\dfu下的

并加入以下头文件路径

SDK_14.2.0工程\components\libraries\bootloader\dfu

SDK_14.2.0工程\components\libraries\svc

Main.c 头文件中加入

  1. #include "ble_dfu.h"

记得修改sdk_config.h中NRF_SDH_BLE_VS_UUID_COUNT

  1. // <o> NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs.
  2. #ifndef NRF_SDH_BLE_VS_UUID_COUNT
  3. #define NRF_SDH_BLE_VS_UUID_COUNT 1 //默认为0
  4. #endif

开启RTT打印LOG

  1. //==========================================================
  2. // <e> NRF_LOG_ENABLED - Logging module for nRF5 SDK
  3. //==========================================================
  4. #ifndef NRF_LOG_ENABLED
  5. #define NRF_LOG_ENABLED 1
  6. #endif

以及

  1. //==========================================================
  2. // <e> NRF_LOG_BACKEND_RTT_ENABLED - nrf_log_backend_rtt - Log RTT backend
  3. //==========================================================
  4. #ifndef NRF_LOG_BACKEND_RTT_ENABLED
  5. #define NRF_LOG_BACKEND_RTT_ENABLED 1
  6. #endif

编译一下,下载观察RTT信息修改RAM地址,再次编译后没有问题,就可以用新生成的hex文件来制作升级zip了。

nRF52832 BLE_DFU空中升级OTA(三)准备升级工程(SDK14.2.0)的更多相关文章

  1. nRF52832 BLE_DFU空中升级OTA(二)编译下载(SDK14.2.0)

    上一篇配置好了开发环境,现在就可以试着跑一下例程了,这里需要两个例程,一个是bootloader的,一个是应用程序的,其路径分别为: bootloader:SDK_14.2.0工程\examples\ ...

  2. nRF52832 BLE_DFU空中升级OTA(一)安装软件(SDK14.2.0)

    准备工作,需要安装好几个软件,详细的过程请参考下面的文章(http://www.cnblogs.com/iini/p/9314246.html)这里说的非常详细,而且也有工具在云盘,对于初学者非常友好 ...

  3. OTA制作及升级过程笔记【转】

    本文转载自:http://www.it610.com/article/5752570.htm 1.概述 1.1   文档概要 前段时间学习了AndroidRecovery模式及OTA升级过程,为加深理 ...

  4. APMServ升级php 与 Wamp升级PHP版本到5.3

    方法一:(我亲测试,没问题)首先下载:php-5.3.1-Win32-VC6-x86.ziphttp://windows.php.net/downloads/releases/archives/ 解压 ...

  5. 【转】升级还是权谋?从USB PD 2.0到3.0

    原文出处 http://www.eetop.cn/blog/html/43/n-433743.html 如同iPhone的出现,才让智能机真正主导手机市场一样,Type-C口发布后,USB PD才正式 ...

  6. oracle数据库psu升级(本实验是将10.2.0.3.12升级到10.2.0.3.15)

    psu升级(本实验是将10.2.0.3.12升级到10.2.0.3.15) 一.解压安装包自定义存放路径为/home/oracle/yjb/psu/10.2.0.3.15cd /home/oracle ...

  7. Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。

    系列目录: 本系列分为项目集成.项目部署.架构演进三个方向,后续会根据情况调整文章目录. 本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单 ...

  8. 转载: Centos7 升级python3,解决升级后不兼容问题

    Centos7配置更新国内yum源 http://blog.csdn.net/qingguiyu/article/details/50721956 Centos7 升级python3,解决升级后不兼容 ...

  9. Ubuntu升级软件和ubuntu升级系统的命令

    sudo apt-get update: 升级安装包相关的命令,刷新可安装的软件列表(但是不做任何实际的安装动作) sudo apt-get upgrade: 进行安装包的更新(软件版本的升级) su ...

随机推荐

  1. linux-软件下载安装

    RPM 安装 rpm -ivh 包全名 :-i(install):安装:-v(verbose):显示详细信息:-h(hash):显示进度: rpm -Uvh 包全名:-U(upgrate):升级 rp ...

  2. ASP.NET中的身份验证有那些?你当前项目采用什么方式验证请解释

    ASP.NET身份验证模式包括Windows.Forms(窗体).Passport(护照)和None(无). l  Windows身份验证—常结合应用程序自定义身份验证使用使用这种身份验证模式时,AS ...

  3. Windows Server 2008 R2 /2012 修改密码策略(摘抄 原文地址 https://www.cnblogs.com/mili3/p/7799347.html)

    今天建了域环境,在添加新用户的时候,发现用简单的密码时域安全策略提示密码复杂度不够,于是我就想在域安全策略里面把密码复杂度降低一点. 问题:    在“管理工具 >> 本地安全策略 > ...

  4. 多变量线性回归 matlab

    %multivariate_linear_regression data=load('data.txt'); x=data(:,1:2); y=data(:,3); m=length(x(:,1)); ...

  5. Server Host Cannot be null解决方法

    在用打开Services Directory application 或者访问 某个已发布的地图服务时,出现"Server Host Cannot be null"的错误. 问题的 ...

  6. BZOJ 1013 球形空间产生器sphere 高斯消元

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1013 题目大意: 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困 ...

  7. selenium + python自动化测试unittest框架学习(七)随机生成姓名

    在自动化测试过程中经常要测试到添加用户的操作,每次都要输入中文,原本是找了十几个中文写成了列表,然后从列表中随机取出填入用户名文本框中,随着测试的增加,发现同名的人搜索出来一大堆,最后在网上找了个随机 ...

  8. Sublime插件WakaTime使用

    1.安装WakaTime插件 ctrl+shift+p-->输入pi-->回车-->输入wakaTime-->回车(进行安装) 安装好后会显示输入api key的输入栏 (也可 ...

  9. JS页面刷新

    setTimeout('location.reload()',1000);//页面刷新 1000为延时的毫秒数 1.setInterval() - 间隔指定的毫秒数不停地执行指定的代码.   2.se ...

  10. sqoop2启动client异常

    java环境:  java version "10.0.1" ,启动sqoop-shell端或者是sqoop-client端异常,异常如下: [root@hadoop1 home] ...