蓝牙BLE Android以最大吞吐量写入外设

Dan*_*der 9 android texas-instruments bluetooth-lowenergy nexus-7

我们公司开发了一个具有蓝牙BLE的硬件单元,我们在Nexus 7(2013)中有一个服务应用程序,我们希望将固件文件发送到设备.文件可以大到500kb.

BT芯片是德州仪器CC2540.

我已经浏览了大量的页面,并扫描了堆栈溢出,以获取有关如何加速从Android设备到CC2540的数据传输的信息,但还没有找到任何非常好的示例.

在北欧半导体主页上,我找到了一个如何计算Android设备最大吞吐量的示例:(https://devzone.nordicsemi.com/index.php/how-do-i-calculate-throughput-for-a-ble - 链接)

Nexus 4 with nRF51822: 4 * 20 B * 1/0.0075 s = 10.6 kB/s = 84 kbps
Run Code Online (Sandbox Code Playgroud)

它说Android设备每个连接间隔可以发送4个20字节的数据包,Android可以处理7.5ms的连接间隔.

在我们的应用程序中,我们当前正在使用writeCharateristics发送数据,并在发送下一个数据块之前等待onWriteCharateristics回调.但是,由于回调大约需要2秒钟才能调用(!!),因此发送速度非常缓慢.这使得数据传输速率为10字节/秒,远离上述示例计算中的10.6kb/s.

我们尝试在两台iOS设备之间传输50kb数据(使用iOS版KeyFob演示版的修改版),传输速率为3.4kb/s.但那是使用CBPeripheralManager UpdateValue,我理解这是一种从外围设备向中心发送通知的方式.

我所看到的是,现在没有办法让Android设备作为外围设备工作.这是否意味着CC2540无法向Nexus 7发送通知?并且是通过通知发送数据最大化吞吐量的唯一方法吗?

TI设备中的堆栈是否会使速度变慢,或者是否有任何方法可以更改任何参数以使Nexus和CC-unit之间的数据传输更快?

我们想到了在Nexus 7设备中实施GATT服务器,并让CC2540订阅了它的通知.那可能吗?这意味着Nexus首先必须扫描CC2540并在找到服务时连接到它.建立连接后,CC2540开始订阅来自Nexus 7的通知.之后,从Nexus向CC2540发送通知,传输速率更高.

希望其他人一直试图做我们想做的事情!

小智 0

几个月前,我参与了一个使用 CC2540 的项目,不幸的是该项目是关于另一个应用领域的。

无论如何,我记得您可以设置Connection_IntervalSlave_Latency等连接参数,以提高吞吐量,即使功耗会比以前更大。也许您已经尝试过这样做,但我认为这是获得良好结果的唯一方法。