SDK 14 Secure DFU Procedure---nordic 52832空中升级笔记

来源:互联网 发布:知乎 英国公爵 编辑:程序博客网 时间:2024/05/22 13:40

SDK 14 Secure DFU Procedure

---nordic 52832空中升级笔记

 

 

  1. 前言

     

    写此文档的目的仅仅是为了下次再做类似操作是提供指导,若大家有做类似的项目也可以拿来做参考。所有源码已经软件工具、代码都上传到我的博客http://blog.csdn.net/wulazula/article/details/78130954,有需要的可以下载下来。

     

     源码:http://download.csdn.net/download/wulazula/10001233;  

工具1:http://download.csdn.net/download/wulazula/10001257      
              工具2:http://download.csdn.net/download/wulazula/10001257

  1. 以下是我测试的环境,大家的环境和我的有不同也不需要太担心,随机应变。

     

    环境: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开发板

     

     

     

  2. 在做空中升级过程中可能遇到的问题

     

    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错误

     

     

  3. 安装所需的软件

     

    这里我直接用我下载好的软件演示,大家也可以自己到到相关网站下载.

     

    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添加到环境变量

     

  4. 安装python-2.7.12.amd64.msi。

     

    双击python-2.7.12.amd64.msi安装

    进入命令行窗口,并到Python路径,输入python -m pip install nrfutil

    等待安装完成

     

     

     

  5. 解决缺少uECC.h文件问题

     

  6. 下载micro-ecc:

     

    直接用我下载好的或到官网下载micro-ecc :https://github.com/kmackay/micro-ecc

    注意:官网上下载的文件夹名称的名字要改成micro-ecc

     

  7. 把micro-ecc文件夹复制到

    nRF5_SDK_14.0.0_3bcc1f7\external\micro-ecc目录下

     

     

     

     

    3.打开micro-ecc目录可以看见uECC.h

     

     

  8. 解决缺少micro_ecc_lib_nrf52.lib的问题

     

  9. 双击批处理文件nRF5_SDK_14.0.0_3bcc1f7\external\micro-ecc\build_all.bat即可生成lib文件;

     

  10. 也可以进入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添加到工程即可。

     

  11. 解决编译报错问题

     

  12. 编译过程中会出现报错:#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复制到报错的位置。

     

  13. 烧录协议栈、应用层、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

     

  14. 合并所有文件,注意自己的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

     

  15. 烧录一个文件即可,烧录前先用nRFgo Studio擦除芯片。

    nrfjprog -f NRF52 --eraseall

    nrfjprog f NRF52 --program "production_final.hex" --verify

    nrfjprog -f NRF52 --reset

     

     

    这时打开手机app nRF Connect即可看到蓝牙名称为Nordic_Buttonless的设备了。

     

     

  16. 打包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 这个是"步骤七:解决编译报错问题 "中生成的秘钥文件。

     

     

     

  17. 终于到最后一步了,直接拿起手机升级吧。这里需要两个软件nRF Connect和nRF Toolbox,我用的 版本分别是 v4.10.0 和v2.2.1。以下的步骤一定要一步一步来,千万不能急。

    1、连接蓝牙

     

     

     

     

     

  18. 点击圆圈处

     

    3点击下图圆圈处

     

     

    4 发送0x01,设备将复位并进入bootloader状态,这时若复位开发板或断电,手机端会看到Nordic_Buttonless的蓝牙名称。

     

    5.发送完以后,可以看到名为DFUTARG的设备,说明此时设备进入bootloader 状态,。

     

     

     

  19. 点击右上角的DFU按钮,选择zip文件,开始升级吧

     

     

     

原创粉丝点击