nRF5 SDK Bootloader and DFU moudles(3)
DFU控制点特性用于控制DFU过程的状态。 通过写入该特征来请求所有DFU程序。 标记过程结束的响应将作为通知收到。
BLE传输
Transfer of an init packet
DFU控制器首先检查init数据包是否已成功传输。 如果没有,DFU控制器检查它是否已部分转移。 如果已经传输了一些数据,则继续传输。 否则,DFU控制器发送Create命令以创建新数据对象,然后传输init数据包。 当init数据包可用时,DFU控制器发出Execute命令以启动init数据包的验证。

Transfer of a firmware image
固件映像被分成几个连续传输的数据对象。 如果数据对象的传输失败(例如,由于断电),则可以继续传输而不是重新启动。 因此,DFU控制器首先选择发送的最后一个数据对象,然后检查它是否完整且有效。 如果是,则控制器发出Execute命令,然后继续使用下一个数据对象进行传输。 否则,DFU控制器发送Create命令以在需要时创建新的数据对象(因此,如果此数据对象的传输尚未启动或接收的数据已损坏),然后传输下一个数据对象。
传输所有数据包后,DFU控制器会发出Execute命令以触发实际的固件更新。
DFU控制器负责跟踪进度。 对每个Select命令的响应包含有关最大对象大小,当前偏移量和CRC的信息。 例如,如果图像大小为10 kB且最大对象大小为4 kB,则必须传输3个数据对象。 如果返回的偏移量为6 kB,则DFU控制器知道当前对象是要传输的第二个对象,并且尚未完全传输。

Data reliability
BLE DFU服务旨在处理序列化对象。 但是,传输和验证序列化数据是抽象的,并且在BLE传输层之外是不可见的。
为了确保接收所有数据包,即使它们是使用WriteWithoutResponse传输的,DFU控制器必须执行循环冗余校验(CRC)以在发出执行命令之前验证对象。
nRF5 SDK Bootloader and DFU moudles(3)的更多相关文章
- nRF5 SDK Bootloader and DFU moudles(1)
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行.可以初始化硬件设备.建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境. 在嵌 ...
- nRF5 SDK Bootloader and DFU moudles(2)
镜像的验证 在执行设备固件更新之前,应验证新映像. 在传输实际固件(预验证)之前,可以检查某些信息(例如,兼容性). 其他信息,例如图像的散列,应在传输(验证后)后进行验证. Init packet ...
- nRF5 SDK for Mesh(三) Installing the mesh toolchain 安装编译工具链
Installing the mesh toolchain To build the example applications, a toolchain based on either CMake o ...
- nRF5 SDK for Mesh(二) Getting started 快速开始
Getting started To get started, take a look at the Light switch demo. It shows how a simple applicat ...
- nRF5 SDK软件架构及softdevice工作原理
本文将介绍Nordic nRF5 SDK软件架构以及softdevice工作原理,以加深大家对Nordic产品开发的理解,这样开发过程中碰到问题时,大家也知道如何去调试. 如果你刚开始接触nRF5 S ...
- Nordic nRF5 SDK和softdevice介绍
SDK和Softdevice的区别是什么?怎么选择SDK和softdevice版本?芯片,SDK和softdevice有没有版本兼容问题?怎么理解SDK目录结构?SDK帮助文档在哪里?Softdevi ...
- nRF5 SDK for Mesh(四) 源码编译
官方文档教程编译源码: http://infocenter.nordicsemi.com/index.jsp?topic=%2Fcom.nordic.infocenter.sdk%2Fdita%2Fs ...
- nRF5 SDK for Mesh(一) 介绍和下载源码
一: 官网介绍地址:http://www.nordicsemi.com/Products/Bluetooth-low-energy/nRF5-SDK-for-Mesh Nordic offers a ...
- 如何调试nRF5 SDK
本文将讲述Nordic nRF5 SDK的主要调试手段,以帮助大家快速定位问题,并解决问题.一般来说,你可以通过打log方式,IDE的debug模式,SDK自带的app_error_check函数,以 ...
随机推荐
- uint128_t 添加 c++ 重载类型强制转换
类型声明: class uint128 { public: uint128() :hi(), lo(){} uint128(uint32_t l) :hi(), lo(l){} uint128(int ...
- 写出一条SQL语句:取出表A中第31到40行记录(SQLserver,以自增长的ID作为主键,注意: 一条Sql语句:取出表A中第31到第40记录
解1: select top 10 * from A where id not in (select top 30 id from A) 解2: select top 10 * from A wher ...
- [Python自学] day-20 (Django-ORM、Ajax)
一.外键跨表操作(一对多) 在 [Python自学] day-19 (2) (Django-ORM) 中,我们利用外键实现了一对多的表操作. 可以利用以下方式来获取外键指向表的数据: def orm_ ...
- 1、创建MFC应用程序——单个文档
文件——新建——项目——MFC应用程序 运行即可. [菜单栏单击事件] 视图——其他窗口——资源视图,双击Menu中的IDR_MAINFRAM,打开菜单栏.在主菜单栏输入“显示你好”. “显示你好”处 ...
- 使用 kubeadm 安装 kubernetes v1.16.0
近日通过kubeadm 安装 kubernetes v1.16.0,踩过不少坑,现记录下安装过程. 安装环境: 系 统:CentOS Linux release 7.6 Docke ...
- 微信小程序底层原理与运行机制类文章学习
参考文档 小程序底层实现原理及一些思考 为了安全和管控, 双线程执行 Web Worker执行用户的代码; UI线程执行大部分的功能. 微信小程序架构原理 只通过mvvm模板语法动态改变页面, 不支持 ...
- HTML/HTML5 知识点思维导图
1 - 浏览器 | 浏览器页面构成 2 - 浏览器 | 浏览器内核相关知识点 3 - W3C | 对WEB标准以及W3C的理解与认识? 4 - 标签 | Doctype相关知识点 5 - 标签 | m ...
- JsonObject处理时间转换问题
正常传时间的时候使用JsonObject转换的时候会把整个日期都转换成一个新的对象,而如何转换成传统的yyyy-MM-dd HH:mm:ss类型呢 常用的时间格式 private String for ...
- RxJava(一):响应式编程与Rx
一,响应式编程 响应式编程是一种关注于数据流(data streams)和变化传递(propagation of change)的异步编程方式. 1.1 异步编程 传统的编程方式是顺序执行的,必须在完 ...
- Flume-事务与传输流程
一.Flume 事务 流程图 Put 事务流程 doPut:将批数据先写入临时缓冲区 putList doCommit:检查 channel 内存队列是否足够合并 doRollback:channel ...