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

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

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

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

最佳答案

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

关于android - BLE:MTU交换后,MTU值的大小较小(差异较大),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50255842/

10-09 01:30