1

我正在尝试将总连接数+写入时间降至最低BLE设备。 BLE模块由我工作的公司开发,所以我已经知道设备的所有服务和特性。跳过BLE服务发现

到目前为止,连接时间+服务发现时间过长(约800ms,其中要求最高为500 ms)。我尝试过跳过服务发现,为此,我已经在代码中手动创建了特性和服务(使用反射设置受保护的属性等),并且可以通过传递服务发现来“技术上”。

问题是,如果我这样做了,第一个数据包大约需要300毫秒,在服务发现的情况下,发现大约需要280毫秒,第一个数据包需要20毫秒,所以看起来服务发现是无论如何,只是后来,即使我不直接打电话 - 我的假设是正确的? 如果是这样,是否有办法绕过发现呢?

希望得到任何帮助,到目前为止我找不到任何有用的信息在线,而那些300毫秒是关键。

回答

2

即使您没有告诉它,Android也会进行服务发现。

你有三个选择:

  1. 邦德您的设备。然后,android将不会执行任何服务发现(除了第一个连接)。
  2. 优化您的GATT分贝。丢弃你不需要的特性和描述符,如果你有自定义服务,尽量合并尽可能多的特性等。
  3. 如果你有硬件,尽可能地优化链路层,以你的方式响应每个GATT请求在相同的连接事件中(150 us内),而不是在下一次连接事件中作出响应。理论上这应该将速度提高2倍。 Nordic Semiconductor的nrf52就是一个可能的例子。
+0

GATT已经过优化(只有所需的服务和特性存在),在优化之前,它需要约550 ms的时间来完成服务发现。将固件/硬件组指向链路层并报告结果。谢谢 –

+0

还有一件事可以尝试:将MTU增加到比缺省值23更高的值(例如512)。这样更多的服务/特性可以适应每个响应,从而减少连接事件的数量。 – Emil