核心蓝牙:从 iOS 15 升级到 iOS 16 时减少了 BLE MTU 大小

You*_*eed 5 iphone ios core-bluetooth bluetooth-lowenergy swift

我发现一个问题,从 iOS 15 升级到 iOS 16 后,iPhone/iOS 的 MTU 大小似乎有所减小。在升级到 iOS 16 之前,手机大小的 MTU 大小始终为 185 字节,这与大多数链接声称的相符iPhone 的最大 MTU 为(示例 1示例 2示例 3)。

不过,升级到 iOS 16 后,iPhone 发送的 MTU 减少至 77 字节。这对 iOS 应用程序使用相同的手机和完全相同的代码。我正在连接一个包含 nRF52 芯片组的可穿戴设备(即 iPhone 是中央设备,可穿戴设备是外围设备),并且始终发送 247 字节的 MTU 请求。

我成功捕获了嗅探器日志,显示 iPhone在使用iOS 15时以185 的 MTU进行回复(这是预期的):-

在此输入图像描述

下面的嗅探器日志显示了 iPhone在使用iOS 16时如何发送减少了77 字节的 MTU:-

在此输入图像描述

值得注意的一件事是,重新启动手机似乎暂时解决了问题,iPhone 的 MTU 响应恢复为 185 字节,但在几次连接后,iPhone 又开始发送 77 字节。重新启动 iPhone 上的蓝牙并不能解决问题,暂时解决此问题的唯一方法是重新启动手机。

我们成功地在 iPhone 11、iPhone 13 Pro Max 和 iPhone 14 上重现了该问题。使用 iOS 16 和 iOS 16.0.2 重现了该问题。

鉴于没有 CoreBluetooth API 来修改 MTU 大小,这似乎纯粹是 iOS 16 的错误,我是对的吗?有没有办法克服这个问题并强制手机恢复使用最大 MTU 185 字节?