iOS 低功耗蓝牙:代码=6 "The connection has timed out unexpectedly."

iOS Bluetooth LE: Code=6 "The connection has timed out unexpectedly."

我有一个 BLE 外围设备(我控制它的固件)和两个充当中心的移动应用程序,一个在 Android,另一个在 iOS 8.1。

Android 应用运行良好。 iOS 没有。连接一段时间后,它会自动断开连接。错误是:

Code=6 "The connection has timed out unexpectedly."

连接和断开之间的时间是随机的。我测量了 40 秒到 4 分 30 秒。

所有外围设备通过 BLE 连接所做的就是将一些固件日志消息写入移动应用程序 UI。每隔几分钟,只有少数人快速连续地写入一个特征。外围设备固件没有错误。

如何找到断线的原因?

在外设 BLE 模块制造商 Nordic Semiconductor 的广泛支持下,我们非常确定这是 iPhone 5C BLE 模块上时钟不准确的原因。也就是说,它不如连接请求中所述准确。这是我在北欧论坛上的问题:

https://devzone.nordicsemi.com/question/51258/ios-8-disconnection-code6-the-connection-has-timed-out-unexpectedly/

所以我在 Microchip BM78 蓝牙模块与 iOS 通话时遇到了这个问题。我发现这篇技术说明非常有帮助: https://developer.apple.com/library/archive/qa/qa1931/_index.html

这些设置已闪存到 BM78 模块上。这是上述技术说明中的 Apple 'rules':

  • 最小间隔 ≥ 15 毫秒(15 毫秒的倍数)
  • 最小间隔 + 15 毫秒 ≤ 最大间隔(允许最大间隔 == 15 毫秒)
  • 最大间隔 *(从设备延迟 + 1)≤ 2 秒
  • 最大间隔 *(从设备延迟 + 1)* 3 < connSupervisionTimeout
  • 从设备延迟 ≤ 30
  • 2秒≤connSupervisionTimeout≤6秒

我的价值观(运作良好):

  • 最小间隔 = 15 毫秒
  • 最大间隔 = 30 毫秒
  • 从设备延迟 = 4
  • 连接监督超时 =~ 5 秒

我在iOS14上开发蓝牙时遇到了同样的问题。我一开始调整了Jim Holland提到的角色,还是出现了这个问题。然后我怀疑是不是因为信号的RSSI低。将测试 phone 移近设备后,问题消失了!经过一些测试,我发现这个问题偶尔会在RSSI低于-90时出现。