9

我们公司开发了一个具有蓝牙 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

它说一个 Android 单元每个连接间隔可以发送 4 个 20 字节的数据包,Android 可以处理 7.5 毫秒的连接间隔。

在我们的应用程序中,我们目前正在使用 writeCharateristics 发送数据,在发送下一个数据块之前等待onWriteCharateristics回调。然而,这个发送速度非常慢,因为回调需要大约 2 秒才能被调用(!!)。这使得数据传输速率为 10 字节/秒,与上面示例计算中的 10.6kb/秒相去甚远。

我们尝试在两台 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 以更高的传输速率向 CC2540 发送通知。

希望其他人一直在尝试做和我们一样的事情!

4

1 回答 1

0

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

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

于 2014-05-28T17:47:52.140 回答