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

Bluetooth Low Energy Lag / Latency on OS X 10.11 El Capitan

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

现在,我最近几个月没有开发(该应用程序尚未上线),然后升级到 El Capitan,现在同一个应用程序的延迟为 500-1500 ms,这使得整个事情完全无法使用。我假设升级到 El Capitan 是原因,但我不能确定。

我检查的内容:

谁能告诉我是什么原因导致的,或者只是告诉我在他们的环境中一切正常? 要重现,请使用您的 Mac 连接到任何支持低功耗蓝牙的设备,并向其发送一个十六进制数据字符串。您必须以某种方式记录它或打开 LED 左右,以查看是否存在明显的延迟。

非常感谢任何帮助!

看来 El Capitan 使用的连接参数与以前 Yosemite 下的不同。

在 OS X 下,CoreBluetooth 决定给定设备使用哪些连接参数,而不管客户端应用程序如何。不幸的是,CoreBluetooth 计算参数所依赖的规则有些不透明并且依赖于设备(暴露的服务、DIS、AD)。 El Capitan 中的某些规则可能已更改。

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

  • Apple Bluetooth Accessory Design Guidelines详细介绍了apple Centrals接受的连接参数的一些规则,

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

  • 嗅探器日志或外设端调试肯定有助于了解 Yosemite 和 El Capitan 之间实际更改的参数。

最终苹果DTS帮我解决了问题。他们提示我 "preferred connection parameters" 在我的固件中设置不正确。

在 Yosemite 的早期版本中,这些值没有影响(与 iOS 相同),但由于某些 OS 更新,它们在 Yosemite 上读取并且埃尔卡皮坦。根本不设置参数就解决了问题。

在我的例子中,这些值是默认设置的:

连接间隔: 最少 7.5 毫秒, 最大 50 毫秒

从机延迟:0ms

连接监督超时: 10000

这些值以某种方式导致了高延迟。这是我必须在 Cypress PSoC Creator 3.3 中取消勾选的设置的屏幕截图(我使用的是 PSoC 4 BLE)。