zoukankan      html  css  js  c++  java
  • (原创)nRF51 DFU 初始化包介绍及生成工具

    nRF51 DFU 初始化包

           当升级数据包时,在应用程序映像传输之前,在DFU中需要初始化包来执行映像的安全检测。这个初始化包作为升级流程的一部分提供了安全检测机制,因此被升级的设备只能接收兼容的应用程序。

       初始化包包括以下信息可用于安全检测(参见dfu_init_packet_t

    l  Device type:一个2个字节的值,可由开发者定义,以指示设备的类型,如Heart Rate Belt。

    l  Device revision:一个2个字节的值,用于限制一个设备只能使用一个定义的版本号进行升级。

    l  Application version:一个4字节的值,用来标识用于传输的应用程序的版本,这个值用来只允许软件升级而不能降级。没有示例代码使用这个值。

    l  Supported SoftDevices:一个2个字节的列表标识与应用程序兼容的SoftDevices,如S110 v7.0 和 S110 v7.1。

    l  Checksum:2个字节的循环校验码,用于校验映像。

     SDK提供一个模板dfu_init_template.c用于执行初始化包的安全检测。这个模板是为了增强DFU的安全性而增加的。

     1 设备和版本类型

       设备和版本类型在nRF51芯片的UICR(0x10001080)寄存器的用户保留区中保存,如果这个区域用于其他目的,更新dfu_init.h中的偏移:UICR_CUSTOMER_DEVICE_INFO_OFFSET

    #defin  UICR_CUSTOMER_DEVICE_INFO_OFFSET 0x0 /**< Device info offset inside the customer UICR reserved area. Customers may change this value to place the device information in a user-preferred location. */

    在UICR中默认值为0xFFFF,这个值意味着初始化数据包中任何设备和版本信息的DFU数据都会被接收。

    2 应用程序版本

        DFU初始化数据包中支持检测应用程序版本。当前的bootloader示例中没有使用这个特性。但是,如果有必要可以实现应用程序版本检测,并增加到dfu_init_template.c中。

       如果增加应用程序版本检测,每一个应用程序必须使用一个版本ID进行编译,这个版本ID必须存放在应用程序映像中一个预先定义的地方,例如在应用程序起始地址+0x0100的地方,类似于nordic SD的原理。

       参见以下dfu_init_template.c中的代码片段,它说明了DFU初始化包如何处理一个应用程序版本的安全检测。

    // In order to support application versioning this check should be updated.

    // This template allows for any application to be installed however customer could place a

    // revision number at bottom of application to be verified by bootloader. This could be done at

    // a relative location to this papplication for example Application start address + 0x0100.

    3 SoftDevice列表

      应用程序以特定的SoftDevice为目标专为某一nRF51芯片而编译,例如S110 v7.1.0。如果API向后兼容,一些应用程序可能运行在多种SoftDevice版本上,例如,一个应用程序专为SoftDevice S110 v7.1.0而编译,但也可以运行在SoftDevice S110 v7.0.0 上。

       可以在DFU初始化包中提供一个支持应用程序的SoftDevice列表。DFU检测该列表,看看是否与当前SoftDevice版本相对应,如果对应才继续升级。

       如果值为0xFFFE,那意味着任何应用程序都可以安装而不管SoftDevice的版本,这个特性在开发中非常有用,但不要用在产品中。

       当前SoftDevice的FWID值如下:

       SoftDevice S110icS1

      FWID

    S110 v7.0.0

    0x004F

    S110 v7.1.0

    0x005A

    Development/any

    0xFFFE

    4  DFU初始化包生成方法

           Tan-v提供了DFU初始化包生成工具:make_dfu_initpacket.bat,生成的DFU init packet可直接用于手机APP升级,使用方法:

    1. 把编译生成的hex文件“nrf51422_xxac.hex”(官方示例默认生成的hex文件名)放到 make initpacket 文件夹路径之下。注意:此hex文件名不可改变。

    2. 点击 make_dfu_initpacket.bat ,则生成 bin 文件:nrf51422_xxac.bin 和DFU Init packet 文件:bootloader_initpacket.dat。

    3. 把 bootloader_initpacket.dat 和nrf51422_xxac.hex保存到手机中,可直接用手机 DFU APP 进行升级。

    注意:生成的DFU Init packet文件默认配置是支持任何设备类型、支持任何设备版本、支持S110 V7.0.0 和S110 V7.1.0,若要更改,更改config.dat文件中对应字段。

    DFU 初始化包生成工具下载链接:http://pan.baidu.com/s/1dDgZQMX

    作者:tan-v  出处:http://www.cnblogs.com/tan-v/ 欢迎转载或分享,但请务必声明文章出处。

  • 相关阅读:
    luogu P1833 樱花 看成混合背包
    luogu P1077 摆花 基础记数dp
    luogu P1095 守望者的逃离 经典dp
    Even Subset Sum Problem CodeForces
    Maximum White Subtree CodeForces
    Sleeping Schedule CodeForces
    Bombs CodeForces
    病毒侵袭持续中 HDU
    病毒侵袭 HDU
    Educational Codeforces Round 35 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/tan-v/p/4291509.html
Copyright © 2011-2022 走看看