模块型号:rf-bm-nd04
一. 以下是我测试的环境:
环境: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开发板
二. 在做空中升级过程中可能遇到的问题
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错误
三. 安装所需的软件
(1)gcc-arm-none-eabi-4_9-2015q3-20150921-win32.exe:
根据提示安装 4.9-2015-q3-update 版本的 gcc compiler toolchain for arm
(2)make-3.81.exe:
(3)python-2.7.12.amd64.msi
(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
四. 安装步骤
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:
直接用我下载好的或到凯发app官方网站官网下载micro-ecc :
注意:凯发app官方网站官网上下载的文件夹名称的名字要改成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文件,开始升级