2017-08-07 436 views
2

如何找出蓝牙低功耗(BLE)中MTU与最大特征尺寸之间的关系?BLE:MTU与最大特征尺寸之间的关系?

我有一个运行'echo'程序的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个字节?

回答

1

差不多。 ATT头由一个字节的操作码和ATT句柄的两个字节组成。如果使用“写入长特征值”,则还有两个字节的偏移参数。如果您使用“无签名写入响应”程序(没有人使用且几乎没有堆栈支持),还有一个12字节签名。

另请注意,最大特征长度为512字节。然而,允许的最大MTU是65535字节。无论您的MTU有多大,都不能写出大于512字节的特征值。

如果你有兴趣在ATT协议的底层细节你可以在阅读https://www.bluetooth.com/specifications/bluetooth-core-specification蓝牙核心规范,第3部分F.

+0

奈斯利把周华健,只需添加上:架空的有效载荷是写特性(3字节)和读特性(1字节)不同。 –