Nordic系列芯片讲解三(Nordic52832 SDK 14 Secure DFU Procedure---nordic 52832空中升级笔记)

xiaoxiao2021-02-28  33

Nordic  52832 SDK 14 Secure DFU Procedure

---nordic 52832空中升级笔记

/************************************************************************************************/

2018年12月20日更新

最近有人反映说没有积分,下载不了相关的源码和工具。对此我也很无奈,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文件,开始升级吧

 

 

 

 

 

欢迎关注本人公众号:低功耗蓝牙技术研究及推广

 

 

 

 

 

转载请注明原文地址: https://www.6miu.com/read-497990.html

最新回复(0)