【问题标题】:Skipping BLE service discovery跳过 BLE 服务发现
【发布时间】:2016-09-25 09:20:53
【问题描述】:

我正在尝试最小化 BLE 设备的总连接 + 写入时间。 BLE模块是我工作的一家公司开发的,所以我已经知道设备的所有服务和特性。

到目前为止,连接时间+服务发现时间太长了(大约是800ms,这里要求是500ms top)。我试图跳过服务发现,为此,我在代码中手动创建了特性和服务(使用反射来设置受保护的属性等),我可以“技术上”绕过服务发现。

问题是,如果我这样做,第一个数据包大约需要 300 毫秒,而使用服务发现,发现大约需要 280 毫秒,第一个数据包需要 20 毫秒,所以似乎执行了服务发现无论如何,稍后,即使我不直接调用它-我的假设是否正确? 如果是这样,有没有办法绕过这个发现?

非常感谢任何帮助,到目前为止,我无法在网上找到任何有用的信息,而这 300 毫秒是至关重要的。

【问题讨论】:

    标签: android performance service bluetooth-lowenergy service-discovery


    【解决方案1】:

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

    您有三个选择:

    1. 绑定您的设备。那么android根本不会执行任何服务发现(第一次连接除外)。
    2. 优化您的 GATT 数据库。丢弃不需要的特征和描述符,如果您有自定义服务,请尝试合并尽可能多的特征等。
    3. 如果您有硬件可以优化链路层,请在同一连接事件(150 微秒内)中响应每个 GATT 请求,而不是在下一个连接事件中响应。从理论上讲,这应该可以将速度提高 2 倍。 Nordic Semiconductor 的 nrf52 就是一个例子。

    【讨论】:

    • GATT 已经过优化(只存在所需的服务和特征),在优化之前它需要大约 550 毫秒来进行服务发现。将固件/硬件团队指向链路层并报告结果。谢谢
    • 您还可以尝试一件事:将 MTU 增加到比默认值 23 更高的值(例如 512)。这样,更多的服务/特征可以适应每个响应,从而减少连接事件的数量。
    猜你喜欢
    • 2014-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 2015-08-19
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多