首页 > 解决方案 > BLE:MTU 交换后降低 MTU 值大小(差异较大)

问题描述

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

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

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

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

标签: androidbluetooth-lowenergygatt

解决方案


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


推荐阅读