我们正在开发一款与 iPad 配合使用的 BLE 传感器外设,需要使用 TI CC2541 BLE 模块和自定义配置文件实现以下 BLE 通知特征(无应答)的数据吞吐量:
每 10 毫秒 1 个 20 字节(GATT 最大标准数据包),或者由于我们似乎限制每个连接间隔 4 个数据包,因此这相当于每 40 毫秒一个连接间隔。所需的吞吐量为每秒 2,000 字节,TI 网站建议将 CC2541 BLE 解决方案用于需要此级别数据吞吐量的多个传感器设备。
BLE 模块的配置文件设置的最小和最大连接间隔分别为 20ms 和 40ms,这应该足够了。 《苹果产品蓝牙配件设计指南》文档表明,我们设置的最小和最大连接间隔(如上所述)是正确的。我们在新的 Mac Mini / Mac Book 上使用适用于 iOS 6 的最新 iPad 和 Apple 工具。
通过 iPad 上的简单测试程序,我们可以使链接正常工作,以 20 毫秒的间隔向 BLE 外设发送 20 字节数据包,但是一旦我们根据需要将其降低到 10 毫秒,我们就会开始丢失数据包或收到损坏的数据包,我们有FIFO 空中断关闭,以便我们可以更快地处理向 BLE 模块 FIFO 的发送,并且我们使用最大波特率 230400 将 20 字节数据包从 micro 发送到 BLE TX FIFO。
我们意识到我们正处于 BLE 传输限制和可能性的顶端。谁能建议是否有解决方案可以使用 TI CC2541 BLE 芯片/模块和最新的 iPad 实现每秒 2000 字节的吞吐量?
我们成功地将 TI 2540(BLE 堆栈版本 1.3.2)与 iPad/iPod/iPhone(iOS 6.x 和 7.x)结合使用。目前,我们发送 75 个通知,每秒 20 字节 => 1500 字节/秒。但我尝试过发送 125 条通知,效果也很好。
当然,发送的数据越多,丢失数据的可能性就越大,例如,重新发送 HACK 消息的时间就越短。
我经历过 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
是的,它不符合苹果的指导方针。但我相信在我们的情况下他们可以放松。
更新:我还尝试使用 iDevice 作为外围设备,即两个 iDevice 之间的 BTLE。这里我每秒发送 150 条消息,没有任何问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)