Psoc6 BLE Low Power Mode

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

cross mob
lola_1650581
Level 3
Level 3
First like received

Hi All:

    For  Psoc6 ,if the Core M0 Plus and the M4  go into the Deep sleep mode, can the BLESS isr can wake up  the Core M0 Plus and the M4 to the active  mode?

0 Likes
1 Solution
MeenakshiR_71
Employee
Employee
100 likes received 50 likes received 25 likes received

Hello,

One correction to Achim's response, the BLESS interrupt (that triggers every Advertisement/Connection interval) is a DeepSleep interrupt and is capable of waking up the cores from DeepSleep.

That said, it is not a good idea to map a single interrupt to both the cores. Though theoretically it can be mapped to both the cores and wake-up both of them. There will exist a race condition on who clears the interrupt. If you are using the BLE component/PDL, then it maps the BLESS interrupt to the core that implements the controller.

If you need to wake-up the other core, then you can use IPC to notify the other core from the core that is woken up by the BLESS interrupt (controller core). Also note that when you select the "Dual-core architecture" for BLE, then CM0+ (controller) wakes-up CM4 (Host) through the IPC SystemPipe, whenever there is a need to process data on the host side. You can attach a callback to the IPC interrupt and can use that to process the required data.

Let me know if you need any help with that.

Regards,

Meenakshi Sundaram R

View solution in original post

7 Replies
AchimE_41
Employee
Employee
10 sign-ins 5 sign-ins First comment on KBA

Hi,

BLE is stopped and the registers are retained in Deep Sleep Mode, so there should be no BLESS Interrupt generated at all.

For Sleep, this is possible when you enable the isr for both cores.

regards,

Achim

0 Likes
MeenakshiR_71
Employee
Employee
100 likes received 50 likes received 25 likes received

Hello,

One correction to Achim's response, the BLESS interrupt (that triggers every Advertisement/Connection interval) is a DeepSleep interrupt and is capable of waking up the cores from DeepSleep.

That said, it is not a good idea to map a single interrupt to both the cores. Though theoretically it can be mapped to both the cores and wake-up both of them. There will exist a race condition on who clears the interrupt. If you are using the BLE component/PDL, then it maps the BLESS interrupt to the core that implements the controller.

If you need to wake-up the other core, then you can use IPC to notify the other core from the core that is woken up by the BLESS interrupt (controller core). Also note that when you select the "Dual-core architecture" for BLE, then CM0+ (controller) wakes-up CM4 (Host) through the IPC SystemPipe, whenever there is a need to process data on the host side. You can attach a callback to the IPC interrupt and can use that to process the required data.

Let me know if you need any help with that.

Regards,

Meenakshi Sundaram R

Hi,msur:

    If the bless isr can wake up the core from the Deep Sleep  mode .Say that if the a connection has established,between the tow connection event the core of the controller can into the Deep Sleep mode.After the next connection event happen ,a interrupt  of the bless can wake up the core to handle the BLE event .Because the product of customer power by the battery and need to reduce power consumption.

   Do you have any good idea to reduce power consumption?

0 Likes

Yes this is perfectly possible. You can refer to our PSoC 6 Find me example here - CE212736 - PSoC 6 MCU with Bluetooth Low Energy (BLE) Connectivity - Find Me for an example on how to implement it. In the example, CM4 (host) relies on IPC interrupt (System pipe) from CM0+(Controller) to wake it up and Process the BLE Events. And CM0+ relies on the BLESS interrupt (either advertisement or connection) to wake it up from DeepSleep.

Regards,

Meenakshi Sundaram R

0 Likes

Hi msur

    There are some question when reading the code example  CE212736 :

1:You  say that CM4 (host) relies on IPC interrupt (System pipe) from CM0+(Controller) to wake it up and Process the BLE Events. And CM0+ relies on the BLESS interrupt (either advertisement or connection) to wake it up from DeepSleep. However ,I don't find the code about  how to achieve it .Could you show me the place.

2:I still have some doubts about the low power mode handle that if the CM4  and the CM0+ can go into DS mode between the tow advertising events. If the answer is yes,how the BLESS to monitor the CONNECT_REC PDU?

3:How and when the CY_BLE_EVT_STACK_SHUTDOWN_COMPLETE will be happened?

    Could  you help  me please,thanks.

0 Likes

Hello,

To your queries -

1. You, as a user, does not have to do a lot of coding to achieve that. The BLE middleware and the Creator DWR configuration takes care of these. All you need to do is - For CM0+, enable the BLESS interrupt for CM0+ in the "Interrupts" tab of DWR. For CM4, make sure Cy_IPC_SystemSemaInit(), Cy_IPC_SystemPipeInit(), Cy_Flash_Init() are called as part of initialization. Note that the init for CM4 is done as part of SystemInit API (defined in system_psoc63_cm4.c file) and only needs to be called, if you change the initialization code in your project. Once these initialization is complete, the BLE automatically wakes up the CM0+ every advertisement interval (you need to start advertisement as well for this) and when there are requests from peer, CM0+ core wakes up CM4 over IPC.

2. Yes both CM0+ and CM4 can enter DeepSleep. The BLE sub system uses the WCO (LFCLK) and an internal timer (available in DeepSleep) to generate interrupt every advertisement/connection interval. In this interrupt, the BLE sub system processes advertisement and connection requests. The user code is expected to call Cy_BLE_ProcessEvents API to push the connection request (if received) to the host (CM4). This push is supposed to wake up CM4. Typically the CM0+ code involves Cy_BLE_ProcessEvents() followed by Cy_SysPm_DeepSleep - the interrupt wakes up the device from DeepSleep and this code makes sure ProcessEvents is called before entering DeepSleep again.

3. The CY_BLE_EVT_STACK_SHUTDOWN_COMPLETE is received (from the host - CM4 in dual-core mode) when you call Cy_BLE_StackShutdown API. Note that the API is non-blocking and you will need to call Cy_BLE_ProcessEvents till the event is generated to make sure the ShutDown command is processed.

Let me know if this answers or if you have any further queries.

And a heads-up - we are working on a advanced application note, which talks about Designing BLE applications using PSoC 6.

Regards,

Meenakshi Sundaram R

0 Likes
RuKe_4000306
Level 1
Level 1
5 sign-ins First reply posted First question asked

Having some problem getting a simple setup working similar to the above. I want to scan with BLE, and after the scanperiod sleep (BLE connected to CM4 only) I found an example for the PSoC4, but the commands seem to be different as that uses BLE4.2. Anyone that can help me with a simple example that puts CM4 in sleep after a BLE-scan?

0 Likes