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 模块上时钟不准确的原因。也就是说,它不如连接请求中所述准确。这是我在北欧论坛上的问题:
所以我在 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时出现。
我有一个 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 模块上时钟不准确的原因。也就是说,它不如连接请求中所述准确。这是我在北欧论坛上的问题:
所以我在 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时出现。