APP空中升级原理
2016-06-08 14:41
260 查看
升级介绍
蓝牙固件升级是使用手机给固件进行更新,以达到修复bug,完善功能的作用。升级的大概流程是:首先,当手环的固件需要升级时,由嵌入式开发人员提供新的固件,由服务器管理人员将固件放到服务器上,此时,用户打开手机APP的时候会检测到服务器有更新,请求更新手环固件,确认更新后,手机会从服务器下载固件。下载完毕后,APP会读取固件内容,并根据升级协议将内容传到手环里,完成升级。DFU = Device Firmware Update (设备固件更新)
OTA = Over The Air (空中升级)
升级流程
各个蓝牙设备不尽相同,以下是我测试设备的升级流程:OTA下载固件
从云端下载的固件为.bin后缀的文件,文件名会有一定的格式,含有固件版本号和文件CRC32校验值。
数据分块
规定一个数据块大小比如2048字节,然后把升级数据进行分块,不够的就剩余多少作为一块。蓝牙一次发送的数据量是有限的,所以每次发送20字节的数据。这个数据要遵循升级数据格式,带指令头和校验和,下载包的数据只是这20字节中的一部分。所有包内数据都携带在每条升级数据指令中。
升级过程
连接设备,发送升级请求。
待蓝牙确认之后,开始发送数据头告知蓝牙此次发送的数据量和CRC校验。
开始发送升级数据。(每条数据之间间隔20ms为了蓝牙能够方便处理)
待一个块发送完就发送块结束命令
蓝牙确认发送下一个块,返回错误则终止此次升级
发完所有数据之后发送升级完成
蓝牙确认则升级完成,返回错误则升级失败
流程图
总结
蓝牙升级最复杂的就在升级过程,大量的数据与蓝牙交互,这时最好记录发送到升级数据的那一部分,可以给用户展示升级的进程。原文链接:http://www.jianshu.com/p/0d956862ffa1
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
相关文章推荐
- Android自定义View:水平带数字百分比的进度条
- android Spinner控件详解
- Layoutinflater的使用
- 编译 Android 工程
- PopupWindow在Android开发中的使用
- IOS获取设备唯一标识的八种方法
- Android 下led 的控制(上)--Android部分
- quick-cocos2d-x 从2.2.5升级到3.3的体会,quickcocos2dx3.3
- Unity3D 调用Android与IOS的剪贴板
- android弹出dialog后activity背景变暗
- Android 通过网页打开自己的APP(scheme)
- Android获得线性渐变某点的颜色
- iOS 收到内存警告的处理过程
- Android状态栏
- Android Studio代码混淆插件
- android实现图片左右滑动效果:viewpager
- iOS打包.a静态库步骤
- Android Studio方法注释模板
- android上传文件到服务器
- Android基础知识之broadcast广播详解