Klipper Firmware Update – Schritt-für-Schritt-Anleitung (2026)

2. April 2026

Alle MCUs synchron flashen: Octopus Pro, Eddy, CAN-Toolboard und Raspberry Pi

Vollständige Anleitung zum Aktualisieren der Klipper-Firmware auf allen Komponenten – am Beispiel eines BTT Octopus Pro, BTT Eddy USB, STM32G0B1-Toolboard via CAN-Bus und Raspberry Pi als Host.

a-detailed-technical-illustration-showing-a-3d-p

Bild generiert mit KI

Warum ein vollständiges Firmware-Update nötig ist

Klipper besteht aus mehreren Komponenten: der Host-Software auf dem Raspberry Pi und der Firmware auf jeder angeschlossenen MCU. Bei einem Update müssen alle MCUs exakt die gleiche Firmware-Version erhalten. Stimmen die Versionen nicht überein, quittiert Klipper den Dienst mit einem gefürchteten „Protocol Error”.

Diese Anleitung zeigt den kompletten Ablauf am Beispiel eines typischen Setups:

  • Mainboard: BTT Octopus Pro (STM32F429) via USB
  • Probe: BTT Eddy USB (RP2040) via USB
  • Toolboard: EBB / SB2209 o. ä. (STM32G0B1) via CAN-Bus
  • Host-MCU: Raspberry Pi (Linux process)

Tipp: Falls dein Setup andere Hardware nutzt, passe die Prozessor- und Interface-Einstellungen entsprechend an – die Grundstruktur bleibt identisch.


Schritt 1: Host-System (Raspberry Pi) aktualisieren

Bevor die Hardware geflasht wird, muss die Klipper-Software auf dem Pi aktuell sein. Immer zuerst den Host, dann die MCUs.

1.1 Klipper-Update einspielen

cd ~/klipper
git pull
sudo service klipper restart

1.2 Linux-MCU ([mcu rpi]) flashen

Viele Setups nutzen den Pi selbst als MCU – z. B. für ADXL345-Beschleunigungssensoren oder GPIO-Steuerung. Diese MCU muss ebenfalls neu kompiliert werden, sonst kommt es zum Protocol-Error.

cd ~/klipper
make menuconfig

menuconfig-Einstellungen:

Einstellung Wert
Micro-controller Architecture Linux process

Das ist die einzige Option – es gibt hier keine weiteren Untermenüs. Bestätigen und speichern.

make clean && make
make flash

Der Pi flasht sich damit selbst. Kein Neustart nötig, Klipper wird automatisch die neue Version laden.


Schritt 2: Mainboard flashen (BTT Octopus Pro – STM32F429)

Das Octopus Pro ist per USB mit dem Pi verbunden. Es nutzt einen STM32F429-Chip mit 32 KiB Bootloader.

2.1 menuconfig konfigurieren

cd ~/klipper
make menuconfig

menuconfig-Einstellungen im Detail:

Einstellung Wert Erklärung
Micro-controller Architecture STMicroelectronics STM32 Die STM32-Familie von ST
Processor model STM32F429 Der Chip auf dem Octopus Pro. Beim Octopus V1.1 wäre es z. B. STM32F446
Bootloader offset 32KiB bootloader Der Octopus Pro hat einen 32 KiB Bootloader. Falscher Offset = Board bootet nicht!
Clock Reference 8 MHz crystal Externer Quarz auf dem Board. Manche Boards nutzen 12 MHz – Board-Dokumentation prüfen
Communication interface USB (on PA11/PA12) Die USB-Pins des Octopus Pro. Andere Boards können andere Pins nutzen (z. B. PA9/PA10)

Warum ist der Bootloader-Offset wichtig? Der Bootloader belegt die ersten Bytes des Flash-Speichers. Klipper muss wissen, ab welcher Adresse die eigentliche Firmware beginnt. Ein falscher Offset überschreibt den Bootloader und das Board startet nicht mehr (Rettung dann nur per DFU oder ST-Link).

2.2 Kompilieren und flashen (SD-Karten-Methode)

make clean && make

Die fertige Firmware liegt unter out/klipper.bin.

Flash-Vorgang:

  1. out/klipper.bin vom Pi auf deinen PC kopieren (z. B. per SCP/SFTP).
  2. Die Datei in firmware.bin umbenennen – der Name ist wichtig!
  3. Auf eine FAT32-formatierte SD-Karte kopieren (max. 32 GB empfohlen).
  4. SD-Karte in den Slot am Octopus stecken.
  5. Reset-Knopf am Board drücken (oder Stromversorgung kurz trennen).
  6. Ca. 5 Sekunden warten, dann SD-Karte prüfen.

