10

我们正在开发与 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 上的一个简单测试程序,我们可以让链路正常工作,以 20 毫秒的间隔向 BLE 外设发送 20 字节数据包,但是一旦我们根据需要将其降低到 10 毫秒,我们就会开始丢失数据包或收到损坏的数据包,我们有关闭 FIFO 空中断,以便我们可以更快地处理发送到 BLE 模块 FIFO,并且我们使用 230400 的最大波特率将 20 字节数据包从 micro 发送到 BLE TX FIFO。

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

4

5 回答 5

10

我们成功地将 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 作为外围设备,即两个 iDevice 之间的 BTLE。在这里,我每秒发送 150 条消息,没有任何问题。

于 2013-11-18T14:23:45.933 回答
2

您是否发送“无响应写入”命令?您可以通过这种方式为每个连接事件发送 4 个数据包。使用之前的 20 毫秒连接间隔,您将每 0.02 秒发送 4 个 20 字节的数据包。综上所述:4*20/0.02 = 4000 字节每秒很容易。

我高度怀疑您是否收到了损坏的数据。链路层向 BLE 数据包添加 CRC 和 2 位“下一个预期”,以确保 A) 正确接收所有位和 b) 数据包没有乱序发送。TI 堆栈和 iOS 控制链接层,所以我怀疑你搞砸了。

于 2014-07-03T19:39:18.340 回答
2

以下是我们在使用 BLE 在 iPhone 上进行 RnD 期间发现的吞吐量方面的一些观察。以下数据基于带响应的写入。

  1. iPhone 8 (BLE 5.0) 作为 Central 和 Linux 桌面(带有 BLE 加密狗 4.0 的 Ubuntu 16.04):MTU = 2048:吞吐量 - 2.5 KiloBytes per sec
  2. iPhone 8 (BLE 5.0) 作为中央和 Android 操作系统,BLE 版本 4.2 作为外围设备(小米 Mi A1):MTU = 180:吞吐量 -每秒 2.5 千字节
  3. iPhone 8 (BLE 5.0) 作为中央处理器和 iPhone 7 plus (BLE 4.2) 作为外围设备:MTU = 512:吞吐量 -每秒 7.1 千字节
  4. iPhone 8 (BLE 5.0) 作为中央和三星 S8 (BLE 5.0) 作为外围设备:三星 S8 无法作为外围设备工作
  5. iPhone 8 (BLE 5.0) 作为中央处理器和 iPhone 8 plus (BLE 5.0) 作为外围设备:MTU = 512:吞吐量 - 15.5 KiloBytes per sec

如您所见,随着 MTU 值的增加,我们获得了最大吞吐量。但是我们不能增加到任何极限。上述 MTU 值是根据给定配置允许的默认最大 MTU 值。[MTU - 最大传输单位。即一个写请求中可以发送的最大字节数]

欢迎对以上数据发表意见。

于 2018-02-26T07:17:14.567 回答
0

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

于 2013-09-25T00:42:16.357 回答
0

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

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

于 2014-10-15T16:55:30.563 回答