从 BLE v4.2 到 4.0 的有效载荷大小的向后兼容性

Posted

技术标签:

【中文标题】从 BLE v4.2 到 4.0 的有效载荷大小的向后兼容性【英文标题】:Backward compatibility on payload size from BLE v4.2 to 4.0 【发布时间】:2017-10-18 14:39:39 【问题描述】:

我有一个蓝牙 LE 版本 4.2 的硬件设备,它可以发送有效载荷为 251 字节的数据包。但我将通过移动应用程序(androidios)接收数据,并且手机将具有不同的蓝牙 LE 版本,如 v4.0、v4.1 或 v4.2。

假设我的硬件设备充当主设备,而移动设备充当从设备。而且这里master不知道slave的蓝牙版本。

如果master发送的数据包的payload为251字节,slave(v4.0 - payload: 33 bytes)如何处理。

问题 1:BLE GATT 服务器是否能够通过保留 251 个数据包的缓冲区并一个接一个地发送 33 个数据包来处理这种向后兼容的情况?

问题 2:通过将主设备保持在 v4.2 并仍然使用所有 BLE 版本回答从设备,获得高吞吐量的最佳方法是什么?

问候, 湿婆。

【问题讨论】:

【参考方案1】:

如果您阅读蓝牙核心规范,您会发现在链路层上,链路层数据包大小可以从双方协商(从机或主机都没有关系)。如果其他设备不支持它,则将使用默认长度。否则将使用较大的长度。所以它完全向后兼容。

此外,GATT 层根本不需要更改以支持 LE 数据长度扩展,因为分片和重组由 L2CAP 层处理。

但请注意,您需要将较大的 MTU 换成 GATT 才能使用该功能。最好 4+MTU 应该是链路层数据包最大长度的倍数。

【讨论】:

以上是关于从 BLE v4.2 到 4.0 的有效载荷大小的向后兼容性的主要内容,如果未能解决你的问题,请参考以下文章

当有效载荷长度大小大于 1000K 时,无法获得有效载荷响应。(Coap)

处于从属角色的 BLE(v4.2) 设备可以有多个主控吗?

如何使用android原生BLE蓝牙进行操作?

如果我在 C# 中发送 0 有效载荷数据,udp 数据包的大小是多少?

PE格式自检

(FB即时游戏)如何从游戏播放按钮获取有效载荷数据?