如何提高BLE应用程序的吞吐量?

时间:2014-10-13 18:45:39

标签: android bluetooth bluetooth-lowenergy core-bluetooth android-bluetooth

我有一个Android客户端,作为一个中心,在我的MAC(外围设备)上有一个应用程序,这个中心连接并发送数据。

此时,在调用writeCharacteristic(..)接收onCharacteristicWrite(..)回调后,我需要等待近100ms。我正在发送字符串。如果我发送较小的字符串,吞吐量很大(可以理解)。当字符串包含大约200个字符并且我发送20个字节的块时,在外围设备上看到整个字符串之前需要将近一秒钟。当我在写入特性之前将写入类型设置为NO_RESPONSE时,我看不到外设上的数据。

连接后,我已完成以下操作以提高吞吐量:

  • 发现服务后停止发现,因为这是一项昂贵的操作
  • 我首先将写入类型设置为默认值 - 当我这样做时,我会看到外设上的数据。但是,有一个显着的延迟。当我将writeType设置为NO_RESPONSE时,我看不到外设上的数据。我在onCharacteristicWrite(..)中也没有逻辑。有时,我看到数据在外设上被截断了。
  • 我已在mac app上将所需的连接延迟设置为低。有没有办法设置一个值(也许是7.5毫秒?)。
  • 当我将写入类型设置为默认值并发送200个字符的字符串时 - 我将字符串拆分为20个字节的块。我现在有10个块要发送。如果我设置特征值并在循环中调用writeCharacteristic(..),我看不到任何数据。当我在执行循环的下一次迭代之前在writeCharacteristic(..)之后添加~100ms延迟时,我会在外设上看到数据。

我看到iOS中心 - iOS外围设备之间的吞吐量大幅增加。我不明白为什么Android中心 - iOS外围设备不应该以同样的方式工作。根据我的理解,Android和iOS使用相同的芯片。

任何原因导致表现如此糟糕?我还能做些什么来提高吞吐量吗?

1 个答案:

答案 0 :(得分:0)

请查看MTU大小。我的经历:

使用iOS中央,中央自动启动MTU大小协商,并使用一些较大的值。我认为它大于200字节。

在我测试的大多数Android设备上,这不会自动启动,但您必须通过应用程序(中央)启动MTU大小协商。如果您不这样做,Android会将您的数据分成20个字节。这对您的吞吐量有很大影响。