EN
  • Čeština
  • Italiano
  • Deutsch
  • Polski
  • Français
Login

Registers MMU (MMU3)

Relevant for:
Last updated 8 months ago
This article is also available in following languages: 
CSPLDEITFR

Starting from firmware 3.0.0, the Original Prusa Multi-material upgrade (MMU) has a set of runtime variables called registers. You can use these to read or write values into the MMU via G-codes. This article provides the list of available registers in the current firmware.

They can be different error codes and status information related to the MMU (e.g. filament errors, motor errors, temperature warnings, etc), specific parameters (feed rate, acceleration, current, etc), and different components (pulley, selector, idler, etc).

This replaces the Service menu from previous firmware versions.

The table below includes 8-bit (empty value: 0xFFh 255) and 16-bit registers (empty value: 0xFFFFh 65535). The empty values show the maximum amount the register can hold.

There are three different access types:

  • Read: the register can be only read.
  • Write: the register can be read and written to. The written change is not persistent (applies only until the reset of the MMU).
  • Write Persistent: the register can be read and written to. The written values are stored in EEPROM even after the MMU is restarted.

G-codes

Generally, the registers are in the MMU. One of the ways of reading/writing into the registers is through G-codes. The ones you will need here are:

  • M707: Used to read values from specific addresses (e.g., the version, current error codes, filament state).
  • M708: Used to write values to specific addresses, allowing for changes in various printer parameters.
