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/ 欢迎转载或分享,但请务必声明文章出处。

  • 相关阅读:
    Java Web系统经常使用的第三方接口
    ExtJS笔记--applyTo和renderTo的差别
    ORACLE触发器具体解释
    java多线程样例
    RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
    排序——选择排序
    常见hash算法的原理
    jdk和jre是什么?都有什么用?(转帖)
    Ubuntu下deb包的安装方法
    參加《全流程全要素的研发项目管理》培训记录与心得
  • 原文地址:https://www.cnblogs.com/tan-v/p/4291509.html
Copyright © 2011-2022 走看看