Skip to content
Main site

Flashing the Octopus

The Raspberry Pi is not the only computer in the G1. Three microcontrollers sit underneath it, each with its own firmware in its own flash memory, and none of them is touched by the Raspberry Pi’s SD card.

Only one of the three is yours to flash: the Octopus. It is written from its own microSD slot, and only when, after a software update, the dashboard reports it out of date. The other two are flashed at the factory and stay that way — what they are is further down.


SituationWhy
After a software update, the dashboard says mcu should be updatedThe update moved the Raspberry Pi and left the board behind. No message, no flash. Usually the printer still prints in the meantime — see Updating the printer
Klipper will not start and reports the MCU protocol / version does not match the hostThe host moved; the board did not
The board has been physically replaced with a blank oneNew silicon, no firmware
Ginger support asks you to—

Everything else — a board that disappears from STATUS, intermittent dropouts, a zone that stops heating — is a wiring, USB or configuration problem. Reflashing will not fix it and costs you a working board if it goes wrong.


The Octopus is not written over its USB link. It is flashed from its own microSD slot: you put firmware.bin on a card, power the board, and the bootloader takes it. Nothing is sent from the Raspberry Pi.

  1. Get the firmware. Download Ginger’s build — this is the binary used in production, so you do not have to compile anything:

    firmware.bin — Ginger’s build of 9 September 2026, 44,660 bytes

    SHA-256 faef9001c45bc68969589a7145114a4925ef534d43eae46708add4ec7fed88c0, if you want to check what you downloaded is what was published. It is built from klipper4pellet commit c5a092b; the board reports its version after flashing

    Keep the name exactly as it downloads. The bootloader looks for firmware.bin and ignores anything else

  2. Put it on the card. Format a microSD FAT32 and copy firmware.bin across on its own — one file, nothing else

    A spare card, not the Raspberry Pi’s: formatting that one erases G1OS

  3. Insert and power. Ease the cable loom aside, put the card in the slot, and power the printer for a few seconds. The bootloader reads the card and writes the firmware

  4. Check the card. Power off, remove it and look at it on your computer. firmware.bin should be gone — renamed, typically to FIRMWARE.CUR. That is the confirmation it was flashed; if the file is still sitting there untouched, nothing happened

  5. Verify on the machine. Power up and run STATUS in the console: mcu should be connected and the version mismatch error gone

The card was never read. In order of likelihood: not FAT32, more than one file on it, the card is too large or too new for the bootloader, or the board has no bootloader.

For that last case — a new or bricked board — contact Ginger Additive support.

The panel box holds two Ginger boards and one BigTreeTech board. The two Ginger ones are named on the assembly drawings as Ginger.Extruder and Ginger.Feeding — and the answer to the obvious question is yes:

OctopusGinger.ExtruderGinger.Feeding
Klipper calls it[mcu] — the main one[mcu extruder_board]nothing — Klipper does not know it exists
BoardBigTreeTech Octopus Pro v1.1Ginger PCB + Arduino Nano-compatibleGinger PCB + Arduino Nano-compatible
MCUSTM32H723ATmega328PATmega328P
Firmwareklipper4pelletklipper4pellet, AVR buildG1-AutoFeeding — not Klipper
DrivesMotion, all four NTC thermistors, bed heater output3 zone heater relays (and the 220 V through them), probe servo, part fan, feeder switch, buzzerVacuum relay, hopper level probe, buzzer, LED
WherePanel boxPanel boxPanel box
Link to the PiUSB (USB_2)USB (USB_1)None
FlashedFrom its own microSD slot — the procedure aboveAt the factory — never reflashedAt the factory — never reflashed

How to tell the two Klipper MCUs apart in printer.cfg: the Octopus reports as usb-Klipper_stm32h723xx_…, the extruder_board as usb-1a86_… — 1a86 is the CH340 USB-serial chip on the Nano, not Klipper’s own identifier.

This is the point that catches people out.

Machine → Update Manager updates the Raspberry Pi. It does not flash any board. Pressing UPDATE on the klipper row replaces the Klipper host software on the Pi. The Octopus keeps the firmware it already has, which is why, when the dashboard reports it out of date, it is flashed by hand.

Nor does flashing the SD card. A brand-new card boots and talks to boards still running whatever they were flashed with — see G1OS installation.

That separation is normally invisible, because Ginger’s Klipper version deliberately trails upstream and does not change often. It becomes visible in exactly one way: a host Klipper update that crosses a protocol change, after which Klipper refuses to start and says the MCU firmware is out of date.


Both Ginger boards are flashed at the factory and are never reflashed. There is no procedure for either, and nothing in normal use or in a fault asks for one.

An Arduino Nano-compatible board running Klipper, connected to the Raspberry Pi over USB. If Klipper loses it, the firmware is not the cause: it is the USB cable from the Raspberry Pi, or the board’s serial: line in printer.cfg — see Klipper MCU communication lost.

An Arduino Nano-compatible board running G1-AutoFeeding, not Klipper, and not part of any Klipper update. It has no cable to the Raspberry Pi at all.

Its behaviour is five pins and a handful of constants compiled into the sketch: the vacuum relay, the run LED, the hopper level probe, the FEEDER enable arriving from Ginger.Extruder over GCOM, and the buzzer. That is why the feeding timings cannot be changed from Mainsail, the display or printer.cfg — they are in the firmware. The timings themselves are in the auto feeding firmware.

If the feeding cycle needs to behave differently, contact Ginger Additive support.