• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:33:37 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

如何在 iOS 上每个连接间隔向蓝牙 LE (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. 为无响应 (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 个数据包?

谢谢!



Best Answer-推荐答案


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

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

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

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

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap