I have come across a BLE state that is somewhere between Advertising and Connected that I can not find info on.
The problem is that this state appears for long periods (usually 60 seconds) only irregularly.
During this mystery state my battery current goes up to 8ma and stays there until a working connection is finally made 60 seconds later. Using deep sleep I am able to advertise at about 300ua and be connected at about 700ua, so this is a major concern for its power usage.
My biggest concern though is that I need to know in code when my device is in this state so I can inform my user somehow that he needs to wait 60 seconds and not get angry!
To debug this I have limited debug options (my board will still not run in Debug mode, even with a miniprog3 at a lower clock). I been able to capture my battery current profile (images attached) during these 60 seconds which does give me some clues.
First, some connection with my iPhone has been made, since I get a periodic current spike at 30ms intervals. This interval is not what my BLE component requests, it is Apples default connect rate. If you look at the zoomed in image you can see what looks like it is some sort of 'BLE event' happening every 30ms. From the stuck images you can also see why the average current is 8ma, the device in not going to deep sleep between events as it does in the third image when the working connection is finally made after 60 seconds at 50ms rate which I ask for in code after connection is made.
Anyone have any ideas what this mystery state is and why it draws so much current? It seems to consistently connect properly after 60 seconds whenever it does get 'stuck' though.
I have seen an 8 mA state. When I force a disconnect in my code, and the device goes back to advertising, the state it ends up in consumes 8mA which is higher than a normal advertising state which happens after initialization.
I have not yet investigated this. On the Cypress platform it seems much of the power saving functionality is left to user code. On other platforms the stack deals with it and little or no user code is needed.