nrf52832 DFU详细步骤 SDK13

1. 以下是我测试的环境,大家的环境和我的有不同也不需要太担心,随机应变。 
环境:win7,64位,IAR集成开发环境
Sdk:nRF5_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开发板
2. 在做空中升级过程中可能遇到的问题
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错误
3. 安装所需的软件
(1)gcc-arm-none-eabi-4_9-2015q3-20150921-win32.exe:
https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update
根据提示安装 4.9-2015-q3-update 版本的 GCC compiler toolchain for ARM
(2)make-3.81.exe:
http://gnuwin32.sourceforge.net/packages/make.htm
(3)python-2.7.12.amd64.msi
https://www.python.org/downloads/
(4)nRFgo Studio
主要提供nrfjprog.exe和mergehex.exe
这两个软件在nRFgo Studio的安装目录下找到
C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin
安装之后用cmd输入nrfjprog和mergehex,查看是否安装可用
 

nrf52832 DFU详细步骤 SDK13

nrf52832 DFU详细步骤 SDK13

(5)oreutils-5.3.0.exe:
http://gnuwin32.sourceforge.net/packages/coreutils.htm

4. 安装步骤
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添加到环境变量
 nrf52832 DFU详细步骤 SDK13
 (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等待安装完成
 nrf52832 DFU详细步骤 SDK13
 nrfutil会被安装到C:\Python27\Scripts目录下, 我安装的nrfutil版本是3.3.0,后面安装可能会更新,所以可能会遇到版本兼容问题。nrf studio的安装目录下也有这个软件,可以拿来代替。


2.解决缺少uECC.h文件问题
(1)下载micro-ecc:
直接用我下载好的或到官网下载micro-ecc :https://github.com/kmackay/micro-ecc
注意:官网上下载的文件夹名称的名字要改成micro-ecc
(2)把micro-ecc文件夹复制到nRF5_SDK_13.0.0_04a0bfd\external\micro-ecc目录下
 nrf52832 DFU详细步骤 SDK13
 (3)打开micro-ecc目录可以看见uECC.h
 nrf52832 DFU详细步骤 SDK13
3.解决缺少micro_ecc_lib_nrf52.lib的问题
(1)方法1:双击批处理文件nRF5_SDK_13.0.0_04a0bfd\external\micro-ecc\build_all.bat即可生成lib文件;
 nrf52832 DFU详细步骤 SDK13
 (2)方法2:也可以进入nRF5_SDK_14.0.0_3bcc1f7\external\micro-ecc\nrf52_keil\armgcc路径,输入make 生成lib文件。
 nrf52832 DFU详细步骤 SDK13
以上两种方法都是用到了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复制到报错的位置。
 nrf52832 DFU详细步骤 SDK13
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
 nrf52832 DFU详细步骤 SDK13
 (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
 nrf52832 DFU详细步骤 SDK13
最后生成烧录文件production_final.hex
(3)烧录一个文件即可,烧录前先用nRFgo Studio擦除芯片。
nrfjprog -f NRF52 --eraseall
nrfjprog -f NRF52 --program "production_final.hex" --verify
nrfjprog -f NRF52 --reset
 nrf52832 DFU详细步骤 SDK13
 
 这时打开手机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
 nrf52832 DFU详细步骤 SDK13
--sd-req 0x98 : 0x98是 协议栈版本,如下图所示
 nrf52832 DFU详细步骤 SDK13
--application-version 0xff :0xff是应用层版本。 
 --key-file private.pem 这个是"解决编译报错问题 "中生成的秘钥文件。


6. 手机空中升级的实现
(1)连接蓝牙
 nrf52832 DFU详细步骤 SDK13
(2)点击圆圈处
 nrf52832 DFU详细步骤 SDK13
(3)发送请求,设备将复位并进入bootloader状态。
 nrf52832 DFU详细步骤 SDK13
(4)发送完以后,可以看到名为DFUTARG的设备,说明此时设备进入bootloader 状态。连接蓝牙DfuTarg设备。
 nrf52832 DFU详细步骤 SDK13
(5)点击右上角的DFU按钮,选择zip文件,开始升级
      nrf52832 DFU详细步骤 SDK13nrf52832 DFU详细步骤 SDK13nrf52832 DFU详细步骤 SDK13