What does an MCU timeout mean in Klipper?
The Klipper host (the Raspberry Pi or similar computer running klippy) stopped hearing from a microcontroller board (MCU) for about 4 to 6 s and shut the printer down. That board is the printer’s mainboard or a toolhead board. Klipper’s FAQ points first at the USB connection: the cable, loose plugs, unstable power and electrical noise.
The number
| What Klipper does | Value (Klipper v0.13.0) | Where it is set |
|---|---|---|
| Host asks each MCU for its clock | Every 0.9839 s | clocksync.py |
| Unanswered clock queries allowed | 4; the 5th in a row trips the timeout | clocksync.py, is_active() |
| Host checks for the timeout | Once a second | statistics.py, toolhead.py, mcu.py |
Silence before Lost communication with MCU |
About 4 to 6 s after the board’s last reply | The three rows above |
| Host’s attempts to reconnect at startup | 90 s, then Unable to connect |
serialhdl.py |
| Board turns its heaters off without host confirmation | After 5 s in v0.13.0; 3 s in current Klipper | heaters.py, Klipper FAQ |
The values come from the klippy source of the Klipper v0.13.0 release on GitHub. The 3 s heater figure is from Klipper’s current FAQ.
Why does Klipper lose communication with the MCU mid print?
The host calculates when each stepper motor should step and sends them in advance; the MCU runs Klipper’s microcontroller code and executes each one at the requested time. To keep the two clocks in sync, the host asks every board for its clock about once a second. When five queries in a row go unanswered, the host shuts down with this message:
Lost communication with MCU 'mcu'
The name in quotes tells you which board. mcu is the [mcu] section of printer.cfg, the main control board. A toolhead board or any other extra board shows the name from its [mcu <name>] section.
- Host: Raspberry Pi running klippy
- MCU: printer control board
- Plug half out of the socket
Klipper’s FAQ lists these causes:
- The USB cable or a loose plug.
- Raspberry Pi undervoltage from a poor supply or supply cable.
- An overloaded printer supply. Power fluctuations can reset the board’s USB chip.
- A crimped or frayed stepper or heater wire. Printer movement stresses it until it loses contact, shorts or makes noise.
- Mixed 5 V supplies. Noise rises when the printer supply and the USB cable both power the board.
- ModemManager. Some Linux distributions enable it, and it can disrupt serial communication.
Is it the same as “Timer too close” or “MCU shutdown”?
No. Lost communication means the host heard nothing back. A message starting MCU 'mcu' shutdown: means the board is still talking: it halted itself and reported why. Klipper adds a hint for the common reasons:
Timer too close: the host computer is overloaded. Check CPU load, swap, disk errors, overheating and unstable voltage.Missed scheduling of next: an intermittent communication failure between the board and the host.ADC out of range: a heater temperature beyond its configuredmin_tempormax_temp(ADC is the analog-to-digital converter behind the reading; see MINTEMP errors).
MCU 'mcu' spontaneous restart means the board rebooted by itself during the job.
Will my heaters stay on after the error?
No. The host has to reconfirm each heater it turns on, and a board that stops hearing it shuts down with heaters and motors off. The print is lost, though: Klipper halts rather than pausing.
How do I restart Klipper after a shutdown error?
Type FIRMWARE_RESTART in the console. Klipper’s message ends with that instruction:
Once the underlying issue is corrected, use the
"FIRMWARE_RESTART" command to reset the firmware, reload the
config, and restart the host software.
Printer is shutdown
RESTART only reloads the config and restarts the host software. It leaves the board’s error state in place, which is why a lost connection or an MCU shutdown needs FIRMWARE_RESTART.
Why does Klipper stay disconnected after a restart?
It still cannot reach the board. At startup the host retries the port for 90 s, then reports mcu 'mcu': Unable to connect and stops at Error configuring printer. Fix the cable, the board’s power or the serial path, then send FIRMWARE_RESTART again.
How to check it on your own printer
- Reseat or replace the USB cable at both ends with the printer off.
- Run
vcgencmd get_throttledon a Raspberry Pi. Bit0x1means undervoltage now;0x10000means it happened earlier. - Unplug the printer’s supply and leave USB in. If the board still powers on, set it to take power from one source only.
- Flex the moving harnesses and replace any crimped or frayed wire.
- Disable ModemManager if your Linux distribution runs it.
- Use the stable port name. Set
serial:in[mcu]to the path fromls /dev/serial/by-id/*so a reset cannot change it. - On a CAN bus toolhead board, check for exactly two 120 Ohm terminating resistors, twisted CANH and CANL wires and secure crimps.
ip link show can0should reportqlen 128. - Watch
bytes_invalidinklippy.log. On a CAN bus board, a count that climbs every few hours points to software, not wiring. Klipper’s guide starts with Linux kernel 6.6.0 or later.
Sources
- klippy/clocksync.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/mcu.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/toolhead.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/extras/statistics.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/serialhdl.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/extras/error_mcu.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- klippy/extras/heaters.py at v0.13.0, Klipper on GitHub (accessed October 20, 2026)
- Features, Klipper documentation (accessed October 20, 2026)
- Frequently Asked Questions, Klipper documentation (accessed October 20, 2026)
- G-Codes, Klipper documentation (accessed October 20, 2026)
- Configuration reference, Klipper documentation (accessed October 20, 2026)
- CANBUS Troubleshooting, Klipper documentation (accessed October 20, 2026)
- Raspberry Pi OS (vcgencmd get_throttled), Raspberry Pi Documentation (accessed October 20, 2026)