nordic SDK15.0的空中升级复杂的一批。弄了两天终于实现了升级。
首先列明一些用到的东西:
python2.7.11
nRF5_SDK_15.0.0_a53641a
空中升级工具包
nordic pc10040开发板
安卓手机一台
从python的官网上选择2.7.11 Windows64位版本的安装程序下载,点击安装。如果之前电脑上安装了Python3的最好把这个版本的卸载掉。安装Python2之后,把这个安装的路径添加到系统环境变量里面去。在cmd的窗口下输入python能正确执行,就说明Python安装无误。
打开空中升级工具包,把其中的所有文件都复制到Python安装目录下的Scripts的目录中。接下来就是安装一些nordic要用到的一些第三方安装包。
在命令行中切换到Scripts目录,输入pip install nrfutil安装这个nrfutil。如果pip有问题,那么这里就会报错。这有可能是Python没有安装好,这个时候你执行以下 Python -m pip install –upgrade pip,这将会安装一个合适的pip。然后再执行pip install nrfutil。如何还不行,那就再想想其他办法。
假如安装ok,那么就执行下一步生产priv.pem和dfu_public_key.c。执行命令为:
nrfutil keys generate priv.pem
nrfutil keys display –key pk –format code –out_file dfu_public_key.c priv.pem
这两个文件放的位置在你执行这个命令时的目录的下面。从这个目录里面复制dfu_public_key.c把nRF5_SDK_15.0.0_a53641a\examples\dfu目录下的同名文件替换。
再从空中升级工具包中找到micro-ecc把nRF5_SDK_15.0.0_a53641a\external目录下的micro-ecc替换掉。打开dfu的工程,把nRF_micro_ecc中的micro_ecc_lib_nrf52.lib替换成新的lib,这个lib在之前替换的目录下面。编译这个工程,基本上不会报错。这个工程如果不更新这个dfu_public_key.c和micro_ecc这些会报错。
说一句,这空中升级涉及到的命令都是在python下执行的。所以为什么要先安装python。
打开ble_app_buttonless_dfu和secure_bootloader的工程,在option中把工程的输出文件名称相应改成nrf52832_xxaa_app.hex和nrf52832_xxaa_s132_boot.hex。编译两个工程,生成相应的文件。把这两个文件都复制放在同一个目录下面。然后把这个两个工程用到的softdevice hex文件也复制到这个目录下面。以上工作完成ok后,就可以接着下一步了。
把烧录文件合并成一个文件:
再一次打开cmd命令窗口,切换到保存上面几个文件的目录下面。输入以下命令:
nrfutil settings generate –family NRF52 –application nrf52832_xxaa_app.hex
–application-version 3 –bootloader-version 2 –bl-settings-version 1
settings_52832.hex
成功运行后,目录会生成settings_52832.hex。
再执行:
mergehex.exe -m s132_nrf52_5.0.0_softdevice.hex nrf52832_xxaa_app.hex -o
sd_and_app_52832.hex
mergehex.exe -m sd_and_app_52832.hex nrf52832_xxaa_s132_boot.hex -o
sd_and_app_and_boot_52832.hex
mergehex.exe -m sd_and_app_and_boot_52832.hex settings_52832.hex -o
sd_app_boot_setting_complete_52832.hex
这些命令使协议栈 ,application,bootloader,setting这些合并成一个文件。这个sd_app_boot_setting_complete_52832.hex可以在这个目录下找到。
接下来烧录这个合并文件:
擦除flash内容
nrfjprog.exe –family NRF52 –eraseall
烧录文件
nrfjprog.exe –family NRF52 –program sd_app_boot_setting_complete_52832.hex
verify文件
nrfjprog.exe –family NRF52 –verify sd_app_boot_setting_complete_52832.hex
复位
nrfjprog.exe –reset
到此合并文件成功烧录到了开发板中。
使用安卓手机升级程序:
第一步要制作升级包:
创建一个目录然后在这个目录下执行命令:
nrfutil keys generate priv.pem
nrfutil keys display –key pk –format code –out_file dfu_public_key.c priv.pem
生成需要的 priv.pem和dfu_public_key.c
执行以下命令:
nrfutil pkg generate –application nrf52832_xxaa_app_dfu_test.hex –application-version 0xFF
–hw-version 52 –sd-req 0xFFFE –key-file priv.pem nrf52832_xxaa_app_dfu_test.zip
(其中 0xFFFE 为未知协议栈版本号,协议栈版本可以通过 nRFgo studio 查看)
生成升级压缩包。
在安卓手机中打开nordic官方APP,连nordic SDK15.0版本的空中升级实验-编程知识网接设备。如图。打开buttonless_dfu通道的通知功能,然后点击写命令发送请求。等待一会,app显示连接断开。这时再连接就会发现设备进入了dfu模式。
把之前生成的application升级包发送到手机,在app界面上点击dfu小图标,在手机目录下选择要升级的包文件,就启动了升级了。

再说一下IDE的问题。实验SDK15我用的是MDK525版本的keil5,在这个过程中出现了cmsis的问题。首先我是在pack更新里面更新这个cmsis,然后还出现了更新后也不对的情况,我就在工程中CMSIS右击鼠标进入option中选择了一下CMSIS的版本,结果就好了。这个我也是一头雾水。

升级工具包不知道怎么附加上来。所以这个就没办法了。可以找FAE要。

以上内容希望能帮到你。