gpt4 book ai didi

ios - 如何通过每个连接间隔发送超过 1 个数据包来最大化 iOS 上 BLE 的吞吐量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:05:19 27 4
gpt4 key购买 nike

iOS 上的每个连接间隔如何向低功耗蓝牙 (BLE) 设备发送超过 1 个数据包?

我正在从 iOS [iPhone 6 with iOS 10.3] 连接到 Microchip BM70 BLE .我读过类似 https://punchthrough.com/blog/posts/maximizing-ble-throughput-on-ios-and-android 的文章以及像 https://lists.apple.com/archives/bluetooth-dev/2015/Apr/msg00026.html 这样的话题并实现了这样的代码:

  1. 连接到设备
  2. 获取适当的写入特性。
  3. 获取外设的 WithoutResponse 最大写入长度 (157)
  4. 创建 157 字节的数据包。
  5. 然后使用 Write WithoutResponse 通过 Peripheral 的 WriteValue 方法发送数据包。

如果我只写 full blast,iOS 在大约 20 个数据包后停止发送数据。如果我在每 4 个数据包后休眠 150 毫秒,它就会正确发送。如果我在每个数据包后休眠 35 毫秒,那么它也会正确发送。如果我发送 18 个数据包,然后将第 19 个数据包作为 Write WithResponse + 回调处理程序发送,那么它也会正确发送数据包。

但是,当我查看逻辑分析仪时,数据正在正确发送,但每个连接间隔 [30ms] 仅发送 1 个数据包:

logic analyzer snippet of BLE packets

是否需要在我的 CBPeripheral 或 CBCentralManager 中进行一些其他设置才能在每个连接间隔内发送超过 1 个数据包?

谢谢!

最佳答案

如果你遇到中央和外设断开的问题,我建议使用write with response,写完数据后从外设接收成功回调后发送第二组数据。如果您专注于提高吞吐量,这比在 4 个数据包后等待 150 毫秒要好。

此外,iOS 将调整外围设备的 MTU 大小,以在一个连接中发送最大可能的数据包。 [这是我使用 iPhone(中央应用程序)和 Linux/Android(外围应用程序)所做的实验]。在与小米 Mi A1 连接时,MTU 根据 iPhone 应用程序对外围设备的请求调整为 185。但是,您不能以编程方式为 MTU 大小提供自定义值,因为用于编辑 MTU 的 API 是私有(private)的并且对公共(public) API 是隐藏的。

以 iPhone 8 为中心,Android 和 BLE 4.2 为外围设备,我们可以实现的吞吐量为每秒 2.5 KB。

关于ios - 如何通过每个连接间隔发送超过 1 个数据包来最大化 iOS 上 BLE 的吞吐量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48085889/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com