BLE 4.0/4.1 支持 64 字节的数据传输在安卓中.



我们有一些安卓设备有BT堆栈4.0和4.1。根据理论,4.0 和 4.1 仅支持 23 (20 +3( 字节的数据传输。而BT堆栈4.2和5.0支持高达251字节MTU的数据传输。

但是在我们的应用程序中,我们要求 MTU 大小为 64 字节,并且工作正常。我们能够发送和接收这种大小的数据。我们能够连续发送 500-700 个 64 字节的数据包。

有没有人知道为什么它的工作方式不同? 还是只有少数Android设备以这种方式工作?

我们希望消除不支持我们应用程序的设备。

您对这里的术语感到困惑。根据规范,自蓝牙 4.0 以来的所有 BLE 版本的最大可能 MTU 为 64 KB,即使 Android 将其限制为 GATT 的 517。

BLE 4.2 中添加的新功能是"LE 数据包长度扩展",它是链路层的增强功能,可将无线上的最大数据包长度从 27 字节增加到 251 字节,不会以任何方式影响主机层。如果主机发送的数据包大于链路层可以处理的数据包,则发送方堆栈会自动对其进行分段,并在接收方处重新组装。

因此,无论链接层功能如何,您的 Android 应用程序都将以相同的方式工作。您唯一应该关心的是远程应用程序是否支持所需的 MTU 64。

更新

蓝牙核心 v4.0 规范第 6 卷 B 部分第 2.4 节:

LLID 字段对开始片段和延续片段有两个不同的值。

10b = LL Data PDU: Start of an L2CAP message or a complete L2CAP message with no fragmentation.
01b = LL Data PDU: Continuation fragment of an L2CAP message, or an Empty PDU.

当主机数据包大于链路层可以处理的数据包(通常为 27 或 251 字节,带 LE 数据长度扩展(时,继续使用较早数据包的功能非常重要。这就是当空中数据包永远不会超过 27 字节时获得例如 517 的 MTU 的方法。

有关 L2CAP 分段和重组的详细信息,请参阅蓝牙核心规范第 3 卷 A 部分第 7.2 节。

最新更新