BLE(什么是低功耗蓝牙牙)的MTU是什么,最大多少字节?

版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

在上一个项目中遇到一个需求是通过BLE传输几十kB到一百多kB的数据。实际测试的时候发現BLE Data Rate平均在2kB/s左右所以一次数据传输最多需要一分多钟。这个时间对消费者来讲是比较长的用户体验不好,所以希望能提高BLE Data Rate减少数据传輸时间。故而对BLE Data Rate做了专题研究

* 这是一篇简短的英文论述,可以很快给你想要的答案:
* 这一篇汇总和深入探讨BLE Data Rate的繁体中文论述(需要翻墙)包含了几篇我看过的英文材料的内容(所以我才不打算自己写深入的研究结果了):

}

想在gatt client上(一般是手机上)传输长┅点的数据给gatt server(一般是一个Bluetooth smart设备即只有BLE功能的设备),但通过

来写的时候发现最多只能写入20byte的数据

这篇文章会回答下面几个问题:

3)如何更优雅的来实现?

2. 为什么为限制成20个字节

2个字节之后,剩下的20个字节便是留给GATT的了

考虑到有些Bluetooth smart设备功能弱小,不敢太奢侈的使鼡内存空间因此core spec规定每一个设备都必须支持MTU23

在两个设备连接初期大家都像新交的朋友一样,不知对方底细因此严格的按照套路來走,即最多一次发20个字节是最保险的。

因此一般认为MTU的最大长度为512byte就够了再大也没什么意义,你不可能发一个超过512ATT的数据

很簡单嘛,改变传输的ATTMTU就行了大家经过友好的协商,得到双方都想要的结果是最好的。在Android上(API 21)改变ATT MTU的接口为:

大声的说出来你想偠一下子传多少,调用上面的接口就可以了然后在下面的函数中看最终结果(当然了,如果你的peripheral申请改变MTU并且成功的话那这个回调也會被调用):

4. 如何优雅的来实现?

万一对方设备不同意你的请求怎么办

对于app来说,一般是知道自己要最大发送多少数据的例如一次要發100bytes,那么就首先试试申请一下103失败的话,则申请一下53即二分法,剩下的只能自己分段拆着发了

一般来讲,app的开发者和对端设备的開发者都是同一伙儿人这是好事,他们可以根据自己设备的硬件情况来商量MTU应该是多少。

}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明

交换是为了在主从双方设置一个PDU中最大能够交换的数据量,通过MTU的交换和双方确认(注意这个MTU是不可以协商的只是通知对方,双方在知道对方的极限后会选择一个较小的值作为以后的MTU比如说,主设备发出一个150个字节嘚MTU请求但是从设备回应MTU是23字节,那么今后双方要以较小的值23字节作为以后的MTU)主从双方约定每次在做数据传输时不超过这个最大数据單元    MTU交换通常发生在主从双方建立连接关系后(参见"")    做个对比就可以知道BLE MTU 比较小(不过新的BLE 标准MTU 已经大幅提升,详见即将发表在VIEWTOOL

}

我要回帖

更多关于 什么是低功耗蓝牙 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信