2

when I send data from my perifpheral ( CC2541 ) to my GalaxyS3 ( Android 4.3 ) I see that regardless of the connection interval that I set in the peripheral ( 7.5msec ) I get packets sent at intervals of ~100msec.

That is really poor data rate.

Any advice of how I can speed things up?

( I already turned off the WiFi )

Thanks

  • 1
    Which of the many mechanisms are you using to send data? We are going to need to know a lot more about about the details to help. If you have the CC254x kit though, you may want to use the packet scanner in it to evaluate any non-interactive functionality of your your peripheral (such as advertising) independent of the Android end of things. – Chris Stratton Feb 20 '14 at 18:56
  • First, thansks for the prompt answer. we used the keyfob project as reference, as I understand, we use the GATT Profile API by updating its characteristics ( 20Bytes~) , we just started, i dont mind changing anything . can you say what data rate i could expect with the S3 BLE in Android 4.3? . we send about 1K data, and it takes alot of time. when I use Nexus5 with Android 4.4 I see the packages are sent with 25msec delay. I suspect the specific OS is an issue ( android 4.3) . sorry for the short of information, I will try to get more into details. possibly you can guide me on the best way – user3333648 Feb 20 '14 at 19:12

2 Answers2

2

As you might already know, there's no way to configure the connection interval from Android BLE API, thus, the only way left is to set it from the peripheral device. Your peripheral should negotiate the best connection interval for it depending on the device bluetooth hardware and its bluetooth stack.

According to Bluetooth Low Energy specs, the connection interval determines the time between the start of the data packet exchange sequence called connection events, and it can be from 7.5 ms to 4 seconds. This value is closely linked with the power consumption, being higher the consumption when the value is smaller.

The peripheral should negotiate the connection interval proposing a minimum and maximum values for it. If the device rejects that connection interval, your peripheral should try another value until it reaches the optimum one for the link.

The case of the Samsung Galaxy S3 is one of those who need a higher connection interval. In one of my tests, I achieved to negotiate a connection interval of ~20ms in a Nexus 5 device but when the same test was performed into the S3, it rejected those small values and set one of ~48ms.

For example in iOS, in their Bluetooth design guidelines document they suggest to use a minimum connection interval value of 20ms. So as I said before, the work is in hands of the peripheral trying to get the best value.

GoRoS
  • 5,183
  • 2
  • 43
  • 66
0

As per my knowledge, you have to negotiate the connection interval(connInterval) using link layer control packet LL_CONNECTION_UPDATE_REQ. As per the specs, the connection interval is limited between 7.5ms to 4000ms.

Vinodh
  • 1,069
  • 2
  • 10
  • 22