BLE:MTU 交换后较低的 MTU 值大小(差异很大)

BLE: Lower MTU value size(big difference) after MTU exchange

我是 BLE 开发的新手。我想通过 BLE 连接以最大吞吐量发送大量数据。

我有一个 GATT 服务器,它是 Linux 上的 运行,还有一个 运行 作为 Android 上的应用程序的客户端。我创建了一个具有最大允许大小(512 字节)的自定义特征。我通过读取操作从应用程序请求它。每次我收到服务器端读取的呼叫时,我都会更改它的值,直到我完成所有数据(我知道这不是最好的方法,但现在这不是问题)。

至于使用 android 的 requestConnectionPriority(CONNECTION_PRIORITY_HIGH) 的连接参数,我可以看到他们正在尝试协商 7.5 毫秒的连接间隔,但由于某种原因,它变成了 15 毫秒它留在那里。也许我的phone不支持,但我不这么认为。

接下来的主要问题是 MTU。使用 hcidump,我可以看到他们开始协商 MTU,因为我可以看到来自客户端的值为 517(默认)的 MTU 请求和具有相同值的服务器响应。但是当我触发数据交换时,我可以看到(使用 Wireshark)数据包只包含 32 字节的有效负载。不知道是不是我蓝牙适配器的限制。

一个 MTU 数据包可以包含许多无线电数据包,而 32 字节的无线电数据包有效负载可能是您的蓝牙适配器中的一个限制。目前没有phone支持7.5ms的连接间隔。如果您的 phone 和设备支持,您还应该启用数据长度扩展。这将允许您在整个连接事件中传输多个 MTU。