在nrf SDK15.2上移植DFU服务

Nordic的DFU服务以前也经常用,不过在SDK15.2上还第一次用,我们可以分几步去实现空中升级

1、移植代码,可以参考例程nRF5_SDK_15.2.0_9412b96\examples\ble_peripheral\ble_app_buttonless_dfu;

2、打包HEX文件

3、使用nrf toolbox进行空中升级

虽然分了这几步,但是操作起来还是会遇到很多的问题的,首先来移植代码,我是在ble_app_uart这个例程里

添加DFU功能,将DFU相关的文件加入到工程

ble_dfu.c

ble_dfu_bonded.c

ble_dfu_unbonded.c

nrf_dfu_svci.c

然后再在main.c函数里添加DFU功能的相关程序,如果不添加,在你升级的时候会提示你找不到DFU的服务

可以参考ble_app_buttonless_dfu例程添加需要的代码及头文件,移植完成后,必不是就结束了,编译没有问题

但是运行的时候你就会发现 Fatal error错误,这是因为NRF_SDH_BLE_VS_UUID_COUNT这个参数是1,将它

改成比1大的数,我将它改成了4.还将参数NRF_SDH_BLE_SERVICE_CHANGED改成了1.编译通过

但是运行还是报错

<warning> nrf_sdh_ble: Insufficient RAM allocated for the SoftDevice.
<warning> nrf_sdh_ble: Change the RAM start location from 0x20002A98 to 0x20002AC8.
<warning> nrf_sdh_ble: Maximum RAM size for application is 0xD538.
<error> nrf_sdh_ble: sd_ble_enable() returned NRF_ERROR_NO_MEM.

于是将0x20002A98改为0x20002AC8,将RAM由0xD568改为0xD538。

再编译运行,OK了!

其次,完成了上一步,这步就要将编译生成的hex打包成用于升级的zip文件包,如何打包呢?

首先我们先编译dfu 的bootload部分

编译过程中会出现报错:#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it",看

报错就知道这是缺少秘钥造成的,这个故意报错,需要大家添加一个秘钥上去。

解决办法:在编译设置中添加宏:NRF_DFU_DEBUG_VERSION

打开cmd命令行,键入一下指令,没有安装nrfutil.exe的可以安装了再执行这条命令,安装方法问度娘,方法很多。

nrfutil.exe keys generate private.pemnrfutil.exe keys display --key pk --format code private.pem --out_file public_key.c

这样生成的秘钥就保存在 public_key.c中,打开public_key.c。把数组pk复制到报错的位置。

  

然后将hex文件copy到C:\Python27\Scripts目录下,因为我用的python安装的nrfutil,所以在此目录

在cmd上执行命令

nrfutil pkg generate --hw-version 52 --sd-req 0xAF --application-version 0xff --application nrf52832_xxaa.hex --key-file private.pem nrf52832_xxaa_app.zip

生成包文件nrf52832_xxaa_app.zip。注意这里的--sd-req 0xAF要与你的协议栈版本一致,不然即使能打包成功,在升级的时候

也是会报错的,会提示你是无效的版本,这与上面如果没生成一致的public_key.c一样,升级的时候也会提示错误。

升级包打包好了以后,就是后面的使用nrf toolbox工具升级操作了,这个步骤就不说了,太简单了。

有些地方有省略,但我个人觉得问题不大。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值