BLE 4.0/4.1 支持 Android 中 64 字节的数据传输
BLE 4.0/4.1 supporting data transfer of 64 bytes in Android
我们有一些 android 设备具有 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 将其限制为 517 用于 GATT。
BLE 4.2 中添加的新功能是 "LE Data Packet Length Extension",它是 Link 层的增强功能,可将无线传输的最大数据包长度从 27 字节增加到 251 字节,这确实不会以任何方式影响宿主层。如果主机发送的数据包大于 link 层可以处理的数据包,它会被发送方堆栈自动分段并在接收方重新组装。
因此,无论 link 层功能如何,您的 Android 应用程序都可以正常工作。您唯一应该关心的是远程应用程序是否支持您想要的 64 MTU。
更新
蓝牙核心 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.
当主机数据包大于 link 层可以处理时(通常为 27 或 251 字节,LE 数据长度扩展),继续较早数据包的功能很重要。这就是当无线数据包从不超过 27 字节时,您可以获得例如 517 的 MTU。
有关 L2CAP 分段和重组的详细信息,请参阅蓝牙核心规范第 3 卷第 A 部分第 7.2 节。
我们有一些 android 设备具有 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 将其限制为 517 用于 GATT。
BLE 4.2 中添加的新功能是 "LE Data Packet Length Extension",它是 Link 层的增强功能,可将无线传输的最大数据包长度从 27 字节增加到 251 字节,这确实不会以任何方式影响宿主层。如果主机发送的数据包大于 link 层可以处理的数据包,它会被发送方堆栈自动分段并在接收方重新组装。
因此,无论 link 层功能如何,您的 Android 应用程序都可以正常工作。您唯一应该关心的是远程应用程序是否支持您想要的 64 MTU。
更新
蓝牙核心 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.
当主机数据包大于 link 层可以处理时(通常为 27 或 251 字节,LE 数据长度扩展),继续较早数据包的功能很重要。这就是当无线数据包从不超过 27 字节时,您可以获得例如 517 的 MTU。
有关 L2CAP 分段和重组的详细信息,请参阅蓝牙核心规范第 3 卷第 A 部分第 7.2 节。