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 是原因,但我不能确定。
我检查的内容:
- 我在多个 MacBook Pro 运行 El Capitan 上进行了测试,延迟总是那么糟糕。
- 无论将命令发送到何种服务(例如,设备信息服务),这些命令都有很高的延迟,并且随着每条消息的发送而变化很大。
- 无论我使用的是我们自己的应用程序、名为 "LightBlue" 的第三方应用程序来发送十六进制字符串,还是 Apple 自己的 "Bluetooth Explorer" 开发者工具(可以在 Developer 下载资源)。
谁能告诉我是什么原因导致的,或者只是告诉我在他们的环境中一切正常?
要重现,请使用您的 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)。
我一直在开发一个 Mac OS X 应用程序,它通过蓝牙低功耗向硬件设备连续发送命令。在 Yosemite 下,该应用运行良好,测得的命令传输往返延迟为 7-12 毫秒。该命令以最小 2 秒和最大 0.2 秒的稳定间隔发送到自定义 BLE 服务。
现在,我最近几个月没有开发(该应用程序尚未上线),然后升级到 El Capitan,现在同一个应用程序的延迟为 500-1500 ms,这使得整个事情完全无法使用。我假设升级到 El Capitan 是原因,但我不能确定。
我检查的内容:
- 我在多个 MacBook Pro 运行 El Capitan 上进行了测试,延迟总是那么糟糕。
- 无论将命令发送到何种服务(例如,设备信息服务),这些命令都有很高的延迟,并且随着每条消息的发送而变化很大。
- 无论我使用的是我们自己的应用程序、名为 "LightBlue" 的第三方应用程序来发送十六进制字符串,还是 Apple 自己的 "Bluetooth Explorer" 开发者工具(可以在 Developer 下载资源)。
谁能告诉我是什么原因导致的,或者只是告诉我在他们的环境中一切正常? 要重现,请使用您的 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)。