Nordic 52832 SDK 14 Secure DFU Procedure
---nordic 52832空中升级笔记
/************************************************************************************************/
2018年12月20日更新
最近有人反映说没有CSDN积分,下载不了相关的源码和工具。对此我也很无奈,csdn的下载积分规则改了,积分的多少不是我来定的。没有积分可以在文章最后评论留下联系方式,我会尽快联系你的。另外在做BLE产品时遇到什么困难也欢迎各位在下面评论留言。感谢大家的支持。
/*************************************************************************************************
2018年5月28日更新
写博客时太懒,不愿从头再验证一次。博客出来后很多人通过找到我,指出了一些纰漏的地方。特意在此更正
一下。为了避免有人再次掉进我的陷阱,特意把更新放在文章开头。
1.遇到运行指令报错的问题时,先检查一下环境变量是否正确,在windows命令行下输入命令时,windows本身是不会知道你安装的软件在哪个路径的,要把文件路径添加到环境变量" 控制面板>>所有控制面板项>>系统>>高级环境设置>>环境变量>>path"
2.因为在windows的命令行下敲命令太痛苦,所以我写了一个批处理文件,大家可以找到release文件夹下的 "dfu加密.BAT"
里面写了很多指令,大家要用记事本打开看是每条指令的实际意义。里面提到了很多hex文件,大家要明白每个hex的意思,并对应上自己的hex文件。
*********************************************************************************************/
-
前言
写此文档的目的仅仅是为了下次再做类似操作是提供指导,若大家有做类似的项目也可以拿来做参考。所有源码已经软件工具、代码都上传到我的博客http://blog.csdn.net/wulazula/article/details/78130954,有需要的可以下载下来。
源码:http://download.csdn.net/download/wulazula/10001233;
工具1:http://download.csdn.net/download/wulazula/10001257
工具2:https://download.csdn.net/download/wulazula/10001273
-
以下是我测试的环境,大家的环境和我的有不同也不需要太担心,随机应变。
环境:win7,64位,mdk keil版本v5.24.1
Sdk:nRF5_SDK_14.0.0_3bcc1f7
协议栈:s132_nrf52_5.0.0_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错误
-
安装所需的软件
这里我直接用我下载好的软件演示,大家也可以自己到到相关网站下载.
gcc-arm-none-eabi-4_9-2015q3-20150921-win32.exe:
https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update
oreutils-5.3.0.exe:
http://gnuwin32.sourceforge.net/packages/coreutils.htm
make-3.81.exe:
http://gnuwin32.sourceforge.net/packages/make.htm
python-2.7.12.amd64.msi
https://www.python.org/downloads/
另外以下软件:
nrfjprog.exe
mergehex.exe
这两个软件需要安装 nRFgo Studio的安装目录下找到
C:\Program Files (x86)\Nordic Semiconductor\nrf5x\bin
1.安装"make"编译环境:
双击安装make-3.81.exe ,
安装coreutils-5.3.0.exe,
安装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添加到环境变量
-
安装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的安装目录下也有这个软件,可以拿来代替。
-
解决缺少uECC.h文件问题
-
下载micro-ecc:
直接用我下载好的或到官网下载micro-ecc :https://github.com/kmackay/micro-ecc
注意:官网上下载的文件夹名称的名字要改成micro-ecc
-
把micro-ecc文件夹复制到
nRF5_SDK_14.0.0_3bcc1f7\external\micro-ecc目录下
3.打开micro-ecc目录可以看见uECC.h
-
解决缺少micro_ecc_lib_nrf52.lib的问题
-
双击批处理文件nRF5_SDK_14.0.0_3bcc1f7\external\micro-ecc\build_all.bat即可生成lib文件;
-
也可以进入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添加到工程即可。
-
解决编译报错问题
-
编译过程中会出现报错:#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复制到报错的位置。
-
烧录协议栈、应用层、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
-
合并所有文件,注意自己的hex文件名。
mergehex.exe --merge nrf52832_xxaa_bootloader.hex s132_nrf52_5.0.0_softdevice.hex --output production_final1.hex
mergehex.exe --merge production_final1.hex nrf52832_xxaa_app.hex --output production_final2.hex
mergehex.exe --merge production_final2.hex bootloader_settings.hex --output production_final.hex
del production_final1.hex
del production_final2.hex
最后生成烧录文件production_final.hex
-
烧录一个文件即可,烧录前先用nRFgo Studio擦除芯片。
nrfjprog -f NRF52 --eraseall
nrfjprog f NRF52 --program "production_final.hex" --verify
nrfjprog -f NRF52 --reset
这时打开手机app nRF Connect即可看到蓝牙名称为Nordic_Buttonless的设备了。
-
打包OTA所需的zip文件。这里只介绍升级应用层,至于升级bootloader和协议栈下次有空再研究。
执行nrfutil pkg generate --hw-version 52 --sd-req 0x9d --application-version 0xff --application nrf52832_xxaa_app.hex --key-file private.pem nrf52832_xxaa_app.zip
--sd-req 0x9d : 0x9d是 协议栈版本,如下图所示
--application-version 0xff :0xff是应用层版本,暂时没找到在程序的那个地方有描述,有找到的请联系一下我,因为我也想知道。哈哈。奇怪的是,若写成0xfe,升级的时候过程中手机app会报错。
--key-file private.pem 这个是"步骤七:解决编译报错问题 "中生成的秘钥文件。
-
终于到最后一步了,直接拿起手机升级吧。这里需要两个软件nRF Connect和nRF Toolbox,我用的 版本分别是 v4.10.0 和v2.2.1。以下的步骤一定要一步一步来,千万不能急。
1、连接蓝牙
-
点击圆圈处
3点击下图圆圈处
4 发送0x01,设备将复位并进入bootloader状态,这时若复位开发板或断电,手机端会看到Nordic_Buttonless的蓝牙名称。
5.发送完以后,可以看到名为DFUTARG的设备,说明此时设备进入bootloader 状态,。
-
点击右上角的DFU按钮,选择zip文件,开始升级吧
欢迎关注本人公众号:低功耗蓝牙技术研究及推广