Prusa-MMU-Private
PrusaMultiMaterialUpgradev3firmwareforMK3SMK4
Enumerations
error_codes.h File Reference
#include <stdint.h>
Include dependency graph for error_codes.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Enumerations

enum class  ErrorCode : uint_fast16_t {
  RUNNING = 0x0000 , OK = 0x0001 , TMC_PULLEY_BIT = 0x0040 , TMC_SELECTOR_BIT = 0x0080 ,
  TMC_IDLER_BIT = 0x0100 , FINDA_DIDNT_SWITCH_ON = 0x8001 , FINDA_DIDNT_SWITCH_OFF = 0x8002 , FSENSOR_DIDNT_SWITCH_ON = 0x8003 ,
  FSENSOR_DIDNT_SWITCH_OFF = 0x8004 , FILAMENT_ALREADY_LOADED = 0x8005 , INVALID_TOOL = 0x8006 , HOMING_FAILED = 0x8007 ,
  HOMING_SELECTOR_FAILED = HOMING_FAILED | TMC_SELECTOR_BIT , HOMING_IDLER_FAILED = HOMING_FAILED | TMC_IDLER_BIT , STALLED_PULLEY = HOMING_FAILED | TMC_PULLEY_BIT , FINDA_VS_EEPROM_DISREPANCY = 0x8008 ,
  FSENSOR_TOO_EARLY = 0x8009 , FINDA_FLICKERS = 0x800a , MOVE_FAILED = 0x800b , MOVE_SELECTOR_FAILED = MOVE_FAILED | TMC_SELECTOR_BIT ,
  MOVE_IDLER_FAILED = MOVE_FAILED | TMC_IDLER_BIT , MOVE_PULLEY_FAILED = MOVE_FAILED | TMC_PULLEY_BIT , FILAMENT_EJECTED = 0x800c , MCU_UNDERVOLTAGE_VCC = 0x800d ,
  LOAD_TO_EXTRUDER_FAILED = 0x802a , QUEUE_FULL = 0x802b , VERSION_MISMATCH = 0x802c , PROTOCOL_ERROR = 0x802d ,
  MMU_NOT_RESPONDING = 0x802e , INTERNAL = 0x802f , TMC_IOIN_MISMATCH = 0x8200 , TMC_RESET = 0x8400 ,
  TMC_UNDERVOLTAGE_ON_CHARGE_PUMP = 0x8800 , TMC_SHORT_TO_GROUND = 0x9000 , TMC_OVER_TEMPERATURE_WARN = 0xA000 , TMC_OVER_TEMPERATURE_ERROR = 0xC000 ,
  MMU_SOLDERING_NEEDS_ATTENTION = 0xC200
}
 

Enumeration Type Documentation

◆ ErrorCode

enum ErrorCode : uint_fast16_t
strong

A complete set of error codes which may be a result of a high-level command/operation. This header file shall be included in the printer's firmware as well as a reference, therefore the error codes have been extracted to one place.

Please note the errors are intentionally coded as "negative" values (highest bit set), becase they are a complement to reporting the state of the high-level state machines - positive values are considered as normal progress, negative values are errors.

Please note, that multiple TMC errors can occur at once, thus they are defined as a bitmask of the higher byte. Also, as there are 3 TMC drivers on the board, each error is added a bit for the corresponding TMC - TMC_PULLEY_BIT, TMC_SELECTOR_BIT, TMC_IDLER_BIT, The resulting error is a bitwise OR over 3 TMC drivers and their status, which should cover most of the situations correctly.

Enumerator
RUNNING 

the operation is still running - keep this value as ZERO as it is used for initialization of error codes as well

OK 

the operation finished OK

TMC_PULLEY_BIT 

+64 TMC Pulley bit

TMC_SELECTOR_BIT 

+128 TMC Pulley bit

TMC_IDLER_BIT 

+256 TMC Pulley bit

FINDA_DIDNT_SWITCH_ON 

Unload Filament related error codes.

E32769 FINDA didn't switch on while loading filament - either there is something blocking the metal ball or a cable is broken/disconnected

FINDA_DIDNT_SWITCH_OFF 

E32770 FINDA didn't switch off while unloading filament.

FSENSOR_DIDNT_SWITCH_ON 

E32771 Filament sensor didn't switch on while performing LoadFilament.

FSENSOR_DIDNT_SWITCH_OFF 

E32772 Filament sensor didn't switch off while performing UnloadFilament.

FILAMENT_ALREADY_LOADED 

E32773 cannot perform operation LoadFilament or move the selector as the filament is already loaded.

INVALID_TOOL 

E32774 tool/slot index out of range (typically issuing T5 into an MMU with just 5 slots - valid range 0-4)

HOMING_FAILED 

generic homing failed error - always reported with the corresponding axis bit set (Idler or Selector) as follows:

