Firmware restart with USB-connected MCUs crashes xHCI controller on Arduino UNO Q board

Basic Information:

Printer Model: Voron 2.4
MCU / Printerboard: 3 USB-connected MCUs (BTT Octopus STM32F446, BTT EBB SB2209 STM32G0B1, Cartographer STM32G431)
Host / SBC: Arduino Uno Q Board (Qualcomm QCM2290 SoC) running Debian Trixie, kernel 6.16.7
klippy.log

Describe your issue:

When issuing a Klipper restart or firmware restart, the xHCI USB host controller on the board crashes and all USB devices are lost (MCUs, HDMI touchscreen, camera). The board requires a full USB controller rebind or reboot to recover.

dmesg output:

usb 1-1.3.1.1: USB disconnect, device number 10
usb 1-1.2.3: USB disconnect, device number 9
xhci-hcd xhci-hcd.2.auto: xHCI host not responding to stop endpoint command
xhci-hcd xhci-hcd.2.auto: xHCI host controller not responding, assume dead
xhci-hcd xhci-hcd.2.auto: HC died; cleaning up
usb 1-1: USB disconnect, device number 2

With multiple USB MCUs, this happens sequentially with only a 15ms delay between the reset command and closing the host serial port, creating a rapid cascade of surprise USB disconnections.

On this specific board this causes the xHCI controller to hang on the “stop endpoint” command and die, taking down the entire USB bus.

I am able to bring up the xHCI controller again with

echo xhci-hcd.2.auto > /sys/bus/platform/drivers/xhci-hcd/unbind 2>/dev/null

and

echo xhci-hcd.2.auto > /sys/bus/platform/drivers/xhci-hcd/bind 2>/dev/null

But that’s really annoying workaround.

logs-20260216-105224.zip (971.3 KB)

Hallo @fulipp0 !

You have various versions of Klipper installed.

...
Loaded MCU 'mcu' 130 commands (v0.12.0-410-gcf3b0475d / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2)
...
Loaded MCU 'EBB' 132 commands (v0.13.0-403-gb4c7cf4a / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2)
...
Loaded MCU 'Turtle_1' 121 commands (v0.12.0-452-g75a10bfca / gcc: (15:8-2019-q3-1+b1) 8.3.1 20190703 (release) [gcc-8-branch revision 273027] binutils: (2.35.2-2+14+b2) 2.35.2)
...

You may fix that as the first step.

Also Klipper is marked as ‘dirty’.

...
Git version: 'v0.13.0-513-g1fe9fb3a-dirty'
Untracked files: klippy/extras/AFC.py, klippy/extras/AFC_BoxTurtle.py, klippy/extras/AFC_HTLF.py, klippy/extras/AFC_NightOwl.py, klippy/extras/AFC_QuattroBox.py, klippy/extras/AFC_assist.py, klippy/extras/AFC_buffer.py, klippy/extras/AFC_button.py, klippy/extras/AFC_error.py, klippy/extras/AFC_extruder.py, (+15 files)
...

You may try a pristine version of Klipper (The "dirty" Flag and the Team's Position)

You also may check if the Cartographer firmware is up to date. There have been issues with older versions and Klipper v0.13.

I guess there are not a lot of people who use one
So, I would guess, your problem is related to the support of this board and maybe fixed in the future kernel versions eventually.

-Timofey