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.
When the Octopus needs flashing
Section titled “When the Octopus needs flashing”| Situation | Why |
|---|---|
After a software update, the dashboard says mcu should be updated | The 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 host | The host moved; the board did not |
| The board has been physically replaced with a blank one | New 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.
Flashing the Octopus
Section titled “Flashing the Octopus”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.
-
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 commitc5a092b; the board reports its version after flashingKeep the name exactly as it downloads. The bootloader looks for
firmware.binand ignores anything else -
Put it on the card. Format a microSD FAT32 and copy
firmware.binacross on its own — one file, nothing elseA spare card, not the Raspberry Pi’s: formatting that one erases G1OS
-
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
-
Check the card. Power off, remove it and look at it on your computer.
firmware.binshould be gone — renamed, typically toFIRMWARE.CUR. That is the confirmation it was flashed; if the file is still sitting there untouched, nothing happened -
Verify on the machine. Power up and run
STATUSin the console:mcushould be connected and the version mismatch error gone
If the file does not disappear
Section titled “If the file does not disappear”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 three boards
Section titled “The three boards”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:
| Octopus | Ginger.Extruder | Ginger.Feeding | |
|---|---|---|---|
| Klipper calls it | [mcu] — the main one | [mcu extruder_board] | nothing — Klipper does not know it exists |
| Board | BigTreeTech Octopus Pro v1.1 | Ginger PCB + Arduino Nano-compatible | Ginger PCB + Arduino Nano-compatible |
| MCU | STM32H723 | ATmega328P | ATmega328P |
| Firmware | klipper4pellet | klipper4pellet, AVR build | G1-AutoFeeding — not Klipper |
| Drives | Motion, all four NTC thermistors, bed heater output | 3 zone heater relays (and the 220 V through them), probe servo, part fan, feeder switch, buzzer | Vacuum relay, hopper level probe, buzzer, LED |
| Where | Panel box | Panel box | Panel box |
| Link to the Pi | USB (USB_2) | USB (USB_1) | None |
| Flashed | From its own microSD slot — the procedure above | At the factory — never reflashed | At 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.
Why the Update Manager does not do this
Section titled “Why the Update Manager does not do this”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.
The other two boards
Section titled “The other two boards”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.
Extruder board (extruder_board)
Section titled “Extruder board (extruder_board)”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.
Feeder board (Ginger.Feeding)
Section titled “Feeder board (Ginger.Feeding)”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.
Related notes
Section titled “Related notes”- Klipper MCU communication lost — do this first, it is nearly always the answer
- Extruder board (extruder_board MCU)
- Automatic feeding system — what the feeder board does
- Updating the printer — the host updates, which are not this
- G1OS installation — flashing the SD card, which is also not this
- SSH access
- Panel Box wiring