Erfolgskontrolle: Die Datei auf der SD-Karte heißt jetzt FIRMWARE.CUR statt firmware.bin. Das bestätigt, dass der Bootloader die Firmware geflasht hat.

Alternativ: Du kannst auch direkt per USB flashen, wenn du die serial-ID kennst: bash make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32f429xx_... Die SD-Methode ist aber am zuverlässigsten und funktioniert auch bei korrupter Firmware.


Schritt 3: Probe flashen (BTT Eddy USB – RP2040)

Der BTT Eddy ist ein induktiver Probe mit eigenem RP2040-Chip und permanenter USB-Verbindung. Auch er braucht die passende Klipper-Firmware.

3.1 menuconfig konfigurieren

cd ~/klipper
make menuconfig

menuconfig-Einstellungen im Detail:

Einstellung Wert Erklärung
Micro-controller Architecture Raspberry Pi RP2040 Der Chip im Eddy (und vielen anderen Boards wie z. B. dem Pi Pico)
Bootloader No bootloader Der RP2040 hat keinen permanenten Bootloader im klassischen Sinne – er wird im UF2-Boot-Modus geflasht
Flash chip W25Q080 with generic 03h SPI Standard-Flash-Chip auf dem Eddy. Bei den meisten RP2040-Boards korrekt
Communication interface USB Der Eddy hängt dauerhaft per USB am Pi

Warum „No bootloader”? Beim RP2040 wird die Firmware direkt in den Flash geschrieben. Der Boot-ROM des Chips übernimmt die Bootloader-Funktion – du musst nur den Boot-Modus manuell aktivieren.

3.2 Kompilieren und flashen

make clean && make

Boot-Modus aktivieren:

  1. USB-Kabel vom Eddy trennen (oder am Pi abziehen).
  2. Boot-Knopf am Eddy gedrückt halten.
  3. USB-Kabel wieder einstecken (Knopf weiter halten).
  4. Knopf loslassen – der Eddy meldet sich jetzt als USB-Bootloader-Device.
make flash FLASH_DEVICE=2e8a:0003

Die ID 2e8a:0003 ist die USB-ID des RP2040 im Boot-Modus. Falls unsicher:

lsusb | grep -i "2e8a"

Nach dem Flash startet der Eddy automatisch mit der neuen Firmware.


Schritt 4: Toolboard flashen (STM32G0B1 via CAN-Bus)

Das Toolboard (z. B. BTT EBB36/42, SB2209, Mellow FLY-SB2040) hängt am CAN-Bus. Hier muss die CAN-Bitrate exakt stimmen.

4.1 menuconfig konfigurieren

cd ~/klipper
make menuconfig

menuconfig-Einstellungen im Detail:

Einstellung Wert Erklärung
Micro-controller Architecture STMicroelectronics STM32 STM32-Familie
Processor model STM32G0B1 Der Chip auf dem Toolboard. Beim EBB36 v1.2 z. B. auch STM32G0B1, ältere Versionen ggf. STM32F072
Bootloader offset No bootloader Kein separater Bootloader – Klipper wird direkt geflasht. Falls Katapult installiert ist: 8KiB bootloader
Clock Reference 8 MHz crystal Standard bei den meisten STM32-Toolboards
Communication interface CAN bus (on PB0/PB1) Die CAN-Pins des Toolboards. Unbedingt im Schaltplan prüfen – falsche Pins = keine Kommunikation
CAN bus speed 1000000 Deine CAN-Bitrate. Muss auf allen CAN-Teilnehmern identisch sein! Übliche Werte: 250000, 500000, 1000000

CAN-Pins – häufige Boards: - BTT EBB36/42 v1.2: PB0/PB1 - BTT SB2209: PB0/PB1 - Mellow FLY-SB2040: Nutzt RP2040 mit eigener CAN-Konfiguration

Falsche Pins sind der häufigste Fehler beim CAN-Setup! Immer die Pin-Belegung des konkreten Board-Revisions prüfen.

Zur CAN-Bitrate: Alle Geräte am CAN-Bus müssen dieselbe Bitrate verwenden – das Toolboard, das Host-Interface (can0 am Pi) und ggf. ein CAN-Bridge-Board. Typische Werte sind 500000 (500k) oder 1000000 (1M). Höhere Bitraten erlauben mehr Durchsatz, erfordern aber kurze, sauber terminierte Leitungen.

4.2 Kompilieren und flashen

make clean && make

Empfohlen: Flash über USB (Rettungsweg)

Das Flashen über CAN funktioniert nicht immer zuverlässig – insbesondere ohne Katapult-Bootloader. Schließe das Toolboard daher einmalig per USB direkt an den Pi an:

  1. CAN-Kabel vom Toolboard trennen.
  2. USB-Kabel zwischen Toolboard und Pi anschließen.
  3. Serial-ID ermitteln:
