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

时间: 2024-08-28 11:49:58

nRF51 DFU 初始化包介绍及生成工具的相关文章

二十一、安装软件包的三种方法、RPM包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库

一.安装软件包的三种方法 rpm工具.yum工具.源码包 RPM工具:是以一种数据库记录的方式将需要的套件安装到Linux主机的一套管理程序.就是说,你的Linux系统中有一个关于RPM的数据库,它记录了安装的包以及包与包之间的依赖关系.RPM包是预先在Linux机器上编译并打包的文件,安装快捷.缺点:安装环境必须与编译时的环境一致或相当,包与包之间存在着相互依赖的情况,卸载包时需先把依赖的包卸载.若依赖的包是系统必需的,就不能卸载这个包,否则系统崩溃. yum工具:优势:可联网下载所需要的RP

Linux CentOS7 VMware 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库

一.安装软件包的三种方法 Linux下游三种安装方法,rpm工具.yum工具.源码包.rpm按装一个程序包时,有可能因为该程序包依赖另一个程序包而无法安装:yum工具,可以连同依赖的程序包一起安装. 二.rpm包介绍 rpm包是预先在Linux上编译并打包的文件,安装快捷. 缺点:安装环境必须预编译环境一致或相当:当宝与包之间存在着相互依赖,则卸载时必须先把依赖包卸载. 如果依赖的包是系统必须的,就不能卸载这个包,否则系统会崩溃. 如果虚拟机光驱中还有系统安装盘镜像,就可以通过执行命令把光驱挂载

安装软件包的三种方法 、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库安装软件包的

安装软件包的三种方法rpm包类似于windows的exe文件.rpm工具可以安装rpm包,安装路径和文件名都是固定好的,不需要过多的设置.yum也可以安装rpm包,比rpm工具好的一点是支持自动安装依赖的包.源码包主要是源代码,需要谁用编译器编译成可执行的文件.·····rpm包介绍首先我们要把光盘连接到linux系统进行挂载,打开vmware运行虚拟机,然后右键右下角的光盘的图标然后点连接,然后在系统里挂载,挂载点可以自己选,我们使用命令:mount /dev/cdrom /mnt/把光盘挂载

rpm包介绍 rpm/yun工具用法 yum搭建本地仓库

一.安装软件包的三种方法1.rpm工具,类似于windows系统下的.exe2.yum工具,安装最简单,可以自动安装依赖关系3.源码包,安装最复杂的安装方式 二.rpm包介绍在VMware workstion软件中点击右下角小光盘,点击可以连接到linux系统,进行挂载挂载光驱: #mount /dev/cdrom /mnt/ //将光驱挂载到/mnt/目录下mnt# cd Packages Packages# ls //Packages目录下有非常多的rpm包teamd-1.25-4.el7.

安装软件包的三种方法、rpm包介绍及工具用法、yum用法及搭建本地仓库

一.安装软件包的三种方法 rpm工具 rpm(Redhat Package Manager)RPM软件包管理器,是以一种数据库记录的方式来将我们所需要的套件安装到Linux主机的一套管理程序.rpm包是预先在Linux机器上编译好并打包好的文件,安装起来非常快捷.但是有一个缺点:安装环境必须与编译时的一致或相当:包与包之间存在着相互依赖的情况,安装或卸载包时需要先把依赖的包安装或卸载,如果依赖的包是系统所必须的,那就不能卸载这个包. yum工具 (类似于苹果手机里面的app store) yum

Java语言Lang包下常用的工具类介绍_java - JAVA

文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都很不错,不用你写,不用你调试,只要你发现. 在 Apache Jakarta Common 中, Lang 这个 Java 工具包是所有 Apache Jakarta Common 项目中被使用最广泛的,几乎你所知道的名气比较大的软件里面都有用到它,包括 Tomcat, Weblogic, Webs

7.1 安装软件包的三种方法7.2 rpm包介绍 7.3 rpm工具用法 7.4 yum工具用法7.5 yum搭建本地仓库

- 7.1 安装软件包的三种方法 - 7.2 rpm包介绍 - 7.3 rpm工具用法 - 7.4 yum工具用法 - 7.5 yum搭建本地仓库 - 扩展 1. yum保留已经安装过的包 http://www.360doc.com/content/11/0218/15/4171006_94080041.shtml 2. 搭建局域网yum源 http://ask.apelearn.com/question/7627 # 7.1 安装软件包的三种方法 - windows的.exe文件实际上是一种二

数据字典生成工具之旅(6):NVelocity语法介绍及实例

本章开始将会为大家讲解NVelocity的用法,并带领大家实现一个简单的代码生成器. NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由.NET代码定义的对象.从而使得界面设计人员与.NET程序开发人员基本分离. 阅读目录 NVelocity的常用功能简介 基本语法 实例介绍 工具源代码下载 学习使用 回到顶部 NVelocity的常用功能简介 1. 在页面中定义变量,并进行简单的运算

数据字典生成工具之旅(9):多线程使用及介绍

这一篇将在之前的代码生成器上讲解多线程的应用,多线程的概念和好处这里就不多说了,另外从本篇开始后面的实例代码都将放到淘宝的SVN管理工具上维护,大家可以直接使用SVN工具进行下载.好了下面进入本篇内容. 阅读目录 线程的应用 winform程序中的多线程 本章总结 工具源代码下载 学习使用 回到顶部 线程的应用 这里先讲一下线程在Web程序中的一个应用,之前的那一版代码生成器没有考虑表数量多的情形,这里先模拟一下在数据库中创建300张表的情形,下面给出创建表的语句 . --模拟创建300张表,@