nRF52840 USB Device Freezes Due to BT_RX_WQ Thread Blocking Execution

I'm working on a project involving a USB dongle based on the nRF52840 SDK-2.9.1, which needs to communicate with a sensor (also an nRF52840) and transmit data via USB to PC software. Everything seemed to work fine at first, but I noticed that sometimes the communication freezes.

Initially, I thought the issue was on the sensor side, but I later discovered that the problem lies within the USB dongle. When the data transmission gets stuck, the device starts running in "slow motion"—I can tell because the LED fade effect becomes so slow that it looks frozen (but it's not actually stuck).

At this point, I configured the project to use Segger SystemView, and after several attempts (SystemView often freezes), I finally managed to capture the moment when the issue occurs. Apparently, there's a thread I didn’t create that runs for about 400 milliseconds without yielding, effectively blocking the others. The thread is named BT_RX_WQ and seems to belong to the Bluetooth stack.

Can anyone help me?

Here is the SystemView trace images and my current configuration.

################################################
### SYSTEM CONFIGURATION #######################
################################################
CONFIG_LOG=y
CONFIG_LOG_MAX_LEVEL=2
CONFIG_USE_SEGGER_RTT=y
CONFIG_RTT_CONSOLE=y
CONFIG_HEAP_MEM_POOL_SIZE=4096
CONFIG_FPU=y
CONFIG_RING_BUFFER=y
CONFIG_ZCBOR=y
CONFIG_ZCBOR_STOP_ON_ERROR=y
# CONFIG_DISABLE_FLASH_PATCH=y
CONFIG_EVENTS=y
CONFIG_KERNEL_BIN_NAME="cruise_dongle"
CONFIG_THREAD_NAME=y

CONFIG_TRACING=y
CONFIG_SEGGER_SYSTEMVIEW=y
CONFIG_TRACING_CONDVAR=n
CONFIG_TRACING_CTF_TIMESTAMP=y
CONFIG_TRACING_EVENT=y
CONFIG_TRACING_FIFO=n
CONFIG_TRACING_HEAP=n
CONFIG_TRACING_ISR=n
CONFIG_TRACING_LIFO=n
CONFIG_TRACING_MAILBOX=n
CONFIG_TRACING_MEMORY_SLAB=n
CONFIG_TRACING_MESSAGE_QUEUE=n
CONFIG_TRACING_MUTEX=y
CONFIG_TRACING_PIPE=n
CONFIG_TRACING_PM=n
CONFIG_TRACING_POLLING=n
CONFIG_TRACING_QUEUE=n
CONFIG_TRACING_SEMAPHORE=y
CONFIG_TRACING_STACK=y
CONFIG_TRACING_SYSCALL=n
CONFIG_TRACING_THREAD=y
CONFIG_TRACING_TIMER=n
CONFIG_TRACING_WORK=n


################################################
### SOC'S PERIPHERALS CONFIGURATION ############
################################################
CONFIG_GPIO=y
CONFIG_PWM=y
CONFIG_LED=y
CONFIG_SERIAL=y
CONFIG_UART_ASYNC_API=y
CONFIG_UART_0_NRF_HW_ASYNC=y
CONFIG_UART_0_NRF_HW_ASYNC_TIMER=1

################################################
### BLE CONFIGURATION ##########################
################################################
CONFIG_BT_MAX_CONN=8
CONFIG_BT=y
CONFIG_BT_CENTRAL=y
CONFIG_BT_SMP=y
CONFIG_BT_DFU_SMP=y
CONFIG_BT_GATT_CLIENT=y
CONFIG_BT_GATT_DM=y
CONFIG_BT_SCAN=y
CONFIG_BT_SCAN_FILTER_ENABLE=y
CONFIG_BT_SCAN_CONN_ATTEMPTS_FILTER=y
CONFIG_BT_SCAN_CONN_ATTEMPTS_FILTER_LEN=6
CONFIG_BT_SCAN_CONN_ATTEMPTS_COUNT=2
CONFIG_BT_SCAN_UUID_CNT=3
CONFIG_BT_ATT_PREPARE_COUNT=2
# CONFIG_BT_L2CAP_TX_BUF_COUNT=10
CONFIG_BT_L2CAP_TX_MTU=498
# CONFIG_BT_L2CAP_DYNAMIC_CHANNEL=y
CONFIG_BT_CONN_TX_MAX=10
CONFIG_BT_CTLR_DATA_LENGTH_MAX=251
CONFIG_BT_CTLR_PHY_2M=y
CONFIG_BT_CTLR_RX_BUFFERS=10
CONFIG_BT_CTLR_SDC_MAX_CONN_EVENT_LEN_DEFAULT=4000000
CONFIG_BT_BUF_ACL_RX_COUNT=10
CONFIG_BT_BUF_ACL_RX_SIZE=502
CONFIG_BT_BUF_ACL_TX_COUNT=10
CONFIG_BT_BUF_ACL_TX_SIZE=502

# CONFIG_BT_BUF_EVT_RX_COUNT=20
# CONFIG_BT_BUF_EVT_RX_SIZE=255
# CONFIG_BT_BUF_CMD_TX_COUNT=20
# CONFIG_BT_BUF_CMD_TX_SIZE=255
# CONFIG_BT_RX_STACK_SIZE=2048
# CONFIG_BT_HCI_TX_STACK_SIZE=2048

CONFIG_BT_USER_DATA_LEN_UPDATE=y
CONFIG_BT_USER_PHY_UPDATE=y

################################################
### NVS MEMORY CONFIGURATION ###################
################################################
CONFIG_NVS=y

################################################
### FLASH MEMORY SUPPORT CONFIGURATION #########
################################################
CONFIG_FLASH=y
CONFIG_MPU_ALLOW_FLASH_WRITE=y
CONFIG_FLASH_PAGE_LAYOUT=y

Related