Bet*_*ker 7 android bluetooth ios bluetooth-lowenergy
如何找出低功耗蓝牙 (BLE) 中 MTU 与最大特征尺寸之间的关系?
我有一个运行“回声”程序的 BLE 开发板 - 所以无论它收到什么,它都会立即回复。
在我的 Android 设备上,如果我请求 247 字节的 MTU(成功),然后写入 247 字节的特征,它将作为两个数据包发送:一个具有 242 个字节,一个具有 5 个字节。任何尝试写入超过 244 个字节的特性都会导致 2 个数据包 - 第一个具有 242 个字节,第二个具有剩余字节。不知道为什么第一个数据包的长度是 242 字节而不是 244 字节,但确实如此。
相反,如果我请求 100 字节的 MTU,也会发生同样的事情,但是当特征长度超过 97 字节时,数据包会被拆分,并且第一个数据包的长度始终为 95 字节。
所以很明显,在这个特定的 Android 设备上,最大数据包长度比 MTU 值短 3 个字节。我在 iOS 上看到过关于 MTU 的页面,其中数据包长度比 MTU 值短 3 个字节。
我能保证在所有移动设备和所有 BLE 实现上 MTU 和最大特征长度之间的差异将是 3 个字节吗?
Emi*_*mil 12
几乎。ATT 标头由一个字节的操作码和两个字节的 ATT 句柄组成。如果您使用“Write Long Characteristic Values”,还有一个两字节的偏移参数。如果您使用“无响应签名写入”过程(没有人使用并且几乎没有堆栈支持),还有一个 12 字节的签名。
另请注意,最大特征长度为 512 字节。但是,允许的最大 MTU 为 65535 字节。无论您的 MTU 有多大,您都不能写入大于 512 字节的特征值。
如果您对 ATT 协议的底层细节感兴趣,您可以在https://www.bluetooth.com/specifications/bluetooth-core-specification,第 3 卷 F 部分阅读蓝牙核心规范。
| 归档时间: |
|
| 查看次数: |
6242 次 |
| 最近记录: |