如何通过每个连接间隔发送超过1个数据包来最大化iOS上BLE的吞吐量?

如何通过每个连接间隔发送超过1个数据包来最大化iOS上BLE的吞吐量?,ios,bluetooth-lowenergy,core-bluetooth,Ios,Bluetooth Lowenergy,Core Bluetooth,在iOS上,如何能够在每个连接间隔向蓝牙LE(BLE)设备发送超过1个数据包 我正在从iOS[iPhone6和iOS 10.3]连接到。我读过类似threads的文章,并实现了如下代码: 连接到设备 获取适当的写入特征 获取WithoutResponse(157)的外围设备最大写入长度 创建157字节的数据包 然后使用Write Without Response通过外围设备的WriteValue方法发送数据包 如果我只写完整的blast,iOS会在大约20个数据包后停止发送数据。如果我在每4个数

在iOS上,如何能够在每个连接间隔向蓝牙LE(BLE)设备发送超过1个数据包

我正在从iOS[iPhone6和iOS 10.3]连接到。我读过类似threads的文章,并实现了如下代码:

  • 连接到设备
  • 获取适当的写入特征
  • 获取WithoutResponse(157)的外围设备最大写入长度
  • 创建157字节的数据包
  • 然后使用Write Without Response通过外围设备的WriteValue方法发送数据包
  • 如果我只写完整的blast,iOS会在大约20个数据包后停止发送数据。如果我在每4个数据包后睡眠150毫秒,它将正确发送。如果我在每个数据包之后睡眠35毫秒,那么它也会正确发送。如果我发送18个数据包,然后以Write with response+call back处理程序的形式发送第19个数据包,那么它也会正确发送数据包

    但是,当我查看逻辑分析仪时,数据发送正确,但每个连接间隔[30ms]仅发送1个数据包:

    是否需要在CBPeripheral或CBCentralManager中进行其他设置,以便每个连接间隔发送超过1个数据包


    谢谢

    如果您在断开中央和外围设备的连接时遇到问题,我建议使用write with response,并在写入数据后,在成功从外围设备接收回调时发送第二组数据。如果您专注于提高吞吐量,那么这比在4个数据包之后等待150毫秒要好

    此外,iOS将通过外围设备调整MTU大小,以在一个连接中发送最大可能的数据包。[这是我使用iPhone(中央应用程序)和Linux/Android(外围应用程序)所做的实验]。在连接Xiomi A1时,MTU根据iPhone应用程序对外围设备的要求调整为185。但是,您不能通过编程为MTU大小指定自定义值,因为用于编辑MTU的API是私有的,并且对公共API是隐藏的

    以iPhone8为中心,Android以BLE4.2为外围设备,我们可以实现每秒2.5千字节的吞吐量