Skip to main content
Davide Dalfra
Associate III
May 9, 2025
Question

STM32WB09KE PAwR Setting Maximum Connection Interval

  • May 9, 2025
  • 2 replies
  • 526 views

Hello Folks,

 

I started playing with STM32WB09 after some difficulties related to entering in bootloader mode (thanks again to the community) and i wanted to try setting the maximum SCAN_INTERVAL + maximum CONNECTION_INTERVAL to see the best low power footprint i can obtain.

All the setting i'm playing with are in app.conf.h and are basically those:

#define PAWR_NUM_SUBEVENTS 4
#define PAWR_SUBEVENT_INTERVAL_MS 30
#define PAWR_RESPONSE_SLOT_DELAY_MS 2.5
#define PAWR_RESPONSE_SLOT_SPACING_US 500
#define PAWR_NUM_RESPONSE_SLOTS 8

#define PAWR_INTERVAL_MS (PAWR_SUBEVENT_INTERVAL_MS * PAWR_NUM_SUBEVENTS + 200)
 
#define SCAN_INTERVAL_MS 2000
#define SCAN_WINDOW_MS 100
#define CONNECTION_INTERVAL_MS 200
#define SUPERVISION_TIMEOUT_MS 500

 

Strating from the Broadcaster example, i'm able to set the maximum "SCAN_INTERVAL_MS" up to 32000ms (32s).
I can see that from the power consumption footprint the system wake up every 32s scanning for observers.

However i'm getting a strange behavior while changing the CONNECTION_INTERVAL_MS.
The maximum working value i obtained experimentally is 200 or lower. 

The call where this defines is used, to configure the lower hardware level is in app.ble.c

status = aci_gap_set_connection_configuration(LE_1M_PHY_BIT,
 (CONNECTION_INTERVAL_MS*100)/125, (CONNECTION_INTERVAL_MS*100)/125,
 0u,
 SUPERVISION_TIMEOUT_MS/10,
 2, 2); 

 if (status == BLE_STATUS_SUCCESS)
 {
 APP_DBG_MSG("==>> aci_gap_set_connection_configuration Success , result: 0x%02x\n", status);
 }
 else
 {
 APP_DBG_MSG("==>> aci_gap_set_connection_configuration Failed , result: 0x%02x\n", status);
 Error_Handler();
 } 

As per AN6142 the maximum value configurable on this call, for "Connection_Interval_Min" and "Connection_Interval_Max" is 0x0C80  (corresponding to 4s).

DavideDalfra_0-1746808467748.png

Even by setting raw values on the aci_gap_set_connection_configurationnothing changes as i always get correct return values (0x00) ;however the next call which is to aci_gap_start_procedure failed with return code 0x12.

status = aci_gap_start_procedure(GAP_AUTO_CONNECTION_ESTABLISHMENT_PROC, LE_1M_PHY_BIT, 0, 0);
 if (status != BLE_STATUS_SUCCESS)
 {
 APP_DBG_MSG("aci_gap_start_procedure - fail, result: 0x%02X\n", status);
 Error_Handler();
 }
 else
 {
 APP_DBG_MSG("==>> aci_gap_start_procedure (auto connection) - Success\n");
 } 

UART Debug is as follows:

SYSTEM RESET!!!!!!!!!<LF>
<LF>
 Success: aci_hal_set_tx_power_level command<LF>
 Success: aci_gatt_srv_profile_init command<LF>
 Success: aci_gap_init command<LF>
 Static Random Bluetooth Address: e5:f9:53:f8:b3:22<LF>
 Success: Gap_profile_set_dev_name - Device Name<LF>
 Success: Gap_profile_set_appearance - Appearance<LF>
 Success: aci_gap_set_io_capability command<LF>
 Success: aci_gap_set_security_requirements command<LF>
 Success: aci_gap_configure_filter_accept_and_resolving_list command<LF>
 Success: aci_gap_set_le_event_mask command<LF>
==>> End BLE_Init function<LF>
==>> Success: aci_gap_set_advertising_configuration<LF>
==>> Success: hci_le_set_periodic_advertising_parameters_v2<LF>
==>> Success: hci_le_set_periodic_advertising_enable<LF>
==>> Success: hci_le_set_extended_advertising_enable<LF>
==>> aci_gap_add_devices_to_filter_accept_and_resolving_list - Success<LF>
==>> aci_gap_set_scan_configuration - Success<LF>
==>> aci_gap_set_connection_configuration Success , result: 0x00<LF>
aci_gap_start_procedure - fail, result: 0x12<LF>
<LF>
<LF>
SYSTEM RESET!!!!!!!!!<LF>
<LF>
 Success: aci_hal_set_tx_power_level command<LF>
 Success: aci_gatt_srv_profile_init command<LF>
 Success: aci_gap_init command<LF>
 Static Random Bluetooth Address: e5:f9:53:f8:b3:22<LF>
 Success: Gap_profile_set_dev_name - Device Name<LF>
 Success: Gap_profile_set_appearance - Appearance<LF>
 Success: aci_gap_set_io_capability command<LF>
 Success: aci_gap_set_security_requirements command<LF>
 Success: aci_gap_configure_filter_accept_and_resolving_list command<LF>
 Success: aci_gap_set_le_event_mask command<LF>
==>> End BLE_Init function<LF>
==>> Success: aci_gap_set_advertising_configuration<LF>
==>> Success: hci_le_set_periodic_advertising_parameters_v2<LF>
==>> Success: hci_le_set_periodic_advertising_enable<LF>
==>> Success: hci_le_set_extended_advertising_enable<LF>
==>> aci_gap_add_devices_to_filter_accept_and_resolving_list - Success<LF>
==>> aci_gap_set_scan_configuration - Success<LF>
==>> aci_gap_set_connection_configuration Success , result: 0x00<LF>
aci_gap_start_procedure - fail, result: 0x12<LF>
<LF>
<LF>
SYSTEM RESET!!!!!!!!!<LF>



Anyone already encountered similar problem?

 

Regards

Davide

 



2 replies

STTwo-32
Technical Moderator
June 20, 2025

Hello @Davide Dalfra 

This behavior has been escalated internally (under internal ticket number 212654) and i will be back to you ASAP.

Best Regards.

STTwo-32 

Davide Dalfra
Associate III
July 6, 2025

Hello,

 

Thanks. Any news on that?

 

 

D.

STTwo-32
Technical Moderator
August 1, 2025

Hello @Davide Dalfra 

If connection interval is changed, supervision timeout may also need to be changed. This is the description of Supervision_Timeout: The Supervision_Timeout in milliseconds shall be larger than (1 + Max_Latency) × Connection_Interval_Max × 2, where Connection_Interval_Max is given in milliseconds.

So, to be able to attend the maximum level of the Connection_Interval_Max, you need to set the Supervision_Timeout to the maximum value as indicated on the chapter 2.4.26 of the AN6182.

 

Best Regards.

STTwo-32