HOMING_SELECTOR_FAILED 

E32903 the Selector was unable to home properly - that means something is blocking its movement.

HOMING_IDLER_FAILED 

E33031 the Idler was unable to home properly - that means something is blocking its movement.

STALLED_PULLEY 

E32839 for the Pulley "homing" means just StallGuard detected during Pulley's operation (Pulley doesn't home)

FINDA_VS_EEPROM_DISREPANCY 

E32776 FINDA is pressed but we have no such record in EEPROM - this can only happen at the start of the MMU and can be resolved by issuing an Unload command.

FSENSOR_TOO_EARLY 

E32777 FSensor triggered while doing FastFeedToBondtech - that means either:

  • the PTFE is too short
  • a piece of filament was left inside - pushed in front of the loaded filament causing the fsensor trigger too early
  • fsensor is faulty producing bogus triggers
FINDA_FLICKERS 

The user is obliged to inspect FINDA and tune its switching.

FINDA flickers - seems to be badly calibrated and happens to be pressed at spots where it used to be not pressed before.

MOVE_FAILED 

generic move failed error - always reported with the corresponding axis bit set (Idler or Selector) as follows:

MOVE_SELECTOR_FAILED 

E32905 the Selector was unable to move to desired position properly - that means something is blocking its movement, e.g. a piece of filament got out of pulley body.

MOVE_IDLER_FAILED 

E33033 the Idler was unable to move - unused at the time of creation, but added for completeness.

MOVE_PULLEY_FAILED 

E32841 the Pulley was unable to move - unused at the time of creation, but added for completeness.

FILAMENT_EJECTED 

Filament was ejected, waiting for user input - technically, this is not an error.

MCU_UNDERVOLTAGE_VCC 

MCU VCC rail undervoltage.

LOAD_TO_EXTRUDER_FAILED 

E32811 internal error of the printer - try-load-unload sequence detected missing filament -> failed load into the nozzle.

QUEUE_FULL 

E32811 internal logic error - attempt to move with a full queue.

VERSION_MISMATCH 

E32812 internal error of the printer - incompatible version of the MMU FW.

PROTOCOL_ERROR 

E32813 internal error of the printer - communication with the MMU got garbled - protocol decoder couldn't decode the incoming messages.

MMU_NOT_RESPONDING 

E32814 internal error of the printer - communication with the MMU is not working.

INTERNAL 

E32815 internal runtime error (software)

TMC_IOIN_MISMATCH 

TMC driver init error - TMC dead or bad communication

  • E33344 Pulley TMC driver
  • E33408 Selector TMC driver
  • E33536 Idler TMC driver
  • E33728 All 3 TMC driver
TMC_RESET 

TMC driver reset - recoverable, we just need to rehome the axis Idler: can be rehomed any time Selector: if there is a filament, remove it and rehome, if there is no filament, just rehome Pulley: do nothing - for the loading sequence - just restart and move slowly, for the unload sequence just restart

  • E33856 Pulley TMC driver
  • E33920 Selector TMC driver
  • E34048 Idler TMC driver
  • E34240 All 3 TMC driver
TMC_UNDERVOLTAGE_ON_CHARGE_PUMP 

not enough current for the TMC, NOT RECOVERABLE

  • E34880 Pulley TMC driver
  • E34944 Selector TMC driver
  • E35072 Idler TMC driver
  • E35264 All 3 TMC driver
TMC_SHORT_TO_GROUND 

TMC driver serious error - short to ground on coil A or coil B - dangerous to recover

  • E36928 Pulley TMC driver
  • E36992 Selector TMC driver
  • E37120 Idler TMC driver
  • E37312 All 3 TMC driver
TMC_OVER_TEMPERATURE_WARN 

TMC driver over temperature warning - can be recovered by restarting the driver. If this error happens, we should probably go into the error state as soon as the current command is finished. The driver technically still works at this point.

  • E41024 Pulley TMC driver
  • E41088 Selector TMC driver
  • E41216 Idler TMC driver
  • E41408 All 3 TMC driver
TMC_OVER_TEMPERATURE_ERROR 

TMC driver over temperature error - we really shouldn't ever reach this error. It can still be recovered if the driver cools down below 120C. The driver needs to be disabled and enabled again for operation to resume after this error is cleared.

  • E49216 Pulley TMC driver
  • E49280 Selector TMC driver
  • E49408 Idler TMC driver
  • E49600 All 3 TMC driver
MMU_SOLDERING_NEEDS_ATTENTION 

TMC driver - IO pins are unreliable. While in theory it's recoverable, in practice it most likely means your hardware is borked (we can't command the drivers reliably via STEP/EN/DIR due to electrical issues or hardware fault. Possible "fixable" cause is undervoltage on the 5v logic line. Unfixable possible cause: bad or cracked solder joints on the PCB, failed shift register, failed driver.