Host side:
Hardware: Torizon Verdin iMX8MP
System: custom Yocto project distribution
Linux kernel: 6.6.54
BlueZ version: 5.79
Controller side:
Hardware: custom nRF52 840 board
Firmware: HCI uart sample
nRF Connect SDK version: 2.5.1
UART baudrate: 460800
prj.conf
CONFIG_CONSOLE=n CONFIG_STDOUT_CONSOLE=n CONFIG_UART_CONSOLE=n CONFIG_GPIO=y CONFIG_SERIAL=y CONFIG_UART_INTERRUPT_DRIVEN=y CONFIG_BT=y CONFIG_BT_HCI_RAW=y CONFIG_BT_HCI_RAW_H4=y CONFIG_BT_HCI_RAW_H4_ENABLE=y CONFIG_BT_BUF_ACL_RX_SIZE=255 CONFIG_BT_BUF_CMD_TX_SIZE=255 CONFIG_BT_BUF_EVT_DISCARDABLE_SIZE=255 CONFIG_BT_CTLR_ASSERT_HANDLER=y CONFIG_BT_MAX_CONN=16 CONFIG_BT_TINYCRYPT_ECC=n CONFIG_BT_CTLR_DTM_HCI=y CONFIG_SYSTEM_WORKQUEUE_STACK_SIZE=512 # Workaround: Unable to allocate command buffer when using K_NO_WAIT since # Host number of completed commands does not follow normal flow control. CONFIG_BT_BUF_CMD_TX_COUNT=10 CONFIG_CLOCK_CONTROL_NRF_K32SRC_500PPM=y CONFIG_CLOCK_CONTROL_NRF_K32SRC_RC=y CONFIG_BT_SMP=y
devicetree.overlay
/* SPDX-License-Identifier: Apache-2.0 */
&uart0 {
compatible = "nordic,nrf-uart";
current-speed = <460800>;
status = "okay";
hw-flow-control;
};
&uart0_default {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 23)>, <NRF_PSEL(UART_RTS, 0, 20)>;
};
group2 {
psels = <NRF_PSEL(UART_RX, 0, 22)>, <NRF_PSEL(UART_CTS, 0, 21)>;
};
};
&uart0_sleep {
group1 {
psels = <NRF_PSEL(UART_TX, 0, 23)>,
<NRF_PSEL(UART_RX, 0, 22)>,
<NRF_PSEL(UART_RTS, 0, 20)>,
<NRF_PSEL(UART_CTS, 0, 21)>;
};
};
&qspi {
status = "disabled";
};
/ {
nrf_radio_fem: rf_path {
compatible = "generic-fem-two-ctrl-pins";
ctx-gpios = <&gpio0 14 0>;
crx-gpios = <&gpio0 13 0>;
tx-gain-db = < 0 >;
rx-gain-db = < 0 >;
ctx-settle-time-us = < 10 >;
crx-settle-time-us = < 10 >;
};
};
&radio {
fem = <&nrf_radio_fem>;
};
&led0 { status = "disabled";};
&led1 { status = "disabled";};
&pwm0 { status = "disabled";};
Normal working conditions:
Scanning multiple peripheral sensor devices (based on nRF52833), collecting data from advertisements, connecting periodically to read characteristic data.
Currently we are testing stability of scan and connection by connecting much faster, once every 5-20 seconds. Also our test environment is noisy with lots of other BLE devices.
Issue description:
Spontaneously this message appears and device is unable to start scanning.
[ 3916.269822] Bluetooth: hci1: command 0x200c tx timeout [ 3916.269822] Bluetooth: hci1: Opcode 0x200c failed: -110 [ 3916.269837] Bluetooth: hci1: Unable to disable scanning: -110 [ 3916.285978] Bluetooth: hci1: Opcode 0x200c failed: -110 [ 3916.291229] Bluetooth: hci1: Unable to disable scanning: -110 [ 3916.296977] Bluetooth: hci1: Unable to disable scanning: -110 [ 3918.349861] Bluetooth: hci1: command 0x200c tx timeout [ 3918.349863] Bluetooth: hci1: Opcode 0x200c failed: -110 [ 3918.349873] Bluetooth: hci1: Unable to disable scanning: -110 [ 3918.349877] Bluetooth: hci1: stop background scanning failed: -110 [ 3920.429905] Bluetooth: hci1: command 0x200c tx timeout
Sometimes Nordic is stuck in scan, while BlueZ crashes and says scan is disabled.
Only way to recover is to power-cycle the BLE controller, attach again and restart bluetooth service.
Logging from Nordic controller side:
<dbg> bt_sdc_hci_driver: hci_driver_send: Exit: 0
<dbg> bt_sdc_hci_driver: event_packet_process: Command Status (0x2016) status: 0x00
<dbg> bt_hci_raw: bt_recv: buf 0x2000e994 len 6
<dbg> bt_hci_raw: bt_send: buf 0x2000ddac len 28
<dbg> bt_sdc_hci_driver: hci_driver_send:
<dbg> bt_sdc_hci_driver: cmd_handle:
<dbg> bt_sdc_hci_driver: hci_driver_send: Exit: 0
<dbg> bt_sdc_hci_driver: event_packet_process: Command Status (0x200d) status: 0x0b
<dbg> bt_hci_raw: bt_recv: buf 0x2000e994 len 6
<dbg> bt_sdc_hci_driver: event_packet_process: LE Meta Event (0x04), len (12)
<dbg> bt_hci_raw: bt_recv: buf 0x2000e994 len 14
<dbg> bt_sdc_hci_driver: event_packet_process: Event (0x05) len 4
<dbg> bt_hci_raw: bt_recv: buf 0x2000e994 len 6
Is there anything I can change in my configuration to remedy this?
Would greatly appreciate any suggestions or directions.