cancel
Showing results for 
Search instead for 
Did you mean: 

STM32WB BLE MESH AND STOP MODE...HOW TO STOP RF ACTIVITY ?

Jonny
Associate III

Hi All, 

I'm currently working on a project where I will have a proxy/Friend Node that will talk with a Low power Node.

The proxy node should be able to go on standby when requested and in the condition I would like to obtain the optimal current consumption.

The Problem I'm facing right now all related on how to enter the STOP MODE properly and how to wake up everything correctly.

Looking at the examples I implemented my own version of the proxy example using RTOS.

Then I tried to implement a lot of different way to enter standby mode but each of this one had a problem.

The Only way I can keep my network working is simply not doing anything to the RF activity but in that condition the consumption are pretty high 

You can find below all the procedure I tried to implement 

1) Using the BLE shutdown/resume function 

I tried using the function available on the mesh library; before going on standby I call 

BLEMesh_Shutdown

and when I wake up from standby (after re-Initializing clock and all my GPIO,ADC etc.) I call the function 

BLEMesh_Resume()

RESULT: The BLEMesh_Resume() return correctly but I can't see any activity on the HCI...

2) Stopping any RF activity on CPU2

I implemented these two functions before entering STOP MODE

void APP_BLE_Stop(void)
{
 
	//set_BLE_Status(BLE_DISCONNECTED); //was here for old management
	/* BLE STOP Procedure */
	/* Reset the BLE stack */
	bleret = aci_hal_stack_reset();
	if (bleret != BLE_STATUS_SUCCESS)
	{
		Error_Handler();
	}
}
 
 
void deactivateRadio()
{
 
	SHCI_CmdStatus_t sret = SHCI_Success;
	set_BLE_Status(BLE_DISCONNECTED);
 
 
 
	/* Wait till C2DS set */
	while(LL_PWR_IsActiveFlag_C2DS() == 0);
 
	/* Re-init CPU2 */
	sret = SHCI_C2_Reinit();
	if (sret != SHCI_Success)
	{
	Error_Handler();
	}
 
	/* Wait till C2DS set */
	while(LL_PWR_IsActiveFlag_C2DS() == 0);
 
}
 

RESULT: When I Initialize everything as first start, the function BLEMesh_Init() fails

BLEMesh_Init()

Anyone has tried to implement a proper STOP MODE using BLE MESH ?

Best Regards

Jonny

1 REPLY 1
EMECH
ST Employee

Hi,

By definition Proxy, Relay and Friend Node in a MESH network should have a duty cycle close 100 % to ensure the MESH network reliability and to avoid missing any incoming MESH messages.

Nevertheless, to save power, Low Power Node is dedicated.

A low power node is a node that has the ability to operate within a mesh network at significantly reduced reception duty cycles. In general, they are nodes that need to preserve energy as much as possible. Usually, they are nodes that spend most of their time transmitting data, that is, they are senders (e.g. a temperature sensor that sends data periodically or above a threshold), although occasionally can receive messages. In order to enable a LPN to reduce its receiver duty cycle and

save energy, it needs a friendship relationship to another node, called “Friend Node�?. The friend node, supporting the friend feature, provides assistance to a LPN in reception, by storing and forwarding messages destined to that node. Forwarding by the friend node is made on demand, when the LPN polls the friend for messages awaiting delivery.

Best regards.