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)以在发出执行命令之前验证对象。

最新文章

  1. JSP数据交互
  2. html5 css3 loading 效果
  3. 开发Portlet第一步:如何基于Crystal开发静态Portlet?
  4. 基于DevExpress开发的GridView如何实现一列显示不同的控件类型
  5. HBase体系结构剖析
  6. git分支管理和stash
  7. orcle经常使用语句
  8. linux 使用文本编辑器编写shell脚本执行权限不够
  9. MVC之重定向
  10. 阿里UX矢量图标库–最强大的矢量图标库(Icon font制作力荐工具)
  11. Kafka笔记--监控系统KafkaOffsetMonitor
  12. asp.net MVC Razor 语法(1)
  13. sspanelv3魔改版邮件设置指南及常用配置
  14. 用Python登录好友QQ空间点赞
  15. Spark join连接
  16. QQ 互联认证 回调地址提示说要http :// 但是事实不用
  17. CF529B 【Group Photo 2 (online mirror version)】
  18. python进程进阶
  19. js split 的用法和定义 js split分割字符串成数组的实例代码
  20. 入门学习Linux常用必会命令实例详解

热门文章

  1. Java日期工具类DateUtils详解(转)
  2. HDU 6073 - Matching In Multiplication | 2017 Multi-University Training Contest 4
  3. HDU 6052 - To my boyfriend | 2017 Multi-University Training Contest 2
  4. LinkedBlockingQueue 实现 生产者 消费者
  5. 并发编程入门(一): POSIX 使用互斥量和条件变量实现生产者/消费者问题
  6. 【线性代数】4-3:最小二乘近似(Least Squares Approximations)
  7. Hbuilder快速代码技巧和常用快捷键
  8. bzoj4152
  9. codeforces#1157D. Ehab and the Expected XOR Problem(构造)
  10. python 快速排序-代码示例