android - 蓝牙 : Lower MTU value size(big difference) after MTU exchange

标签 android bluetooth-lowenergy gatt

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

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

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

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

最佳答案

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

关于android - 蓝牙 : Lower MTU value size(big difference) after MTU exchange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50255842/

相关文章:

android - 聊天头点击事件

android - 以编程方式将 WhatsApp 发送到没有选择器的联系人列表

android - 如何限制从 IMAGE_CAPTURE Intent 中获取的图片大小

swift - TI SensorTag 加速度计服务不做广告

Android - 检测我的应用程序的其他用户是否在附近

Android 蓝牙设备按顺序扫描/发现经典和低功耗设备

ios - 通过 EDR 在两个双模设备之间传输 BT 低功耗 GATT 配置文件

Android BLE 外围设备断开连接,状态代码为 BLE_HCI_INSTANT_PASSED(0x28)

android - BLE <-> Android, iOS设备通信是否需要Bonding?

android - onContextItemSelected 不会在 DialogFragment 中被调用