Support multiple connections (5+) on central

Hi,

I am working on a project where we need to connect to multiple peripherals which also include mobile devices. (up-to 10) on BLE central.

We need to measure the distance with individual devices in regular intervals.

We are referring to nrf_dm example to do so and we are currently observing connection issue on the central.

When we try to connect with more than 2/3 devices central is not scanning anymore, we confirm other peripherals are advertising and yet the central did not scanned the device.

Below is our prj.conf file 

CONFIG_BT=y
CONFIG_BT_CENTRAL=y
CONFIG_BT_CTLR_PHY_CODED=y
# CONFIG_BT_PHY_UPDATE=y
CONFIG_BT_USER_PHY_UPDATE=y
CONFIG_BT_EXT_ADV=y
CONFIG_BT_CTLR_ADV_EXT=y

CONFIG_BT_SCAN=y
CONFIG_BT_SCAN_FILTER_ENABLE=n
CONFIG_BT_MAX_CONN=6

# Allow to read RSSI for the connected peripheral

CONFIG_BT_CTLR_CONN_RSSI=y
CONFIG_NEWLIB_LIBC=y
CONFIG_NEWLIB_LIBC_MIN_REQUIRED_HEAP_SIZE=1024

# Use internal clock source
CONFIG_CLOCK_CONTROL_NRF=y
CONFIG_CLOCK_CONTROL=y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y
CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y

# PERIPHERAL
CONFIG_BT_EXT_ADV=y
CONFIG_BT_PERIPHERAL=y
CONFIG_BT_PER_ADV=y
CONFIG_SETTINGS=y
CONFIG_BT_SETTINGS=y

# Distance Measurement
CONFIG_DM_MODULE=y
CONFIG_MPSL=y
CONFIG_MPSL_TIMESLOT_SESSION_COUNT=3
CONFIG_MPSL_WORK_STACK_SIZE=8192

CONFIG_DM_GPIO_DEBUG=y
CONFIG_NCS_SAMPLES_DEFAULTS=y

CONFIG_BT_DEVICE_NAME="Notify"
CONFIG_DM_INITIATOR_DELAY_US=2000
CONFIG_DM_MIN_TIME_BETWEEN_TIMESLOTS_US=10000
CONFIG_DM_TIMESLOT_QUEUE_COUNT_SAME_PEER=3

CONFIG_BT_GATT_CACHING=n
CONFIG_SETTINGS_NONE=y

CONFIG_BT_GATT_CLIENT=y
CONFIG_BT_DEBUG_LOG=y
CONFIG_LOG_MAX_LEVEL=4
CONFIG_PRINTK=n
CONFIG_DM_HIGH_PRECISION_CALC=y

# Enable PWM buzzer module
CONFIG_PWM=y
CONFIG_NRFX_GPIOTE0=y
CONFIG_NRFX_PDM=y
CONFIG_NRFX_PWM0=y
CONFIG_NRFX_PWM1=y
CONFIG_NRFX_PWM2=y
CONFIG_DEBUG=y
CONFIG_DEBUG_OPTIMIZATIONS=y
CONFIG_DEBUG_THREAD_INFO=y

# Enable ADC
CONFIG_ADC=y

# Enable NVS
CONFIG_NVS=y
CONFIG_FLASH=y
CONFIG_FLASH_PAGE_LAYOUT=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_DM_RANGING_OFFSET_US=100000
CONFIG_BT_PERIPHERAL_PREF_TIMEOUT=50
CONFIG_BT_PERIPHERAL_PREF_MIN_INT=120
CONFIG_BT_PERIPHERAL_PREF_MAX_INT=160
CONFIG_BT_CTLR_TX_PWR_PLUS_8=y

CONFIG_REBOOT=y

# Below configurations to enable DFU
# Enable mcumgr.

CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU=y
CONFIG_NCS_SAMPLE_MCUMGR_BT_OTA_DFU_SPEEDUP=y
CONFIG_BOOTLOADER_MCUBOOT=y
CONFIG_SIGN_IMAGES=y
CONFIG_SECURE_BOOT=y
CONFIG_SB_SIGNING_KEY_FILE="priv_key.pem"
CONFIG_BT_L2CAP_TX_MTU=252
CONFIG_BT_BUF_ACL_RX_SIZE=256
CONFIG_PPI_TRACE=y

