上一篇简单介绍了蓝牙4.0的iOS实现代码,详细的东西大家可以去github上搜babyBluetooth,里面有一些学习资料,接下来分享的是OTA升级的东西,我们假定看这篇文章的时候,关于iOS和外设间的蓝牙收发数据已经掌握的很6
OTA详解
OTA(Over-the-Air)空中传输,一般用于固件升级。其实和数据传输一样,很简单,发送指令,接受指令,发送bin数据包,结束指令。。。只是蓝牙传输的数据大小使得这一步骤稍显复杂。
首先,文件传输,其实也是传输的数据,即 NSData,和普通的 peripheral 写入没什么区别。固件升级的文件一般是 .bin 文件,也有 .zip 的。不过这些文件,都是数据,所以首先将文件转为 NSData
需要注意的是:data 一般很长,毕竟是文件。直接通过 writeValue:forCharacteristic:type: 写入的话,不会有任何回调。哪怕是错误的回调,都没有。这是因为蓝牙单次传输的数据大小是有限制的。
我们一般使用20bytes作为标准,即将bin文件转为NSData,然后截成每个20bytes的包发送;这些步骤需要和刷firmware的工程师协商,指定一个协议,接下来以公司的YModem协议举例
YModem协议
YModem协议是由XModem协议演变而来的,是一种发送并等待的协议,即发送方发送一个数据包以后,都 要等待接收方的确认。如果是 ACK 信号,则可以发送新的包。如果是 NAK 信号, 则重发或者错误退出。
每包数据可以达到1024字节,是一个非常高效的文件传输协议
所用到的符号
#define MODEM_SOH 0x01 //数据块起始字符
#define MODEM_STX 0x02 //1028字节开始
#define MODEM_EOT 0x04 //文件传输结束
#define MODE

本文介绍了iOS设备如何通过蓝牙实现OTA升级,重点讲解了YModem协议的工作原理,包括数据包格式、传输过程和CRC校验,并提供了部分源码链接。
:iOS中蓝牙模块OTA升级(YModem协议)&spm=1001.2101.3001.5002&articleId=74936735&d=1&t=3&u=90e964fa53754451a641175ba2a0cd25)
2675

被折叠的 条评论
为什么被折叠?



