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
nRF51 DFU 初始化包介绍及生成工具的更多相关文章
- Linux CentOS7 VMware 安装软件包的三种方法、rpm包介绍、rpm工具用法、yum工具用法、yum搭建本地仓库
一.安装软件包的三种方法 Linux下游三种安装方法,rpm工具.yum工具.源码包.rpm按装一个程序包时,有可能因为该程序包依赖另一个程序包而无法安装:yum工具,可以连同依赖的程序包一起安装. ...
- 安装软件包的三种方法、RPM包介绍、rpm、yum工具用法、yum搭建本地仓库
第5周第3次课(4月18日) 课程内容: 7.1 安装软件包的三种方法7.2 rpm包介绍7.3 rpm工具用法7.4 yum工具用法7.5 yum搭建本地仓库 7.1 安装软件包的三种方法 rpm工 ...
- Java语言Lang包下常用的工具类介绍_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 无论你在开发哪中 Java 应用程序,都免不了要写很多工具类/工具函数.你可知道,有很多现成的工具类可用,并且代码质量都 ...
- 数据字典生成工具之旅(6):NVelocity语法介绍及实例
本章开始将会为大家讲解NVelocity的用法,并带领大家实现一个简单的代码生成器. NVelocity是一个基于.NET的模板引擎(template engine).它允许任何人仅仅简单的使用模板语 ...
- 新一代开源Android渠道包生成工具Walle
本文转自:http://tech.meituan.com/android-apk-v2-signature-scheme.html 新一代开源Android渠道包生成工具Walle 新的应用签名方案A ...
- 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搭建本地仓库 三种方法 rpm工具----->类型windows下的exe程序 ...
- Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程
2.Lucene3.6.2包介绍,第一个Lucene案例介绍,查看索引信息的工具lukeall介绍,Luke查看的索引库内容,索引查找过程 2014-12-07 23:39 2623人阅读 评论(0) ...
- 数据字典生成工具之旅(3):PowerDesign文件组成结构介绍及操作
从这篇开始将正式讲解整个重要部分的实现细节,本篇讲解Pdm文件的解析.其实PDM文件就是XML文件,可以用Editplus或者VS打开查看.了解到这一点之后大家就能猜到,可以用解析XML的方式读取PD ...
- 微软开源全新的文档生成工具DocFX
微软放弃Sandcastle有些年头了,微软最近开源了全新的文档生成工具DocFX,目前支持C#和VB,类似JSDoc或Sphinx,可以从源代码中提取注释生成文档之外,而且还有语法支持你加入其他的文 ...
随机推荐
- C51 的重入问题 WARNING L15: MULTIPLE CALL TO SEGMENT
WARNING L15: MULTIPLE CALL TO SEGMENT 这个问题必须注意,可能引起程序冲突,假设你用于自动化领域,则可能导致信号产生尖峰. 产生这一警告的一个根源是:你在主循环里调 ...
- 使用activeMQ实现jms
一:jms介绍 jms说白了就是java message service,是J2EE规范的一部分,跟jdbc差不多,sun只提供了接口,由各个厂商(provider)来进行具体的实现, ...
- android AudioRecorder简单心得
1.如何创建一个有效的AudioRecorder实例 Android各种设备的采样频率不同,输入的声道数也不同,如果采用固定的采样频率和声道数,那么得到的AudioRecorder不一定能够正常初始化 ...
- 浅析门户网站体育赛事CDN加速解决方案
经过近些年来的高速发展,互联网已经成为现今媒体传播的主要力量.这一点在大型体育赛事的报道与转播上,体现的尤为明显.更及时的信息内容.更多样的报道形式.更齐全的资料组成.更方便的阅读查询.更具互动性的报 ...
- BZOJ3390: [Usaco2004 Dec]Bad Cowtractors牛的报复
3390: [Usaco2004 Dec]Bad Cowtractors牛的报复 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 43 Solved: ...
- 安装 Android 运行环境
如果你恰好有一些旧的. 过时的 Android SDK 版本,请务必把所需的包更新至下面提到的版本并安装所有缺少的部分. 安装和配置 SDK 安装最新的 JDK. 使用 brew install an ...
- NSData的一些用法
//NSData遵循NSCopying NSCoding协议,它提供面向对象的数组存储为字节 //适用与读写文件,而读写文件的时候需要一个缓冲区,而NSDate就提供了这么一个缓存区 //定义一个ch ...
- C++沉思录之二——虚函数使用的时机
虚函数使用的时机 为什么虚函数不总是适用? 1. 虚函数有事会带来很大的消耗: 2. 虚函数不总是提供所需的行为: 3. 当我们不考虑继承当前类时,不必使用虚函数. 必须使用虚函数的情况: 1. 当你 ...
- jQuery mouseover,mouseout事件多次执行的问题处理
控制鼠标移上移下事件,在使用Jquery 的mouseover,mouseout事件时,元素内部含有其它元素,会造成该事件多次的触发的情况. 问题解析 在用到mouseover和mouseout事件来 ...
- DefaultResouceLoader的设计
它是什么 DefaultResourceLoader是Spring中的ResourceLoader的默认实现类,也是AbstractApplicationContext的父类,它也可以单独使用,用来从 ...