# Some command handlers require a large stack.
CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=4096

# power management
CONFIG_UART_ASYNC_API=y
CONFIG_BOARD_ENABLE_DCDC=y
CONFIG_PM_DEVICE=y

We also tried restart scanning on dm intervals and no use.

We are using nrf52840 device and SDK v2.6.0

Please guide us on any config we are missing or if our method is wrong.

Thank you in advance.

Parents
  • Let me share some logs for further information.

    GATT Write...
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    GATT Write Successful
    
    write resp cb
    0: Dev seed: 0
    GATT Write Successful
    
    write resp cb
    0: Dev seed: 0
    [0]: RSSI: -34, Average: -6
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [0]: RSSI: -32, Average: -13
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [0]: RSSI: -32, Average: -19
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [0]: RSSI: -31, Average: -25
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [0]: RSSI: -32, Average: -32
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [0]: RSSI: -33, Average: -32
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [0]: RSSI: -33, Average: -32
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [0]: RSSI: -32, Average: -32
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [Device]: D5:15:8F:AF:80:B1 (random) [AD]: 7 data_len 16
    [Device]: D5:15:8F:AF:80:B1 (random) [AD]: 7 data_len 16
    [0]: RSSI: -33, Average: -32
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    
    GATT Write...
    GATT Write Successful
    
    write resp cb
    [Device]: E8:E5:B7:3C:88:53 (random) [AD]: 7 data_len 16
    [0]: RSSI: -33, Average: -32
    
    GATT Write...
    GATT Write Successful
    
    write resp cb
    1: Dev seed: 0
    [0]: RSSI: -31, Average: -32
    [1]: RSSI: -50, Average: -10
    [0]: RSSI: -33, Average: -32
    [1]: RSSI: -31, Average: -29
    [0]: RSSI: -32, Average: -32
    [1]: RSSI: -32, Average: -35
    [0]: RSSI: -33, Average: -32
    [1]: RSSI: -31, Average: -32
    [0]: RSSI: -33, Average: -32
    [1]: RSSI: -33, Average: -32
    [0]: RSSI: -35, Average: -33
    [1]: RSSI: -32, Average: -31
    [0]: RSSI: -33, Average: -33
    [1]: RSSI: -33, Average: -32
    [0]: RSSI: -33, Average: -33
    [1]: RSSI: -33, Average: -32
    [0]: RSSI: -34, Average: -33
    [1]: RSSI: -32, Average: -32
    [0]: RSSI: -33, Average: -33
    [1]: RSSI: -33, Average: -32
    [0]: RSSI: -33, Average: -33
    [1]: RSSI: -33, Average: -32
    [0]: RSSI: -32, Average: -33
    [1]: RSSI: -33, Average: -32
    [0]: RSSI: -33, Average: -33
    [1]: RSSI: -33, Average: -32
    [0]: RSSI: -32, Average: -32
    [1]: RSSI: -32, Average: -32

    As you can observe from the logs, the device is scanning for peripherals and when any new device is scanned, we are printing as [Device]
    As soon as the 2nd device connected, the scanning stopped.

    We do not know what is happening or why it happened. We cannot debug as when we try to debug, the device automatically disconnects and restart/halt.

  • Hi, 

    Could you try to enable the CONFIG_DM_TIMESLOT_RESCHEDULE option? The device will try to range the same peer again if the previous ranging was successful.

    -Amanda H.

  • Hi Amanda,

    Thank you for the response, I see the ranging is not the issue. We get the DM and RSSI for the connected devices at regular intervals.

    Whereas we are not able to connect any new device or reconnect paired devices. As we observed the central is not scanning for any devices at all after 2/3 devices are connected.

    Let me also try your solution and get back to you.

Reply
  • Hi Amanda,

    Thank you for the response, I see the ranging is not the issue. We get the DM and RSSI for the connected devices at regular intervals.

    Whereas we are not able to connect any new device or reconnect paired devices. As we observed the central is not scanning for any devices at all after 2/3 devices are connected.

    Let me also try your solution and get back to you.

Children
No Data
Related