BLE外设吞吐量限制

时间:2013-08-14 19:49:44

标签: ios bluetooth-lowenergy throughput peripherals

我们正在开发一种可与iPad配合使用的BLE传感器外设,它需要使用TI CC2541 BLE模块和自定义配置文件的BLE通知特性(无应答)的以下吞吐量数据:

每10毫秒一个20字节(GATT最大标准数据包),或者由于我们似乎每个连接间隔限制为4个数据包,这相当于每40毫秒一个连接间隔。所需吞吐量为每秒2,000字节,TI网站建议将CC2541 BLE解决方案用于需要此级别数据吞吐量的多个传感器设备。

BLE模块的配置文件设置的最小和最大连接间隔分别为20ms和40ms,这应该足够了。 “Apple产品的蓝牙配件设计指南”文档表明,我们设置的最小和最大连接间隔如上所述是正确的。我们在新的Mac Mini / Mac Book上使用适用于iOS 6的最新iPad和Apple工具。

通过iPad上的简单测试程序,我们可以使链接能够以20ms的间隔向BLE外设发送20字节数据包,但是一旦我们根据需要将其降低到10ms,我们就会开始丢失数据包或者获取损坏的数据包,我们关闭FIFO空中断,这样我们就可以更快地处理向BLE模块FIFO的发送,并且我们使用230400的最大波特率将20字节数据包从微处理器发送到BLE TX FIFO。

我们意识到我们处于BLE转移限制的最高端,并且是可能的。任何人都可以建议使用带有最新iPad的TI CC2541 BLE芯片/模块来实现每秒2000字节吞吐量的解决方案吗?

4 个答案:

答案 0 :(得分:9)

我们使用TI 2540(BLE堆栈版本1.3.2)成功使用iPad / iPod / iPhone(iOS 6.x和7.x)。我们目前发送75个每秒20个字节的通知=> 1500字节/秒。但是我试图发送125个通知,但也有效。

当然,您发送的数据越多,丢失数据的可能性就越大,例如,重新发送NACK消息的时间就会减少。

我已经体验过iOS'BLE套件可能会进入一种持续NACK消息的模式。如果发生这种情况,您将丢失大量消息。我向Apple报告了一个错误。 (此问题似乎已在iOS 7.1.beta3 / 4中修复。)

我目前有:

// Minimum connection interval (units of 1.25ms, 80=100ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL     10

// Maximum connection interval (units of 1.25ms, 800=1000ms) if automatic parameter update request is enabled
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL     20

是的,它不符合Apple的指导方针。但我相信他们可以放松一下。

更新:我还尝试使用iDevice作为外设,即两个iDevices之间的BTLE。在这里,我每秒发送150条消息,没有任何问题。检查代码here

答案 1 :(得分:1)

您是否正在发送“无响应写入”命令?这样,每个连接事件可以发送4个数据包。使用您之前的20ms连接间隔,您将每0.02秒发送4个包含20个字节的数据包。把它放在一起:4 * 20 / 0.02 =每秒4000字节容易。

我非常怀疑你是否收到了腐败的数据。链路层向BLE分组添加CRC和2比特的“下一个预期”以确保A)正确接收所有比特并且b)不按顺序发送分组。 TI堆栈和iOS控制链接层,所以我怀疑你是否已经破坏了它。

答案 2 :(得分:0)

iOS 7似乎对BLE传输的吞吐量水平进行了一些优化。在iOS 7设备上再试一次。

答案 3 :(得分:0)

您并没有真正提出问题,但我可以验证您所需的2000字节/秒的限制是可能的。

在此论坛帖子(http://e2e.ti.com/support/wireless_connectivity/f/538/p/353327/1244676.aspx#1244676)上查看所选答案,了解我们是如何运作的。