Use a program like Putty or Arduino IDE. Using Pronterface might cause damage to your MMU.
AddressBit/TypeNameValid valuesDefaultDescriptionRead / WriteGcode ReadGcode Write
0x00h 00uint8project_major00h 0ffh 255Project Major VersionRead onlyM707 A0x00N/A
0x01h 01uint8project_minor00h 0ffh 255Project Minor VersionRead onlyM707 A0x01N/A
0x02h 02uint8project_revision00h 0ffh 255Project RevisionRead onlyM707 A0x02N/A
0x03h 03uint8project_build
_number
00h 0ffh 255Project Build NumberRead onlyM707 A0x03N/A
0x04h 04uint16MMU_errors0000h 0ffffh 65535MMU ErrorsRead / Write PersistentM707 A0x04M708 A0x04 Xnnnn
0x05h 05uint8Current_Progress_Codeffh 255ffh 255EmtpyRead onlyM707 A0x05N/A
00h 0OK
01h 1EngagingIdler
02h 2DisengagingIdler
03h 3UnloadingToFinda
04h 4UnloadingToPulley
05h 5FeedingToFinda
06h 6FeedingToBondtech
07h 7FeedingToNozzle
08h 8AvoidingGrind
09h 9FinishingMoves
0ah 10ERRDisengagingIdler
0bh 11ERREngagingIdler
0ch 12ERRWaitingForUser
0dh 13ERRInternal
0eh 14ERRHelpingFilament
0fh 15ERRTMCFailed
10h 16UnloadingFilament
11h 17LoadingFilament
11h 18SelectingFilamentSlot
12h 19PreparingBlade
13h 20PushingFilament
14h 21PerformingCut
15h 22ReturningSelector
16h 23ParkingSelector
17h 24EjectingFilament
18h 25RetractingFromFinda
19h 26Homing
1ah 27MovingSelector
1bh 28FeedingToFSensor
0x06h 06uint16Current_Error_Code0000h 0ffffh 65535RUNNINGRead onlyM707 A0x06N/A
0001h 1OK
8001h 32769FSENSOR_DIDNT
_SWITCH_ON
8002h 32770FINDA_DIDNT
_SWITCH_OFF
8003h 32771FSENSOR_DIDNT
_SWITCH_ON
8004h 32772FSENSOR_DIDNT
_SWITCH_OFF
8005h 32773FILAMENT_ALREADY
_LOADED
8006h 32774INVALID_TOOL
8007h 32775Homing_FAILED
8008h 32776FINDA_VS_EEPROM
_DISREPANCY
8009h 32777FSENSOR_TOO
_EARLY
802bh 32811QUEUE_FULL
802ch 32812VERSION_MISMATCH
802dh 32813PROTOCOL_ERROR
802eh 32814MMU_NOT_RESPONDING
802fh 32815INTERNAL
8200h 33280TMC_IOIN_MISMATCH
8240h 33344TMC_IOIN_MISMATCH
PULLEY
8280h 33408TMC_IOIN_MISMATCH
SELECTOR
8300h 33536TMC_IOIN_MISMATCH
IDLER
83C0h 33728TMC_IOIN_MISMATCH All 3
8400h 33792TMC_RESET
8440h 33856TMC_RESET PULLEY
8480h 33920TMC_RESET SELECTOR
8500h 34048TMC_RESET IDLER
85C0h 34240TMC_RESET All 3
8800h 34816TMC_UNDERVOLTAGE_ON
_CHARGE_PUMP
8840h 34880TMC_UNDERVOLTAGE_ON
_CHARGE_PUMP PULLEY
8880h 34944TMC_UNDERVOLTAGE_ON
_CHARGE_PUMP SELECTOR
8900h 35072TMC_UNDERVOLTAGE_ON
_CHARGE_PUMP IDLER
89C0h 35264TMC_UNDERVOLTAGE_ON
_CHARGE_PUMP All 3
9000h 36864TMC_SHORT_TO_GROUND
9040h 36928TMC_SHORT_TO_GROUND
PULLEY
9080h 36992TMC_SHORT_TO_GROUND
SELECTOR
9100h 37120TMC_SHORT_TO_GROUND
IDLER
91C0h 37312TMC_SHORT_TO_GROUND
All 3
A000h 40960TMC_OVER_TEMPERATURE
_WARN
A040h 41024TMC_OVER_TEMPERATURE
_WARN PULLEY
A080h 41088TMC_OVER_TEMPERATURE
_WARN SELECTOR
A100h 41216TMC_OVER_TEMPERATURE
_WARN IDLER
A1C0h 41408TMC_OVER_TEMPERATURE
_WARN All 3
C000h 49152TMC_OVER_TEMPERATURE
_ERROR
C040h 49216TMC_OVER_TEMPERATURE
_ERROR PULLEY
C080h 49280TMC_OVER_TEMPERATURE
_ERROR SELECTOR
C100h 49408TMC_OVER_TEMPERATURE
_ERROR IDLER
C1C0h 49600TMC_OVER_TEMPERATURE
_ERROR All 3
0x07h 07uint8Filament_State00h 0ffh 255Filament StateRead / WriteM707 A0x07M708 A0x07 Xnn
0x08h 08uint8FINDA_State00h 0ffh 255not triggeredRead onlyM707 A0x08N/A
01h 1triggered
0x09h 09uint8FSensor_State00h 0ffh 255not triggeredRead / WriteM707 A0x09M708 A0x09 Xnn
01h 1triggered
0x0ah 10uint8Motor_Mode00h 000h 0normalRead onlyM707 A0x0aN/A
01h 1stealth
0x0bh 11uint8extra_load_distance00h 01eh 30unit mmRead / WriteM707 A0x0bM708 A0x0b Xnn
0x0ch 12uint8FSensor_unload
_check_dist.
00h 028h 30unit mmRead / WriteM707 A0x0cM708 A0x0c Xnn
0x0dh 13uint16Pulley_unload
_feedrate
0000h 00078h 120unit mm/sRead / WriteM707 A0x0dM708 A0x0d Xnnnn
0x0eh 14uint16Pulley_acceleration0000h 0320h 800.0unit mm/s²Read (Write)M707 A0x0e(M708 A0x0e Xnnnn)
0x0fh 15uint16Selector_acceleration0000h 000c8h 200.0unit mm/s²Read (Write)M707 A0x0f(M708 A0x0f Xnnnn)
0x10h 16uint16Idler_acceleration0000h 001f4h 500.0unit deg/s²Read (Write)M707 A0x10(M708 A0x10 Xnnnn)
0x11h 17uint16Pulley_load_feedrate0000h 00050h 80unit mm/sRead / WriteM707 A0x11M708 A0x11 Xnnnn
0x12h 18uint16Selector_nominal
_feedrate
0000h 0002dh 45unit mm/sRead / WriteM707 A0x12M708 A0x12 Xnnnn
0x13h 19uint16Idler_nominal
_feedrate
0000h 0012ch 300unit deg/sRead / WriteM707 A0x13M708 A0x13 Xnnnn
0x14h 20uint16Pulley_slow_feedrate0000h 00014h 20unit mm/sRead / WriteM707 A0x14M708 A0x14 Xnnnn
0x15h 21uint16Selector_homing
_feedrate
0000h 0001eh 30unit mm/sRead (Write)M707 A0x15(M708 A0x15 Xnnnn)
0x16h 22uint16Idler_homing
_feedrate
0000h 00109h 265unit deg/sRead (Write)M707 A0x16(M708 A0x16 Xnnnn)
0x17h 23uint8Pulley_sg_thrs__R00h 008h 8 Read / Write PersistentM707 A0x17M708 A0x17 Xnn
0x18h 24uint8Selector_sg_thrs_R00h 003h 3 Read / Write PersistentM707 A0x18M708 A0x18 Xnn
0x19h 25uint8Idler_sg_thrs_R00h 006h 6 Read / Write PersistentM707 A0x19M708 A0x19 Xnn
0x1ah 26uint16Get Pulley position0000h 0ffffh 65535unit mmRead onlyM707 A0x1aN/A
0x1bh 27uint16Set/Get_Selector_slot0000h 0ffffh 65535unit slot [0-4/5] 5=park posRead / WriteM707 A0x1bM708 A0x1b Xn
0x1ch 28uint16Set/Get_Idler_slot0000h 0ffffh 65535unit slot [0-4/5] 5=disengagedRead / WriteM707 A0x1cM708 A0x1c Xn
0x1dh 29uint8Set/Get Selector cut
iRun current
0 to 63
(aka 0-1024mA)
31 (530mA) Read / WriteM707 A0x1dM708 A0x1d Xn
0x1eh 30uint16Set/Get Pulley
iRun current
0-3114h 2020->350mA: see TMC2130
current conversion
Read / WriteM707 A0x1eM708 A0x1e Xn
0x1fh 31uint16Set/Get Selector
iRun current
0-311fh 3131->530mA: see TMC2130
current conversion
Read / WriteM707 A0x1fM708 A0x1f Xn
0x20h 32uint16Set/Get Idler
iRun current
0-311fh 3131->530mA: see TMC2130
current conversion
Read / WriteM707 A0x20M708 A0x20 Xn
 

Was this article helpful?

Comments

Still have questions?

Still have questions?

If you have a question about something that isn't covered here, check out our additional resources.
And if that doesn't do the trick, you can send an inquiry to [email protected] or through the button below.

Contact us