ls /dev/serial/by-id/*

Beispielausgabe:

/dev/serial/by-id/usb-Klipper_stm32g0b1xx_12345678-if00
  1. Flashen:
make flash FLASH_DEVICE=/dev/serial/by-id/usb-Klipper_stm32g0b1xx_DEINE_ID
  1. USB-Kabel trennen, CAN-Kabel wieder anschließen.

Alternativ: Flash über CAN (mit Katapult/CanBoot-Bootloader)

Falls Katapult auf dem Toolboard installiert ist, kannst du direkt über den CAN-Bus flashen:

python3 ~/katapult/scripts/flash_can.py -i can0 -u DEINE_CAN_UUID -f ~/klipper/out/klipper.bin

Die CAN-UUID findest du mit:

~/klippy-env/bin/python ~/klipper/scripts/canbus_query.py can0

Zusammenfassung: Beispiel-Setup

Komponente Chip Verbindung Identifikation
BTT Octopus Pro STM32F429 USB /dev/serial/by-id/usb-Klipper_stm32f429xx_...
BTT Eddy USB RP2040 USB /dev/serial/by-id/usb-Klipper_rp2040_...
Toolboard (EBB/SB) STM32G0B1 CAN (1M) UUID (z. B. 5e654f097xxx)
Raspberry Pi Linux Intern n/a

Checkliste nach dem Flashen

1. Klipper-Dienst starten

sudo service klipper start

2. Firmware-Versionen prüfen

Öffne Mainsail oder FluiddMachineSystem Information. Alle MCUs müssen die identische Versionskennung anzeigen, z. B.:

mcu: Klipper v0.13.0-xxx
mcu rpi: Klipper v0.13.0-xxx
mcu EBBCan: Klipper v0.13.0-xxx
mcu eddy: Klipper v0.13.0-xxx

Weicht eine Version ab, wurde diese MCU nicht korrekt geflasht.

3. CAN-Interface prüfen

ip -details link show can0

Erwartete Ausgabe:

can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP ...
    bitrate 1000000 sample-point 0.750

Falls can0 nicht aktiv ist, prüfe /etc/network/interfaces.d/can0:

allow-hotplug can0
iface can0 can static
    bitrate 1000000
    up ifconfig $IFACE txqueuelen 1024

Passe die bitrate an dein Setup an und starte das Interface neu:

sudo ifdown can0 && sudo ifup can0

4. Homing-Test

Führe G28 (Home All) aus – Finger am Not-Aus! So prüfst du, ob Endstops und Probe korrekt arbeiten.

5. Probe-Kalibrierung

Nach einem Firmware-Update können sich Offsets minimal ändern. Führe die Kalibrierung erneut durch:

PROBE_CALIBRATE
BED_MESH_CALIBRATE

Fehlerbehebung

Problem Ursache Lösung
„Protocol Error” nach Update Firmware-Versionen stimmen nicht überein Alle MCUs auf identische Version flashen
CAN-Toolboard antwortet nicht Bitrate stimmt nicht oder Interface ist down ip link show can0 prüfen, Bitrate vergleichen
SD-Karte: Datei bleibt firmware.bin Board hat nicht geflasht Andere SD-Karte probieren, FAT32 formatieren, Reset erneut drücken
make flash am RP2040 schlägt fehl Boot-Modus nicht aktiv Knopf beim Einstecken gedrückt halten, lsusb prüfen
make flash am Toolboard via USB: „No device found” Falscher Device-Pfad ls /dev/serial/by-id/* erneut prüfen, USB-Kabel testen
Eddy liefert nach Update falsche Werte Kalibrierung fehlt PROBE_CALIBRATE und ggf. Eddy-spezifische Kalibrierung neu durchführen

menuconfig Kurzreferenz

Zur schnellen Übersicht – alle vier Konfigurationen auf einen Blick:

Pi (Linux-MCU):

[*] Linux process

Octopus Pro (STM32F429):

[*] STMicroelectronics STM32
    Processor: STM32F429
    Bootloader: 32KiB bootloader
    Clock: 8 MHz crystal
    Interface: USB (on PA11/PA12)

Eddy USB (RP2040):

[*] Raspberry Pi RP2040
    Bootloader: No bootloader
    Interface: USB

Toolboard CAN (STM32G0B1):

[*] STMicroelectronics STM32
    Processor: STM32G0B1
    Bootloader: No bootloader
    Interface: CAN bus (on PB0/PB1)
    CAN speed: 1000000

Wenn alle Firmware-Versionen in Mainsail/Fluidd grün und identisch sind, läuft dein Drucker wieder synchron. Viel Erfolg beim Update!

Teilen:


Schreibe einen Kommentar

Wird für die Bestätigung benötigt