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)以在发出执行命令之前验证对象。
最新文章
- JSP数据交互
- html5 css3 loading 效果
- 开发Portlet第一步:如何基于Crystal开发静态Portlet?
- 基于DevExpress开发的GridView如何实现一列显示不同的控件类型
- HBase体系结构剖析
- git分支管理和stash
- orcle经常使用语句
- linux 使用文本编辑器编写shell脚本执行权限不够
- MVC之重定向
- 阿里UX矢量图标库–最强大的矢量图标库(Icon font制作力荐工具)
- Kafka笔记--监控系统KafkaOffsetMonitor
- asp.net MVC Razor 语法(1)
- sspanelv3魔改版邮件设置指南及常用配置
- 用Python登录好友QQ空间点赞
- Spark join连接
- QQ 互联认证 回调地址提示说要http :// 但是事实不用
- CF529B 【Group Photo 2 (online mirror version)】
- python进程进阶
- js split 的用法和定义 js split分割字符串成数组的实例代码
- 入门学习Linux常用必会命令实例详解
热门文章
- Java日期工具类DateUtils详解(转)
- HDU 6073 - Matching In Multiplication | 2017 Multi-University Training Contest 4
- HDU 6052 - To my boyfriend | 2017 Multi-University Training Contest 2
- LinkedBlockingQueue 实现 生产者 消费者
- 并发编程入门(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题
- 【线性代数】4-3:最小二乘近似(Least Squares Approximations)
- Hbuilder快速代码技巧和常用快捷键
- bzoj4152
- codeforces#1157D. Ehab and the Expected XOR Problem(构造)
- python 快速排序-代码示例