Possible to flash MMU3 from a Raspberry Pi?
I don't have a real computer or laptop near my Core One with an MMU3. Is there any way I can I use a Raspberry Pi to flash the MMU3 (not the Core One itself)?
I suppose I could install Ubuntu and then PrusaSlicer, but this would also require me to connect a monitor. I'd prefer to flash from the command line. Has anyone done this?
Best Answer by Walter Layher:
I have not tried this myself so far, but what I found searching for "flash mmu3 via avrdude command" was the following syntax:
avrdude-slic3r -v -p atmega32u4 -c avr109 -P /dev/ttyACM0 -b 57600 -D -U flash:w:/path/to/MMU3_FW.hex:i
You would have to adapt the usb port and the path to your firmware file. The binary "avrdude-slic3r" is part of PrusaSlicer, at least if you compile it from source, it is located in the folder "PrusaSlicer/build/bundled_deps/avrdude". When I search for the binary on my system path I cannot find it there, so it is not installed together with the slicer as a standalone binary and only usable via the firmware upgrade dialog of PrusaSlicer itself. I suspect that you would not be able to access it standalone with an appimage of PrusaSlicer. And of course you will need an ARM version of the binary for the raspberry pi. There is a separate installable debian package "avrdude" available but what I found indicated that you would need the Prusa version of it.
Perhaps it would be less hassle bringing the mountain (printer with MMU) closer to the prophet (PC/laptop) in this case.
Yes.
It can be done with the command line but if you're working headless you'll probably find it easier to use VNC. The flatpack version of PrusaSlicer makes working remotely difficult - so instead download an AppImage from:
https://github.com/davidk/PrusaSlicer-ARM.AppImage/releases/tag/version_2.9.4
Cheerio,
RE: Possible to flash MMU3 from a Raspberry Pi?
It can be done with the command line
You wouldn't happen to know exactly what command line command does it? All I need to do is to get it working once, then I can script it.
RE: Possible to flash MMU3 from a Raspberry Pi?
I have not tried this myself so far, but what I found searching for "flash mmu3 via avrdude command" was the following syntax:
avrdude-slic3r -v -p atmega32u4 -c avr109 -P /dev/ttyACM0 -b 57600 -D -U flash:w:/path/to/MMU3_FW.hex:i
You would have to adapt the usb port and the path to your firmware file. The binary "avrdude-slic3r" is part of PrusaSlicer, at least if you compile it from source, it is located in the folder "PrusaSlicer/build/bundled_deps/avrdude". When I search for the binary on my system path I cannot find it there, so it is not installed together with the slicer as a standalone binary and only usable via the firmware upgrade dialog of PrusaSlicer itself. I suspect that you would not be able to access it standalone with an appimage of PrusaSlicer. And of course you will need an ARM version of the binary for the raspberry pi. There is a separate installable debian package "avrdude" available but what I found indicated that you would need the Prusa version of it.
Perhaps it would be less hassle bringing the mountain (printer with MMU) closer to the prophet (PC/laptop) in this case.
RE: Possible to flash MMU3 from a Raspberry Pi?
Ok, thanks. For anyone else interested, here's a script that automates the process, using the stock avrdude:
#!/bin/bash
# Configuration
INITIAL_PORT="/dev/ttyACM0"
BAUD_RATE="57600"
MCU="atmega32u4"
PROGRAMMER="avr109"
# 1. Check if an argument was provided
if [ -z "$1" ]; then
echo "Usage: $0 <path_to_firmware_file>"
exit 1
fi
HEX_FILE="$1"
echo "--- MMU3 Remote Flash Tool (Deep Verification) ---"
# 2. File Existence Check
if [ ! -f "$HEX_FILE" ]; then
echo "Error: File '$HEX_FILE' not found."
exit 1
fi
# 3. Content Verification (Intel HEX format)
# Validates that lines start with ':' and contain only hex chars/newlines
if ! grep -q "^:[0-9A-Fa-f]\{10,\}" "$HEX_FILE"; then
echo "Error: File '$HEX_FILE' does not contain valid Intel HEX data."
echo "This does not look like a valid firmware file."
exit 1
fi
echo "File verification passed (Valid Intel HEX detected)."
# 4. Dependency Check
if ! command -v avrdude &> /dev/null; then
echo "Error: 'avrdude' is not installed. Run: sudo apt install avrdude"
exit 1
fi
# 5. Trigger the bootloader
echo "Sending 1200-baud reset signal to $INITIAL_PORT..."
# Redirecting stderr to /dev/null because stty might complain if the port
# closes instantly, which is actually what we want.
stty -F "$INITIAL_PORT" 1200 2>/dev/null
# 6. Wait for re-enumeration
echo "Waiting 2 seconds for bootloader to appear..."
sleep 2
# 7. Detect the active port
NEW_PORT=$(ls /dev/ttyACM* 2>/dev/null | head -n 1)
if [ -z "$NEW_PORT" ]; then
echo "Error: MMU3 not found on /dev/ttyACM* after reset."
echo "It may have failed to enter bootloader mode."
exit 1
fi
echo "Found device on $NEW_PORT. Starting upload..."
# 8. Execute Flash
avrdude -v -p "$MCU" -c "$PROGRAMMER" -P "$NEW_PORT" -b "$BAUD_RATE" -D -U flash:w:"$HEX_FILE":i
# 9. Final Result
if [ $? -eq 0 ]; then
echo "------------------------------------------------"
echo "SUCCESS: MMU3 firmware updated!"
else
echo "------------------------------------------------"
echo "FAILURE: Flash process failed."
echo "Check if OctoPrint is still connected to the port."
exit 1
fi
RE: Possible to flash MMU3 from a Raspberry Pi?
I had to update my MMU3 anyway, so I tried it using my Pi5, the standard avrdude package from debian and your script. It worked successfully at the first try. 🙂