我们公司开发了一个具有蓝牙BLE的硬件单元,我们在Nexus 7(2013)中有一个服务应用程序,我们希望将固件文件发送到设备。这些文件可以大到500kb。
BT芯片是德州仪器CC2540。
我已经浏览了大量的页面,并扫描了堆栈溢出,以获取有关如何加速从Android设备到CC2540的数据传输的信息,但还没有找到任何非常好的示例。
在北欧半导体主页上,我找到了一个如何计算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-unit之间的数据传输更快?
我们想到在Nexus 7设备中实施GATT服务器,并让CC2540订阅来自它的通知。那可能吗?这意味着Nexus首先必须扫描CC2540并在找到服务时连接到它。建立连接后,CC2540开始订阅来自Nexus 7的通知。之后,从Nexus向CC2540发送通知,传输速率更高。
希望其他人一直在尝试做我们想做的事情!
答案 0 :(得分:0)
几个月前,我使用CC2540开展了一个项目,遗憾的是该项目涉及另一个应用领域。
无论如何,我记得您可以设置连接参数,例如 Connection_Interval 或 Slave_Latency ,以便提高吞吐量,即使功耗会比以前更高。 可能你已经尝试过这样做,但我认为这是获得好结果的唯一方法。