CYBLE-416045-02 BLE high current consumption in DeepSleep

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
AlSt_3233956
Level 1
Level 1

Hello,

using PSoC Creator 4.3 with PDL v3 = 3.1.2 and PDL v2 = 2.1.0. The BLE Device is configured as Peripheral the connection settings are the following:

/* 8 x 1.25 = 10 ms */

#define MINIMUM_CONNECTION_INTERVAL                      (8u)

/* 8 x 1.25 = 10 ms */

#define MAXIMUM_CONNECTION_INTERVAL                     (8u)

/* 125 connection interval skips */

#define SLAVE_LATENCY                                                    12

/* Supervision timeout of 3 second */

#define SUPERVISION_TIMEOUT                                    (300u)

I use an BLE-Dongle as Central to activate Notifications. If they activated the Peripheral sends Notifications via BLE and than enter DeepSleep Mode. The WatchDogTimer is used to wakeup the System every 2 s. I recognized with an Poweranalyzer that the Powerconsumption is sometimes higher than I expected. It seems like the BLE device is running faulty in the background.

The sequence is:

trigger sensor measurement

enter DeepSleep

WatchDogTimer interrupt // after 25ms

read out sensor

send Notification

enter DeepSleep

WatchDogTimer interrupt // after 2 s

Bad:

pastedImage_1.png

Good:

pastedImage_2.png

Can someone explain what going with the BLE device? Why sometimes it work and why not?

regards,

Alex

0 Likes
1 Solution
lock attach
Attachments are accessible only for community members.

Hello Ganesh,

The right incoming of data I've checked with a CYC8PROTO-Board configured as Central with my own written GUI and with the Cypress BLE-Dongle CY5677 and CySmart 1.3. The devices lay on my table with a distance of 30 cm.

I think the problem is the CM0 Core, configured as controller, should not enter into DeepSleep without checking the BLE-Controller state. I add the following to main loop in CM0:

while(1)

{

    Cy_BLE_ProcessEvents();

    if( Cy_BLE_ControllerLPM( CY_BLE_BLESS_DEEPSLEEP ) == CY_BLE_BLESS_DEEPSLEEP )

    {

          Cy_SysPm_DeepSleep( CY_SYSPM_WAIT_FOR_INTERRUPT );

    }

}

With this the high current consumption seems eliminated. I add an Code example were it is realized like in my Project.

View solution in original post

0 Likes
2 Replies
VenkataD_41
Moderator
Moderator
Moderator
750 replies posted 500 replies posted 250 solutions authored

Hello Alex,

The physical and Datalink layer handles the data transfer between the Server and Client. Due to environmental factors if the Central misses to receive the correct data (checksum is checked) then the server will send the notification again. This might take the additional time you are observing.

Can you keep the Server and Client devices close to each other and check if you are observing the same?

Are you seeing error in data received by the central?

What is the difference in current consumption you have observed?

Thanks

Ganesh

0 Likes
lock attach
Attachments are accessible only for community members.

Hello Ganesh,

The right incoming of data I've checked with a CYC8PROTO-Board configured as Central with my own written GUI and with the Cypress BLE-Dongle CY5677 and CySmart 1.3. The devices lay on my table with a distance of 30 cm.

I think the problem is the CM0 Core, configured as controller, should not enter into DeepSleep without checking the BLE-Controller state. I add the following to main loop in CM0:

while(1)

{

    Cy_BLE_ProcessEvents();

    if( Cy_BLE_ControllerLPM( CY_BLE_BLESS_DEEPSLEEP ) == CY_BLE_BLESS_DEEPSLEEP )

    {

          Cy_SysPm_DeepSleep( CY_SYSPM_WAIT_FOR_INTERRUPT );

    }

}

With this the high current consumption seems eliminated. I add an Code example were it is realized like in my Project.

0 Likes