Skip to content

Commit ebb7935

Browse files
D.R.racerDRracer
D.R.racer
authored andcommittedOct 11, 2022
Add preliminary support for MMU_SELFTEST_FAILED error messages
1 parent d5ca47d commit ebb7935

File tree

3 files changed

+41
-4
lines changed

3 files changed

+41
-4
lines changed
 

‎Firmware/mmu2/error_codes.h

+11-4
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,11 @@ enum class ErrorCode : uint_fast16_t {
3737
HOMING_FAILED = 0x8007, ///< generic homing failed error - always reported with the corresponding axis bit set (Idler or Selector) as follows:
3838
HOMING_SELECTOR_FAILED = HOMING_FAILED | TMC_SELECTOR_BIT, ///< E32903 the Selector was unable to home properly - that means something is blocking its movement
3939
HOMING_IDLER_FAILED = HOMING_FAILED | TMC_IDLER_BIT, ///< E33031 the Idler was unable to home properly - that means something is blocking its movement
40-
STALLED_PULLEY = HOMING_FAILED | TMC_PULLEY_BIT, ///< E32839 for the Pulley "homing" means just stallguard detected during Pulley's operation (Pulley doesn't home)
40+
STALLED_PULLEY = HOMING_FAILED | TMC_PULLEY_BIT, ///< E32839 for the Pulley "homing" means just StallGuard detected during Pulley's operation (Pulley doesn't home)
4141

4242
FINDA_VS_EEPROM_DISREPANCY = 0x8008, ///< 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
4343

44-
FSENSOR_TOO_EARLY = 0x8009, ///< E32777 FSensor triggered while doing FastFeedToExtruder - that means either:
44+
FSENSOR_TOO_EARLY = 0x8009, ///< E32777 FSensor triggered while doing FastFeedToBondtech - that means either:
4545
///< - the PTFE is too short
4646
///< - a piece of filament was left inside - pushed in front of the loaded filament causing the fsensor trigger too early
4747
///< - fsensor is faulty producing bogus triggers
@@ -60,7 +60,7 @@ enum class ErrorCode : uint_fast16_t {
6060

6161
/// TMC driver init error - TMC dead or bad communication
6262
/// - E33344 Pulley TMC driver
63-
/// - E33404 Selector TMC driver
63+
/// - E33408 Selector TMC driver
6464
/// - E33536 Idler TMC driver
6565
/// - E33728 All 3 TMC driver
6666
TMC_IOIN_MISMATCH = 0x8200,
@@ -105,5 +105,12 @@ enum class ErrorCode : uint_fast16_t {
105105
/// - E49280 Selector TMC driver
106106
/// - E49408 Idler TMC driver
107107
/// - E49600 All 3 TMC driver
108-
TMC_OVER_TEMPERATURE_ERROR = 0xC000
108+
TMC_OVER_TEMPERATURE_ERROR = 0xC000,
109+
110+
/// TMC driver - IO pins are unreliable. While in theory it's recoverable, in practice it most likely
111+
/// means your hardware is borked (we can't command the drivers reliably via STEP/EN/DIR due to electrical
112+
/// issues or hardware fault. Possible "fixable" cause is undervoltage on the 5v logic line.
113+
/// Unfixable possible cause: bad or cracked solder joints on the PCB, failed shift register, failed driver.
114+
MMU_SOLDERING_NEEDS_ATTENTION = 0xC200,
115+
109116
};

‎Firmware/mmu2/errors_list.h

+16
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ typedef enum : uint16_t {
5454
ERR_ELECTRICAL_SELECTOR_TMC_DRIVER_SHORTED = 314,
5555
ERR_ELECTRICAL_IDLER_TMC_DRIVER_SHORTED = 324,
5656

57+
ERR_ELECTRICAL_PULLEY_SELFTEST_FAILED = 305,
58+
ERR_ELECTRICAL_SELECTOR_SELFTEST_FAILED = 315,
59+
ERR_ELECTRICAL_IDLER_SELFTEST_FAILED = 325,
5760

5861
ERR_CONNECT = 400,
5962
ERR_CONNECT_MMU_NOT_RESPONDING = 401,
@@ -104,6 +107,9 @@ static const constexpr uint16_t errorCodes[] PROGMEM = {
104107
ERR_ELECTRICAL_PULLEY_TMC_DRIVER_SHORTED,
105108
ERR_ELECTRICAL_SELECTOR_TMC_DRIVER_SHORTED,
106109
ERR_ELECTRICAL_IDLER_TMC_DRIVER_SHORTED,
110+
ERR_ELECTRICAL_PULLEY_SELFTEST_FAILED,
111+
ERR_ELECTRICAL_SELECTOR_SELFTEST_FAILED,
112+
ERR_ELECTRICAL_IDLER_SELFTEST_FAILED,
107113
ERR_CONNECT_MMU_NOT_RESPONDING,
108114
ERR_CONNECT_COMMUNICATION_ERROR,
109115
ERR_SYSTEM_FILAMENT_ALREADY_LOADED,
@@ -143,6 +149,7 @@ static const char MSG_TITLE_TMC_UNDERVOLTAGE_ERROR[] PROGMEM_I1 = ISTR("TMC UND
143149
static const char MSG_TITLE_TMC_DRIVER_SHORTED[] PROGMEM_I1 = ISTR("TMC DRIVER SHORTED"); ////MSG_TITLE_TMC_DRIVER_SHORTED c=20
144150
//static const char MSG_TITLE_TMC_DRIVER_SHORTED[] PROGMEM_I1 = ISTR("TMC DRIVER SHORTED");
145151
//static const char MSG_TITLE_TMC_DRIVER_SHORTED[] PROGMEM_I1 = ISTR("TMC DRIVER SHORTED");
152+
static const char MSG_TITLE_SELFTEST_FAILED[] PROGMEM_I1 = ISTR("MMU SELFTEST FAILED"); ////MSG_TITLE_SELFTEST_FAILED c=20
146153
static const char MSG_TITLE_MMU_NOT_RESPONDING[] PROGMEM_I1 = ISTR("MMU NOT RESPONDING"); ////MSG_TITLE_MMU_NOT_RESPONDING c=20
147154
static const char MSG_TITLE_COMMUNICATION_ERROR[] PROGMEM_I1 = ISTR("COMMUNICATION ERROR"); ////MSG_TITLE_COMMUNICATION_ERROR c=20
148155
static const char MSG_TITLE_FIL_ALREADY_LOADED[] PROGMEM_I1 = ISTR("FILAMENT ALREADY LOA"); ////MSG_TITLE_FIL_ALREADY_LOADED c=20
@@ -181,6 +188,9 @@ static const char * const errorTitles [] PROGMEM = {
181188
_R(MSG_TITLE_TMC_DRIVER_SHORTED),
182189
_R(MSG_TITLE_TMC_DRIVER_SHORTED),
183190
_R(MSG_TITLE_TMC_DRIVER_SHORTED),
191+
_R(MSG_TITLE_SELFTEST_FAILED),
192+
_R(MSG_TITLE_SELFTEST_FAILED),
193+
_R(MSG_TITLE_SELFTEST_FAILED),
184194
_R(MSG_TITLE_MMU_NOT_RESPONDING),
185195
_R(MSG_TITLE_COMMUNICATION_ERROR),
186196
_R(MSG_TITLE_FIL_ALREADY_LOADED),
@@ -261,6 +271,9 @@ static const char * const errorDescs[] PROGMEM = {
261271
_R(MSG_DESC_TMC), // descPULLEY_TMC_DRIVER_SHORTED
262272
_R(MSG_DESC_TMC), // descSELECTOR_TMC_DRIVER_SHORTED
263273
_R(MSG_DESC_TMC), // descIDLER_TMC_DRIVER_SHORTED
274+
_R(MSG_DESC_TMC), // descPULLEY_SELFTEST_FAILED
275+
_R(MSG_DESC_TMC), // descSELECTOR_SELFTEST_FAILED
276+
_R(MSG_DESC_TMC), // descIDLER_SELFTEST_FAILED
264277
_R(MSG_DESC_MMU_NOT_RESPONDING),
265278
_R(MSG_DESC_COMMUNICATION_ERROR),
266279
_R(MSG_DESC_FILAMENT_ALREADY_LOADED),
@@ -336,6 +349,9 @@ static const uint8_t errorButtons[] PROGMEM = {
336349
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//PULLEY_TMC_DRIVER_SHORTED
337350
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//SELECTOR_TMC_DRIVER_SHORTED
338351
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//IDLER_TMC_DRIVER_SHORTED
352+
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//PULLEY_SELFTEST_FAILED
353+
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//SELECTOR_SELFTEST_FAILED
354+
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//IDLER_SELFTEST_FAILED
339355
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//MMU_NOT_RESPONDING
340356
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//COMMUNICATION_ERROR
341357

‎Firmware/mmu2_error_converter.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,20 @@ uint8_t PrusaErrorCodeIndex(uint16_t ec) {
7979
case (uint16_t)ErrorCode::FINDA_VS_EEPROM_DISREPANCY:
8080
return FindErrorIndex(ERR_SYSTEM_UNLOAD_MANUALLY);
8181
}
82+
83+
// Electrical issues which can be detected somehow.
84+
// Need to be placed before TMC-related errors in order to process couples of error bits between single ones
85+
// and to keep the code size down.
86+
if (ec & (uint16_t)ErrorCode::TMC_PULLEY_BIT) {
87+
if (ec & (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION == (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION)
88+
return FindErrorIndex(ERR_ELECTRICAL_PULLEY_SELFTEST_FAILED);
89+
} else if (ec & (uint16_t)ErrorCode::TMC_SELECTOR_BIT) {
90+
if (ec & (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION == (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION)
91+
return FindErrorIndex(ERR_ELECTRICAL_SELECTOR_SELFTEST_FAILED);
92+
} else if (ec & (uint16_t)ErrorCode::TMC_IDLER_BIT) {
93+
if (ec & (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION == (uint16_t)ErrorCode::MMU_SOLDERING_NEEDS_ATTENTION)
94+
return FindErrorIndex(ERR_ELECTRICAL_IDLER_SELFTEST_FAILED);
95+
}
8296

8397
// TMC-related errors - multiple of these can occur at once
8498
// - in such a case we report the first which gets found/converted into Prusa-Error-Codes (usually the fact, that one TMC has an issue is serious enough)

0 commit comments

Comments
 (0)