Quantcast
Viewing all articles
Browse latest Browse all 262198

CC2540: Reduced throughput - GATT_Notification() returning blePending

Part Number:CC2540

I'm working on an existing product that transmits roughly 1500 bytes/sec over BLE to an iOS device (iOS 11).  We recently added a new sensor which bumps the throughput requirement up to ~2000 bytes/sec.  With the increased throughput, I've started getting blePending (0x16) errors from GATT_Notification().  The Bluetooth sniffer reveals that I'm only sending three 20-byte packets per connection interval (30mS connection interval, slave latency = 0).

In troubleshooting this issue, I created a very simple, bare minimum project that attempts to send four 20-byte packets per connection interval.  It's using 1.4.2.2 version of the BLE stack.  It waits for a notification that a connection interval has ended then runs a loop that sends four 20-byte packets consecutively via GATT_Notification().  It too suffers from the same issue.  Three packets go just fine then the fourth returns a blePending error.  I also tried using GATTServApp_ProcessCharCfg() instead of GATT_Notification() and got the same results.  I also tried setting up a periodic timer and submitting packets at more regular intervals (as opposed to all at once after connection interval event) but got the same results.

After some research, I found this post which has me a little worried:  https://e2e.ti.com/support/wireless_connectivity/bluetooth_low_energy/f/538/t/266578

The TI Employee stated that when going from peripheral to central, only 60 bytes per connection interval can be sent.  I did try reducing my packet size to 16 bytes (as mentioned in that post) instead of 20.  In that case, I was able to successfully send four packets per connection interval but unfortunately the throughput was less than my project called for.  So far I have not found any corroborating information to back up the answer in that post.  I'm also left with the question, if the BLE protocol works in such a way that it doesn't acknowledge the last frame from a slave in a connection event, then shouldn't I run into the same problem with 16-byte packets?

Should I be able to achieve a maximum throughput of ~2667 bytes/sec (four 20-byte packets every 30mS connection interval) with my setup (CC2540 peripheral sending notifications to iPhone central)?  Hopefully it's just something I missed.  Can anyone shed more light on the response that states a max of 60 bytes per connection interval when going from peripheral to central?

Thanks!

- Carson


Viewing all articles
Browse latest Browse all 262198

Trending Articles