前言
我们使用BLE的时候,有很大多数情况都是把BLE当做无线传输,也就平常所说的透传数据,只要透传搞定了就可以做很多事情,但是有的时候一次性传几百字节发现传不了或者只传了前面20字节,然后网上一查大家都说BLE4.0和BLE4.1只能一次传20字节的数据,也不知道大伙有没有去想为什么只能传20字节呢?基于这个问题,根据我查的一些资料,现在给大家说说为什么只能传20字节。
原理
因为这个是蓝牙协议标准规定的,但是20Bytes只针对Core4.0和Core4.1的蓝牙标准,具体如下:
[Vol 6] --> [Part B]--> [2.4]中有这样的规定:
也就是说Core4.0和Core4.1的Payload最大只有27字节,
即Payload(27字节)=Header(4字节)+MTU(23字节),其中MTU(23字节)=Opcode(1字节)+AttHandle(2字节)+AttValue(20字节),即使你把MTU设成512字节这个是L2CAP层最大支持的数据量,最终还是要拆解成20字节一包来发送的。
但是,Core4.2的蓝牙标准则是有变化的,具体如下:
即Payload(251字节)=Header(4字节)+MTU(247字节),其中MTU(247字节)=Opcode(1字节)+AttHandle(2字节)+AttValue(243字节)
结束语
不知道各位小伙伴现在明白了吗?如果有不对还请大家指出来。