更改

跳转至: 导航搜索

NRF52832DK-DFU固件升级教程

添加5,105字节2020年1月8日 (三) 11:59
git安装
安装git完成后,双击build_all.bat文件,此时git就会去下载micro-ecc源码。此时目录下多了一个micro-ecc文件夹,发现里面有相应的uECC.h与uECC.c等相关文件。
回到IAR工程,再次编译,发现没有报缺少micro_ecc相关的文件,只报了没有相应的公钥错。回到IAR工程,再次编译,发现没有报缺少micro_ecc相关的文件,只报了没有相应的公钥错误。
===== 安装nrfutil =====
为了解决没有公钥的错误,我们需要public key与priavte key一对密钥对,使用ECDSA_P256_SHA256算法对DFU程序进行签名并加密。key一对密钥对,使用ECDSA_P256_SHA256算法对DFU程序进行签名并加密。生成密钥对,需要使用nrfutil工具。nrfutil在nRFgo studio工具安装路径中也有,但是版本非常低(0.3.0版本)。当然,开发者如果想要使用更新版本的nrfutil,可以自己安装。 nrfutil是一个python工具,所以开发者只要安装Python就可以了。但是要注意,Python必须在2.7-3.0版本之间。Python安装完成后,在Python的路径下使用'''python -m pip install nrfutil'''命令安装nrfutil。 nrfutil会安装在python路径下的Scripts文件夹内。强烈建议将nrfutil配置到PC的环境变量中,这样就不需要到Scripts文件夹下执行nrfutil命令。 ===== 生成密钥对 =====* 生成自己的私钥(private key)<syntaxhighlight lang="py">nrfutil keys generate private.pem</syntaxhighlight>* 根据私钥生成公钥(public key)<syntaxhighlight lang="py">nrfutil keys display --key pk --format code private.pem --out_file public_key.c</syntaxhighlight>此命令执行完成后,会在当前路径下生成public_key.c文件。这个文件是根据私钥生成的公钥数组。<syntaxhighlight lang="c" line="1">/* This file was automatically generated by nrfutil on 2019-09-25 (YY-MM-DD) at 17:57:45 */ #include "stdint.h"#include "compiler_abstraction.h" /** @brief Public key used to verify DFU images */__ALIGN(4) const uint8_t pk[64] ={ 0x18, 0xd3, 0xbc, 0xdd, 0x92, 0x7a, 0xdd, 0xa7, 0x73, 0xbf, 0x11, 0xb7, 0x08, 0x59, 0x6d, 0x23, 0x52, 0xf6, 0x47, 0x01, 0xaf, 0xdb, 0xdc, 0xaf, 0x5a, 0x83, 0x03, 0x1a, 0x0a, 0xf8, 0x5b, 0xaf, 0x9c, 0x0d, 0x37, 0x9c, 0x77, 0x69, 0xd4, 0x14, 0xab, 0x4c, 0x32, 0x02, 0x94, 0xc3, 0x15, 0x6e, 0xfd, 0x9d, 0xc9, 0xe5, 0xc3, 0x33, 0x1a, 0x69, 0xf3, 0x85, 0xa2, 0x31, 0x85, 0xc6, 0x97, 0x42};</syntaxhighlight>需要将uint8_t pk[64]复制到Bootloader工程的Application下的dfu_public_key.c文件中,替换#error的内容。完后如下:<syntaxhighlight lang="c" line="1">/* This file was automatically generated by nrfutil on 2018-09-08 (YY-MM-DD) at 06:07:33 */ #include "sdk_config.h"#include "stdint.h"#include "compiler_abstraction.h" #if NRF_CRYPTO_BACKEND_OBERON_ENABLED/* Oberon backend is changing endianness thus public key must be kept in RAM. */#define _PK_CONST#else#define _PK_CONST const#endif  /* This file was generated with a throwaway private key, that is only inteded for a debug version of the DFU project. Please see https://github.com/NordicSemiconductor/pc-nrfutil/blob/master/README.md to generate a valid public key. */ #ifdef NRF_DFU_DEBUG_VERSION  /** @brief Public key used to verify DFU images */__ALIGN(4) _PK_CONST uint8_t pk[64] ={ 0x40, 0xe5, 0x14, 0xb4, 0x6d, 0xb9, 0x83, 0xc7, 0x1c, 0x33, 0x92, 0x17, 0x35, 0x11, 0xe2, 0x00, 0x8b, 0x52, 0x24, 0xbd, 0xbb, 0x6b, 0x6a, 0xe8, 0x68, 0x1a, 0x32, 0xfb, 0x77, 0x15, 0xe1, 0xe1, 0xd9, 0xbc, 0x43, 0xbb, 0x55, 0x6f, 0xf6, 0x9e, 0x3d, 0x04, 0x49, 0x5b, 0xbc, 0x47, 0xa3, 0x69, 0x68, 0x24, 0x15, 0x4b, 0x5e, 0x9c, 0x9d, 0x6b, 0xf4, 0x4e, 0x62, 0x59, 0xd7, 0x24, 0xc4, 0x71}; #else/** @brief Public key used to verify DFU images */__ALIGN(4) const uint8_t pk[64] ={ 0x18, 0xd3, 0xbc, 0xdd, 0x92, 0x7a, 0xdd, 0xa7, 0x73, 0xbf, 0x11, 0xb7, 0x08, 0x59, 0x6d, 0x23, 0x52, 0xf6, 0x47, 0x01, 0xaf, 0xdb, 0xdc, 0xaf, 0x5a, 0x83, 0x03, 0x1a, 0x0a, 0xf8, 0x5b, 0xaf, 0x9c, 0x0d, 0x37, 0x9c, 0x77, 0x69, 0xd4, 0x14, 0xab, 0x4c, 0x32, 0x02, 0x94, 0xc3, 0x15, 0x6e, 0xfd, 0x9d, 0xc9, 0xe5, 0xc3, 0x33, 0x1a, 0x69, 0xf3, 0x85, 0xa2, 0x31, 0x85, 0xc6, 0x97, 0x42};#endif</syntaxhighlight>完成public_key的复制之后,再次编译bootloader工程。 此时已经没有了public key相关错误了,但是报了没有micro_ecc_lib_nrf52.a文件。具体内容如下:<syntaxhighlight lang="text">Fatal Error[Li001]: could not open file "E:\Nordic_BLE\NRF52832_new\nRF5_SDK_15.2.0_9412b96\external\micro-ecc\nrf52hf_iar\armgcc\micro_ecc_lib_nrf52.a" </syntaxhighlight>这个原因是上面下载了micro_ecc源码之后,没有编译生成相应的库文件造成的。 ===== 安装make工具 =====在git安装章节中,build_all.bat文件的最后有相应的make命令,这些make命令就是编译指令(所有编译相关的操作,都是通过makefile完成的,开发者不用编写makefile,SDK中已经帮用户完成这些makefile文件,开发者只要安装make工具,并双击运行build_all.bat)。 make 工具开发者可以自行安装,也可以在谷雨NRF52832DK评估板DFU相关目录下找到make工具。如果是绿色运行软件,开发者要进行PC环境变量设置,否则在运行build_all.bat时会报错。 ===== 安装gcc-arm编译器 =====运行build_all.bat文件后,再次编译bootloader工程,发现错误依旧存在。在次返回到micro-ecc目录下,发现各个平台目录下没有相应的.a库文件。难道源码有错误,导致make出错?带个这个疑问,在build_all.bat文件后,加上一个pause的bat命令,即不让windows命令窗口自行退出。再次运行build_all.bat文件。 发现命令窗口确实打印出相应的
[[分类:NRF52832DK]]
[[分类:实验手册]]
119
个编辑

本PDF由谷雨文档中心自动生成,点击下方链接阅读最新内容。

取自“http://doc.iotxx.com/特殊:移动版差异/2618

导航菜单