Nordic SDK15.3.0 DFU

Nordic SDK15.3.0 DFU

 

刚刚到手新的SDK版本,先来研究下空中升级。

 

编译模板工程 secure_bootloader 出现几个错误,先找到第一个错误,一个一个解决:

 

一、根据提示,第一个错误大概的意思是,秘钥无效,请查阅xxx然后去生成产品秘钥。

..\..\..\dfu_public_key.c(29): error:  #35: #error directive: "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"

 

解决步骤:

1、下载nrfutil.exe

https://github.com/NordicSemiconductor/pc-nrfutil/releases

 

2、使用秘钥生成.pem文件

nrfutil keys generate private.pem

 

3、使用命令读出秘钥中的内容,并且用它替换掉源工程的dfu_public_key.c中的内容。

nrfutil keys display --key pk --format code private.pem

 

重新编译,发现该问题解决。下一个错误提示:

 

二、uECC.h文件找不到

..\..\..\..\..\components\libraries\crypto\backend\micro_ecc\micro_ecc_backend_ecc.h(52): error:  #5: cannot open source input file "uECC.h": No such file or directory

 

搜索全工程,发现没有此文件,于是上论坛。

在官网论坛上找到这个错误的原因是没有micro_ecc库。

官方DFU空中升级教程

https://devzone.nordicsemi.com/b/blog/posts/getting-started-with-nordics-secure-dfu-bootloader

 

解决步骤:

1、下载micro_ecc,放在D:\Nordic\nRF5_SDK_15.3.0_59ac345\external\micro-ecc\micro-ecc文件下;

下载micro_ecc 的地址:

https://github.com/kmackay/micro-ecc

 

2、进入D:\Nordic\nRF5_SDK_15.3.0_59ac345\external\micro-ecc\nrf52hf_keil\armgcc编译(执行make);

 

此时编译,就没有错误了。

 

三、尝试烧录bootloader,发现烧录失败。

具体如下:

使用keil进行烧录,提示Flash Download failed.

使用nrfgo studio进行烧录,提示this hex file has data in SoftDevice region.

 

查询keil中的起始地址配置,也没看出有问题,于是上官网论坛搜索。

官方人员表示nrfgo studio和keil都不能烧录bootloader,需要用nrf connect的programmer烧录。

 

我试图找到programmer的使用文档,无果,不过据说直接用Add HEX file选择文件进行烧录就好了。

官方论坛对文档的解说:

https://devzone.nordicsemi.com/f/nordic-q-a/41113/nrf-connect-v2-6-1-documentation/159866#159866

 

解决方案:

1、 使用programmer擦除FLASH

2、 然后使用Add HEX file先后烧录协议栈和bootloader.hex

3、 发现广播名DfuTarg的设备。判断为bootloader烧录成功。

 

四、接下来生成用来空中升级的应用程序。步骤如下:

1、 编译源工程ble_app_buttonless_dfu

2、 使用命令生成空中升级包

nrfutil pkg generate --hw-version 52 --sd-req 0xb7 --application-version 4 --application app.hex --key-file key.pem app_dfu_package.zip

3、 用nrf connect 的 Bluetooth low energy连接蓝牙进行空中升级

4、 升级完成重新扫描,发现设备蓝牙名变为 Nordic_Buttonless。升级成功。

 

 

附录:

nrfutil使用方法

nrfutil pkg generate --help

 

生成加密秘钥

nrfutil keys generate private.pem

 

将秘钥以代码格式显示出来:

nrfutil keys display --key pk --format code private.pem

 

生成空中升级zip包

nrfutil pkg generate --hw-version 52 --sd-req 0xb7 --application-version 4 --application app.hex --key-file key.pem app_dfu_package.zip

 

 

注意:

|s112_nrf52_6.0.0|0xA7|

 |s112_nrf52_6.1.0|0xB0|

 |s112_nrf52_6.1.1|0xB8|

 |s130_nrf51_1.0.0|0x67|

 |s130_nrf51_2.0.0|0x80|

 |s132_nrf52_2.0.0|0x81|

 |s130_nrf51_2.0.1|0x87|

 |s132_nrf52_2.0.1|0x88|

 |s132_nrf52_3.0.0|0x8C|

 |s132_nrf52_3.1.0|0x91|

 |s132_nrf52_4.0.0|0x95|

 |s132_nrf52_4.0.2|0x98|

 |s132_nrf52_4.0.3|0x99|

 |s132_nrf52_4.0.4|0x9E|

 |s132_nrf52_4.0.5|0x9F|

 |s132_nrf52_5.0.0|0x9D|

 |s132_nrf52_5.1.0|0xA5|

 |s132_nrf52_6.0.0|0xA8|

 |s132_nrf52_6.1.0|0xAF|

 |s132_nrf52_6.1.1|0xB7|

 |s140_nrf52_6.0.0|0xA9|

 |s140_nrf52_6.1.0|0xAE|

 |s140_nrf52_6.1.1|0xB6|

 

在.zip包中显示DFU包的内容

nrfutil pkg display package.zip

 

posted @ 2019-05-08 16:23  haxi  阅读(1119)  评论(0编辑  收藏  举报