菜鸟教程小白 发表于 2022-12-11 19:33:37

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


                                            <p><p>如何在 iOS 上每个连接间隔向蓝牙 LE (BLE) 设备发送超过 1 个数据包?</p>

<p>我正在从 iOS 连接到 <a href="https://www.microchip.com/wwwproducts/en/BM70" rel="noreferrer noopener nofollow">Microchip BM70 BLE</a> .我读过 <a href="https://punchthrough.com/blog/posts/maximizing-ble-throughput-on-ios-and-android" rel="noreferrer noopener nofollow">https://punchthrough.com/blog/posts/maximizing-ble-throughput-on-ios-and-android</a> 之类的文章以及 <a href="https://lists.apple.com/archives/bluetooth-dev/2015/Apr/msg00026.html" rel="noreferrer noopener nofollow">https://lists.apple.com/archives/bluetooth-dev/2015/Apr/msg00026.html</a> 之类的线程并实现了这样的代码:</p>

<ol>
<li>连接到设备</li>
<li>获取适当的写入特性。</li>
<li>为无响应 (157) 获取外设的最大写入长度</li>
<li>创建 157 字节的数据包。</li>
<li>然后使用 Write WithoutResponse 通过 Peripheral 的 WriteValue 方法发送数据包。</li>
</ol>

<p>如果我只写 full blast,iOS 会在大约 20 个数据包后停止发送数据。如果我每 4 个数据包后睡 150 毫秒,它就会正确发送。如果我在每个数据包后睡 35 毫秒,那么它也可以正确发送。如果我发送 18 个数据包,然后将第 19 个数据包作为 Write WithResponse + 回调处理程序发送,那么它也会正确发送数据包。</p>

<p>但是,当我查看逻辑分析仪时,数据正在正确发送,但每个连接间隔 仅发送 1 个数据包:</p>

<p> <a href="/image/3nwkb.png" rel="noreferrer noopener nofollow">logic analyzer snippet of BLE packets</a> </p>

<p>我是否需要在 CBPeripheral 或 CBCentralManager 中进行一些其他设置才能在每个连接间隔发送超过 1 个数据包? </p>

<p>谢谢!</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>如果您在断开中央和外围设备时遇到问题,我建议使用带响应的写入,并在写入数据后从外围设备接收到成功回调时发送第二组数据。如果您专注于提高吞吐量,这比在 4 个数据包后等待 150 毫秒要好。 </p>

<p>此外,iOS 将与外围设备一起调整 MTU 大小,以在一个连接中发送尽可能多的数据包。 [这是来 self 使用 iPhone(中央应用程序)和 Linux/Android(外围应用程序)所做的实验]。与小米A1连接时,根据iPhone应用程序对外围设备的要求,MTU调整为185。但是,您不能以编程方式为 MTU 大小提供自定义值,因为用于编辑 MTU 的 API 是私有(private)的并且对公共(public) API 隐藏。</p>

<p>以 iPhone 8 为中心,Android 以 BLE 4.2 作为外围设备,我们可以实现的吞吐量为 2.5 千字节每秒。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何通过每个连接间隔发送超过 1 个数据包来最大化 iOS 上 BLE 的吞吐量?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/48085889/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/48085889/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何通过每个连接间隔发送超过 1 个数据包来最大化 iOS 上 BLE 的吞吐量?