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,查看是否安装可用
 


(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添加到环境变量
 
 (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 :https://github.com/kmackay/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文件,开始升级
      
 
 

 

猜你喜欢

转载自blog.csdn.net/jdsnpgxj/article/details/80772727