nRF52832等 nRF52系列SDK13固件升级:DFU详细步骤

2020-11-10 17:24:26 信驰达科技

芯片型号:nRF52832

?樾秃牛RF-BM-ND04

一.  以下是我测试的环境: 

环境:win7,64位,IAR集成开发环境

SdknRF5_SDK_13.0.0_04a0bfd

协议栈:s132_nrf52_4.0.2_softdevice.hex

Bootloader工程:secure_dfu_ble_s132_pca10040

application工程:ble_app_buttonless_dfu_pca10040_s132

硬件平台:pca10040开发板

二.  在做空中升级过程中可能遇到的问题

1.缺少uECC.h文件

2.缺少micro_ecc_lib_nrf52.lib文件

3.出现报错:#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it"

4.升级过程中出现:fw version错误

三.  安装所需的软件

1gcc-arm-none-eabi-4_9-2015q3-20150921-win32.exe:

根据提示安装 4.9-2015-q3-update 版本的 GCC compiler toolchain for ARM

2make-3.81.exe:

3python-2.7.12.amd64.msi

4nRFgo Studio

主要提供nrfjprog.exemergehex.exe

这两个软件在nRFgo Studio的安装目录下找到

C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin

安装之后用cmd输入nrfjprogmergehex,查看是否安装可用

蓝牙?榉桨干

蓝牙?榉桨干

(5)oreutils-5.3.0.exe:

http://gnuwin32.sourceforge.net/packages/coreutils.htm

四.  安装步骤

1.安装编译环境:

(1)双击安装make-3.81.exe ,

(2)安装coreutils-5.3.0.exe,

(3)安装gcc-arm-none-eabi-4_9-2015q3-20150921-win32.exe 

把路径Path : C:\Program Files (x86)\GNU Tools ARM Embedded\4.9 2015q3\bin;C:\Program Files (x86)\GnuWin32\bin添加到环境变量

蓝牙?榉桨干  


(4)安装python-2.7.12.amd64.msi。

 双击python-2.7.12.amd64.msi安装 ,安装完毕后,把python的路径加入到环境变量中

C:\Python27\

C:\Python27\Scripts

进入命令行窗口,并到Python路径,输入python -m pip install nrfutil等待安装完成

  

nrfutil会被安装到C:\Python27\Scripts目录下, 我安装的nrfutil版本是3.3.0,后面安装可能会更新,所以可能会遇到版本兼容问题。nrf studio的安装目录下也有这个软件,可以拿来代替。


2.解决缺少uECC.h文件问题

(1)下载micro-ecc:

直接用我下载好的或到官网下载micro-ecc :

注意:官网上下载的文件夹名称的名字要改成micro-ecc

(2)把micro-ecc文件夹复制到nRF5_SDK_13.0.0_04a0bfd\external\micro-ecc目录下

  蓝牙?榉桨干

(3)打开micro-ecc目录可以看见uECC.h

  蓝牙?榉桨干

3.解决缺少micro_ecc_lib_nrf52.lib的问题

(1)方法1:双击批处理文件nRF5_SDK_13.0.0_04a0bfd\external\micro-ecc\build_all.bat即可生成lib文件;  

(2)方法2:也可以进入nRF5_SDK_14.0.0_3bcc1f7\external\micro-ecc\nrf52_keil\armgcc路径,输入make 生成lib文件。

  

以上两种方法都是用到了micro-ecc\nrf52_keil\armgcc\makefile

把生成的micro_ecc_lib_nrf52.lib添加到工程即可。

4. 解决编译报错问题

编译过程中会出现报错:#error "Debug public key not valid for production. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate it",看报错就知道这是缺少秘钥造成的,这个故意报错,需要大家添加一个秘钥上去。

打开cmd命令行,键入一下指令

nrfutil.exe keys generate private.pem

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

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

  蓝牙?榉桨干

5.  烧录协议栈、应用层、bootloader

(1)先要生成bootloader setting, 这个文件包含了app version ,bootloader version , hw version, 等信息。

执行nrfutil.exe settings generate --family NRF52 --application nrf52832_xxaa_app.hex --application-version 3 --bootloader-version 2 --bl-settings-version 1 bootloader_settings.hex

  蓝牙?榉桨干

 (2)合并所有文件,注意自己的hex文件名。

合并BootLoader文件和softdevice文件:mergehex.exe --merge nrf52832_xxaa_bootloader.hex s132_nrf52_4.0.2_softdevice.hex --output production_final1.hex 

将上一个合并文件与app程序合并:mergehex.exe --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex

将上一个合并文件与配置settings 文件合并:mergehex.exe --merge production_final2.hex bootloader_settings.hex --output production_final.hex

删除:del production_final1.hex

删除:del production_final2.hex

  

最后生成烧录文件production_final.hex

(3)烧录一个文件即可,烧录前先用nRFgo Studio擦除芯片。

nrfjprog -f NRF52 --eraseall

nrfjprog -f NRF52 --program "production_final.hex" --verify

nrfjprog -f NRF52 --reset

  蓝牙?榉桨干


  这时打开手机app nRF Connect即可看到程序中设置的蓝牙名称的设备了。

(4)打包OTA所需的zip文件。这里只介绍升级应用层,至于升级bootloader和协议栈下次有空再研究。

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

--sd-req 0x98 : 0x98是 协议栈版本,如下图所示

  蓝牙?榉桨干

--application-version 0xff :0xff是应用层版本。 

 --key-file private.pem 这个是"解决编译报错问题 "中生成的秘钥文件。


6.  手机空中升级的实现

(1)连接蓝牙

  蓝牙?榉桨干

(2)点击圆圈处

  蓝牙?榉桨干

(3)发送请求,设备将复位并进入bootloader状态。

  蓝牙?榉桨干

(4)发送完以后,可以看到名为DFUTARG的设备,说明此时设备进入bootloader 状态。连接蓝牙DfuTarg设备。

  蓝牙?榉桨干

(5)点击右上角的DFU按钮,选择zip文件,开始升级

蓝牙?榉桨干蓝牙?榉桨干蓝牙?榉桨干