From b7806bf25f507a16b5c514bc449cfe5a8b0729e0 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Fri, 28 Jan 2022 15:22:08 +0100 Subject: [PATCH 01/10] Crash if pullups get enabled on the thermistor inputs --- Firmware/Marlin.h | 1 + Firmware/Marlin_main.cpp | 4 ++++ Firmware/stepper.cpp | 4 ++++ Firmware/temperature.cpp | 5 +++++ Firmware/xflash_dump.h | 2 ++ 5 files changed, 16 insertions(+) diff --git a/Firmware/Marlin.h b/Firmware/Marlin.h index 85c4dae1..f099c86b 100755 --- a/Firmware/Marlin.h +++ b/Firmware/Marlin.h @@ -500,6 +500,7 @@ void raise_z_above(float target, bool plan=true); extern "C" void softReset(); void stack_error(); +void pullup_error(bool fromTempISR); extern uint32_t IP_address; diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 5a57808d..fbdeac97 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1754,6 +1754,10 @@ void stack_error() { crash_and_burn(dump_crash_reason::stack_error); } +void pullup_error(bool fromTempISR) { + crash_and_burn(fromTempISR ? dump_crash_reason::bad_pullup_temp_isr : dump_crash_reason::bad_pullup_step_isr); +} + void trace(); diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index c9cb8beb..6a667370 100644 --- a/Firmware/stepper.cpp +++ b/Firmware/stepper.cpp @@ -299,6 +299,10 @@ ISR(TIMER1_COMPA_vect) { if (sp < SP_min) SP_min = sp; #endif //DEBUG_STACK_MONITOR + // check for faulty pull-ups enabled on thermistor inputs + if (PORTF & 0x5F) + pullup_error(false); + #ifdef LIN_ADVANCE advance_isr_scheduler(); #else diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index 87ffc614..ec55c39b 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -1683,6 +1683,11 @@ void adc_ready(void) //callback from adc when sampling finished FORCE_INLINE static void temperature_isr() { + // check for faulty pull-ups enabled on thermistor inputs + if (PORTF & 0x5F) + pullup_error(true); + + if (!temp_meas_ready) adc_cycle(); lcd_buttons_update(); diff --git a/Firmware/xflash_dump.h b/Firmware/xflash_dump.h index 6ece99c6..d68b3639 100644 --- a/Firmware/xflash_dump.h +++ b/Firmware/xflash_dump.h @@ -8,6 +8,8 @@ enum class dump_crash_reason : uint8_t stack_error, watchdog, bad_isr, + bad_pullup_temp_isr, + bad_pullup_step_isr, }; #ifdef XFLASH_DUMP From 0b8ecfbf7c6f64cf9a03b4965a763438516ef7b1 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Mon, 7 Feb 2022 13:28:48 +0100 Subject: [PATCH 02/10] Add Test Pullup Crash menu --- Firmware/ultralcd.cpp | 6 ++++++ Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 2 ++ Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 2 ++ 3 files changed, 10 insertions(+) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index daac8d71..ad1186f9 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1858,6 +1858,9 @@ static void lcd_stack_crash() } #endif +void TestPullupCrash() { + PORTF |= 0x01; +} //! @brief Show Support Menu //! @@ -2069,6 +2072,9 @@ static void lcd_support_menu() #endif //MK1BP +#ifdef DEBUG_PULLUP_CRASH + MENU_ITEM_FUNCTION_P(_n("Test Pullup Crash"), TestTestPullupCrash); +#endif // DEBUG_PULLUP_CRASH MENU_END(); } diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index aacb7cb7..54937894 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -168,6 +168,8 @@ #define DEBUG_DCODE3 #define DEBUG_DCODE6 +#define DEBUG_PULLUP_CRASH //Test Pullup crash + //#define DEBUG_BUILD //#define DEBUG_SEC_LANG //secondary language debug output at startup //#define DEBUG_XFLASH //debug external spi flash diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index 8659c582..73eb73ff 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -170,6 +170,8 @@ #define DEBUG_DCODE3 #define DEBUG_DCODE6 +#define DEBUG_PULLUP_CRASH //Test Pullup crash + //#define DEBUG_BUILD //#define DEBUG_SEC_LANG //secondary language debug output at startup //#define DEBUG_XFLASH //debug external spi flash From db79ae9d5e51ea8682d7927c46f3771369ece4d3 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Mon, 7 Feb 2022 13:31:55 +0100 Subject: [PATCH 03/10] Forgot #ifdef DEBUG_PULLUP_CRASH --- Firmware/ultralcd.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index ad1186f9..b19786d9 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1858,9 +1858,11 @@ static void lcd_stack_crash() } #endif +#ifdef DEBUG_PULLUP_CRASH void TestPullupCrash() { PORTF |= 0x01; } +#ifdef DEBUG_PULLUP_CRASH //! @brief Show Support Menu //! From b3a53f64369b0af5aa76f9bac560737bc2481fa2 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Mon, 7 Feb 2022 14:41:56 +0200 Subject: [PATCH 04/10] Fix build --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index b19786d9..0f7e1a97 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2075,7 +2075,7 @@ static void lcd_support_menu() #endif //MK1BP #ifdef DEBUG_PULLUP_CRASH - MENU_ITEM_FUNCTION_P(_n("Test Pullup Crash"), TestTestPullupCrash); + MENU_ITEM_FUNCTION_P(_n("Test Pullup Crash"), TestPullupCrash); #endif // DEBUG_PULLUP_CRASH MENU_END(); } From 5d29c4fab27734e7ecf5f4ab03a0f79fc71ad3b3 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Mon, 7 Feb 2022 13:49:56 +0100 Subject: [PATCH 05/10] Fix build for real this time --- Firmware/ultralcd.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 0f7e1a97..a835fee7 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -1862,7 +1862,7 @@ static void lcd_stack_crash() void TestPullupCrash() { PORTF |= 0x01; } -#ifdef DEBUG_PULLUP_CRASH +#endif // DEBUG_PULLUP_CRASH //! @brief Show Support Menu //! From c06ec9d05b9320f09e3fba18ade8f221c187a896 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Mon, 7 Feb 2022 13:56:46 +0100 Subject: [PATCH 06/10] Add pullup error test to define --- Firmware/stepper.cpp | 2 ++ Firmware/temperature.cpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index 6a667370..e83876b8 100644 --- a/Firmware/stepper.cpp +++ b/Firmware/stepper.cpp @@ -299,9 +299,11 @@ ISR(TIMER1_COMPA_vect) { if (sp < SP_min) SP_min = sp; #endif //DEBUG_STACK_MONITOR +#ifdef DEBUG_PULLUP_CRASH // check for faulty pull-ups enabled on thermistor inputs if (PORTF & 0x5F) pullup_error(false); +#endif // DEBUG_PULLUP_CRASH #ifdef LIN_ADVANCE advance_isr_scheduler(); diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index ec55c39b..c1d06c44 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -1683,9 +1683,11 @@ void adc_ready(void) //callback from adc when sampling finished FORCE_INLINE static void temperature_isr() { +#ifdef DEBUG_PULLUP_CRASH // check for faulty pull-ups enabled on thermistor inputs if (PORTF & 0x5F) pullup_error(true); +#endif // DEBUG_PULLUP_CRASH if (!temp_meas_ready) adc_cycle(); From 8d0af30aa7dc638df8d994e712b24efd53a5d129 Mon Sep 17 00:00:00 2001 From: 3d-gussner <3d.gussner@gmail.com> Date: Mon, 7 Feb 2022 19:41:14 +0100 Subject: [PATCH 07/10] Update doxygen documentation --- Firmware/eeprom.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 49701107..befd1e57 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -327,7 +327,13 @@ static_assert(sizeof(Sheets) == EEPROM_SHEETS_SIZEOF, "Sizeof(Sheets) is not EEP | 0x0D05 3333 | uint32_t | EEPROM_JOB_ID | ??? | 00 00 00 00h | Job ID used by host software | D3 only | D3 Ax0d05 C4 | 0x0D04 3332 | uint8_t | EEPROM_ECOOL_ENABLE | ffh 255 | ^ | Disable extruder motor scaling for non-farm print | LCD menu | D3 Ax0d04 C1 | ^ | ^ | ^ | 2ah 42 | ^ | Enable extruder motor scaling for non-farm print | ^ | D3 Ax0d04 C1 -| 0x0D03 3321 | uint8_t | EEPROM_FW_CRASH_FLAG | 01h 1 | ff/00 | Last FW crash reason (dump_crash_reason) | D21/D22 | D3 Ax0d03 C1 +| 0x0D03 3321 | uint8_t | EEPROM_FW_CRASH_FLAG | ffh 255 | ffh 255 | Last FW crash reason (dump_crash_reason) | D21/D22 | D3 Ax0d03 C1 +| ^ | ^ | ^ | 00h 0 | ^ | manual | ^ | ^ +| ^ | ^ | ^ | 01h 1 | ^ | stack_error | ^ | ^ +| ^ | ^ | ^ | 02h 2 | ^ | watchdog | ^ | ^ +| ^ | ^ | ^ | 03h 3 | ^ | bad_isr | ^ | ^ +| ^ | ^ | ^ | 04h 4 | ^ | bad_pullup_temp_isr | ^ | ^ +| ^ | ^ | ^ | 05h 5 | ^ | bad_pullup_step_isr | ^ | ^ | Address begin | Bit/Type | Name | Valid values | Default/FactoryReset | Description | Gcode/Function| Debug code | :--: | :--: | :--: | :--: | :--: | :--: | :--: | :--: From fb1c8ee0a34782bf0fb0d41155f01f282c333bde Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Tue, 8 Feb 2022 10:53:47 +0100 Subject: [PATCH 08/10] Change the pullup test --- Firmware/stepper.cpp | 5 ++++- Firmware/temperature.cpp | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Firmware/stepper.cpp b/Firmware/stepper.cpp index e83876b8..615e8cf7 100644 --- a/Firmware/stepper.cpp +++ b/Firmware/stepper.cpp @@ -301,8 +301,11 @@ ISR(TIMER1_COMPA_vect) { #ifdef DEBUG_PULLUP_CRASH // check for faulty pull-ups enabled on thermistor inputs - if (PORTF & 0x5F) + if ((PORTF & (uint8_t)(ADC_DIDR_MSK & 0xff)) || (PORTK & (uint8_t)((ADC_DIDR_MSK >> 8) & 0xff))) pullup_error(false); +#else + PORTF &= ~(uint8_t)(ADC_DIDR_MSK & 0xff); + PORTK &= ~(uint8_t)((ADC_DIDR_MSK >> 8) & 0xff); #endif // DEBUG_PULLUP_CRASH #ifdef LIN_ADVANCE diff --git a/Firmware/temperature.cpp b/Firmware/temperature.cpp index c1d06c44..2d1f163d 100755 --- a/Firmware/temperature.cpp +++ b/Firmware/temperature.cpp @@ -1685,8 +1685,11 @@ FORCE_INLINE static void temperature_isr() { #ifdef DEBUG_PULLUP_CRASH // check for faulty pull-ups enabled on thermistor inputs - if (PORTF & 0x5F) + if ((PORTF & (uint8_t)(ADC_DIDR_MSK & 0xff)) || (PORTK & (uint8_t)((ADC_DIDR_MSK >> 8) & 0xff))) pullup_error(true); +#else + PORTF &= ~(uint8_t)(ADC_DIDR_MSK & 0xff); + PORTK &= ~(uint8_t)((ADC_DIDR_MSK >> 8) & 0xff); #endif // DEBUG_PULLUP_CRASH From 5c0d2767a8f4dda746b8b71f18cf8a9ecbaad0a9 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Tue, 8 Feb 2022 11:18:09 +0100 Subject: [PATCH 09/10] Move the test to the experimental menu . --- Firmware/ultralcd.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index a835fee7..081d0534 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -2073,10 +2073,6 @@ static void lcd_support_menu() #endif /* DEBUG_BUILD */ #endif //MK1BP - -#ifdef DEBUG_PULLUP_CRASH - MENU_ITEM_FUNCTION_P(_n("Test Pullup Crash"), TestPullupCrash); -#endif // DEBUG_PULLUP_CRASH MENU_END(); } @@ -9071,6 +9067,10 @@ void lcd_experimental_menu() #ifdef TMC2130 MENU_ITEM_TOGGLE_P(_N("E-cool mode"), UserECoolEnabled()?_T(MSG_ON):_T(MSG_OFF), UserECool_toggle);////MSG_MENU_ECOOL c=18 #endif + +#ifdef DEBUG_PULLUP_CRASH + MENU_ITEM_FUNCTION_P(_N("Test Pullup Crash"), TestPullupCrash); +#endif // DEBUG_PULLUP_CRASH MENU_END(); } From a1711f727e9bfa080bdf19a0ff1b2cefdc759974 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Tue, 15 Feb 2022 09:07:18 +0100 Subject: [PATCH 10/10] Disable pullup crash test --- Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 2 +- Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 54937894..063faea6 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -168,7 +168,7 @@ #define DEBUG_DCODE3 #define DEBUG_DCODE6 -#define DEBUG_PULLUP_CRASH //Test Pullup crash +//#define DEBUG_PULLUP_CRASH //Test Pullup crash //#define DEBUG_BUILD //#define DEBUG_SEC_LANG //secondary language debug output at startup diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index 73eb73ff..266606ff 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -170,7 +170,7 @@ #define DEBUG_DCODE3 #define DEBUG_DCODE6 -#define DEBUG_PULLUP_CRASH //Test Pullup crash +//#define DEBUG_PULLUP_CRASH //Test Pullup crash //#define DEBUG_BUILD //#define DEBUG_SEC_LANG //secondary language debug output at startup