Cannot establish BLE connection with RSL10 when using BLE standby mode

Dear community,

I use the RSL10 as BLE peripheral, with code based on the peripheral_server_standby example. I use an Android phone running nRF Connect Android as central device. When I run the RSL10 in run mode, the Android phone can successfully establish a connection with the RSL10. However, when I enable the BLE_Power_Mode_Enter(&standby_mode_env, POWER_MODE_STANDBY); command, it cannot establish a connection. I see in the log that the RSL10 correctly receives the GAPC_CONNECTION_REQ_IND message, so the connection request is successfully received. I used the nRF sniffer to capture the BLE packets in the air. In attachment, you can find the Wireshark capture files for both run mode and standby mode. It looks like the master (android phone) sends multiple LL_FEATURE_REQ messages, but the slave (RSL10) does not respond to the request with a LL_FEATURE_RSP message.

I thought initially that it was due to a timing error (the baseband timer does not wake up in time). However, the strange thing is that in standby mode, the advertisements are correctly sent by the RSL10. So only when a connection is established it does not work. In that case, after a time-out, the RSL10 returns to advertisement mode and it works again correctly.

Further, I realized that for the standby mode, if I use BLE_Sleep_MaxDuration_Set(1); before BLE_Power_Mode_Enter(&standby_mode_env, POWER_MODE_STANDBY);, it works as expected and I get the same Wireshark log as in run mode. However, when I use a value larger than 1 in BLE_Sleep_MaxDuration_Set(1);, it doesn’t work anymore.

Do you have any clue what could be the reason for this problem?

I used:
CMSIS PACK RSL10.3.5.285 (also tested with RSL10.3.6.465 but doesn’t work either)

capture_log_standby_mode.pcapng (5.4 KB)
capture_log_run_mode.pcapng (30.6 KB)

We have verified this peripheral_server_standby project for Pack3.5.285. There is no issue.
Add device name “standby” in ble_std.h for device scan and find the device. (default has no name).


Regarding the question of BLE_Sleep_MaxDuration_Set(value).

a. an application can use the BLE_Sleep_MaxDuration_Set() API function to set the sleep duration time before calling the BLE_Power_Mode_Enter() function if no BLE activity or Kernel timer is ongoing…

b. The unit step is 625us. for example BLE_Sleep_MaxDuration_Set(1). The max sleep time is 625us.
I don’t know why have you used this for sleep time.
The default maximum sleep duration has increased to 30 s.
Please refer to our RSL10_cmsis_pack_release_notes.pdf. for more explanation on this function.

Thank you for using our community forum!