51822 DFU服务

SDK11中的bootloader 提供了两个方式进入升级模式,一种是上电按住按键进入升级状态,另一种是手机点击升级,

bootloader相关代码如下


如果是手机APP通过点击图标直接升级,那么在APP跳转到bootloader进行升级前就会设置,NRF_POWER->GPREGRET

这个寄存器的值,所以bootlaoder代码中开始就是判断这个寄存器中的值来判断是不是手机触发进入DFU

模式  下面的代码会判断是否有设备上的按键按下,如果在上电过程中按下按键也会进入DFU模式。

无论通过手机上的DFU图标进入升级模式,还是通过设备上的按键进入升级模式都需要bootloader的

两种方式只是进入升级模式的方式不同而已。

对bootloader代码进行修改:



在example中样例ble_app_hrs中 就有 DFU服务:

D:\myfile\test\examples\ble_peripheral\ble_app_hrs\pca10028\s130_with_dfu\arm5_no_packs

在main中的services_init函数的最后添加,创建DFU服务的代码:



事件派发函数中 添加DFU的事件处理函数以及device_manager模块的事件处理函数


再添加相关函数和代码:




再下载程序后可以使用nordic官方软件nrf toolbox或nrf master control pannel 软件 进行DFU

再点击DFU图标后会发送一条启动命令,dfu_app_on_dfu_evt函数中会处理这条指令




Bootloader_start函数会做一些设置跳转到bootloader中去



上面的sd_power_gpregret_set函数就是设置一个标记,表明是从app中启动进入bootloader和前面说的bootloader代码中的开头判断对应

sdk中的bootloader例子是基于32k ram51422,如果是使用16kram的51822需要修改如下地址:


另外,一旦烧录bootoader 后上电顺序不再是协议栈-》APP而是协议栈-》bootloader->app

子bootloader中会对app是否有效做判断,sdk中的实现只有通过DFU模式升级APP才会别人为有效,应为DFU模式

升级后会设置一些相关标志,DFU判断APP是不是有效判断这些标志,所以如果你用烧录软件烧录APP,因为没有做一些标志,所以bootloader会人为APP无效,

从而不会启动APP。

不过可以通过修改一下变量实现,计算通过烧录软件烧录APP,bootloader也可以正常启动APP,

打开bootloader工程中的bootloader_settings.c文件,修改如下变量就可以了。


以上代码都经过本人验证

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值