OS X 10.11 El Capitan上的蓝牙低能耗延迟/延迟

时间:2016-02-04 09:36:40

标签: macos bluetooth osx-elcapitan latency bluetooth-lowenergy

我一直在开发一个Mac OS X应用程序,它通过蓝牙低功耗连续发送命令到硬件设备。在Yosemite下,该应用程序运行良好,对于命令传输,测量的往返延迟为7-12 ms。该命令以最小2秒和最长0.2秒的稳定间隔发送到自定义BLE服务。

现在,我在过去几个月没有开发(应用尚未上线),然后升级到El Capitan,现在同一个应用的延迟 500-1500 ms ,这使得整个事情绝对无法使用。我假设升级到El Capitan是原因,但我无法确定。

我检查了什么:

  • 我在运行El Capitan的多台MacBook Pro上进行了测试,延迟总是那么糟糕。
  • 无论发送给哪些服务(例如,设备信息服务),命令都具有高延迟,并且每发送一条消息都会发生很大的变化。
  • 如果我使用自己的应用程序,名为“LightBlue”的第三方应用程序发送十六进制字符串,或Apple自己的“蓝牙资源管理器”开发人员工具(可以在开发人员资源中下载),则无关紧要。

任何人都可以暗示我可能会导致这种情况,或者只是告诉我在他们的环境中一切正常吗? 要重现,请使用Mac连接任何支持Bluetooth Low Energy的设备,并向其发送十六进制数据串。您必须以某种方式记录它或打开LED左右,以查看是否存在明显的延迟。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

El Capitan使用的连接参数看起来不像以前在优胜美地那样。

在OS X下,无论客户端应用程序如何,CoreBluetooth都会决定给定设备使用哪些连接参数。不幸的是,CoreBluetooth依赖于计算参数的规则有些不透明并且依赖于设备(公开的服务,DIS,AD)。 El Capitan可能会改变一些规则。

您应该开始寻找一些方向:

  • Apple Bluetooth Accessory Design Guidelines详细说明了apple Centrals接受的有关连接参数的一些规则,

  • 延迟问题也可能是因为slaveLatency连接参数较高。它有助于节省外设的电池寿命,但会使中心 - >外围延迟有些不可预测。您可以减少设备接受的Slave Latency,

  • 嗅探器日志或外围设备端调试肯定有助于了解Yosemite和El Capitan之间实际发生的变化。

答案 1 :(得分:1)

最终Apple DTS帮助我解决了这个问题。他们在我的固件中错误设置的“首选连接参数”中暗示了我。

在Yosemite的早期版本中,这些值没有任何效果(与iOS相同),但由于某些操作系统更新,因此可以在Yosemite和El Capitan上阅读。没有设置参数解决了问题。

就我而言,默认设置了值:

连接间隔: 最小7.5毫秒, 最长50毫秒

从属延迟:0ms

连接监督超时:10000

这些值以某种方式导致高延迟。这是我在赛普拉斯PSoC Creator 3.3中取消设置的屏幕截图(我使用的是PSoC 4 BLE)。

enter image description here