我们公司开发了具有Bluetooth BLE的硬件单元,并在Nexus 7(2013)中提供了一个服务应用程序,我们希望通过该应用程序将固件文件发送到该单元。这些文件可以最大为500kb。

BT芯片是Texas Instruments CC2540。

我浏览了成千上万个我们的页面,并扫描了Stack溢出信息,以了解如何加快从Android设备到CC2540的数据传输,但是还没有找到任何真正好的示例。

在Nordic半导体主页上,我找到了一个示例,说明了它们如何计算Android单元的最大吞吐量:
(https://devzone.nordicsemi.com/index.php/how-do-i-calculate-throughput-for-a-ble-link)

Nexus 4 with nRF51822: 4 * 20 B * 1/0.0075 s = 10.6 kB/s = 84 kbps

它说一个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单元之间的数据传输更快?

我们设想在Nexus 7设备中实现GATT服务器,并使CC2540订阅来自它的通知。那可能吗?这意味着Nexus首先必须扫描CC2540,并在找到服务后将其连接。建立连接后,CC2540开始订阅来自Nexus 7的通知。此后,从Nexus以较高的传输速率将通知从Nexus发送到CC2540。

希望其他人已经尝试做与我们尝试做的相同的事情!

最佳答案

几个月前,我在使用CC2540的项目中工作,不幸的是,该项目涉及另一个应用领域。

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

10-04 17:02