From 752aec37fb363f7859f3b53a8b2907672e5edab1 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 19 Sep 2018 14:36:26 +0200 Subject: [PATCH 1/6] M500 EEPROM version changed; if EEPROM_M500_SIZE is not updated, data are not stored --- Firmware/ConfigurationStore.cpp | 22 ++++++++++++++-------- Firmware/Marlin_main.cpp | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 264486b7..4984c152 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -57,13 +57,14 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size, char* name) //====================================================================================== #define EEPROM_OFFSET 20 +#define EEPROM_M500_SIZE 188 //bytes // IMPORTANT: Whenever there are changes made to the variables stored in EEPROM -// in the functions below, also increment the version number. This makes sure that +// in the functions below, also increment the version number and update EEPROM_M500_SIZE. This makes sure that // the default values are used whenever there is a change to the data, to prevent // wrong data being written to the variables. // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. -#define EEPROM_VERSION "V2" +#define EEPROM_VERSION "V3" #ifdef EEPROM_SETTINGS void Config_StoreSettings(uint16_t offset) @@ -142,12 +143,17 @@ void Config_StoreSettings(uint16_t offset) EEPROM_WRITE_VAR(i,max_feedrate_silent); EEPROM_WRITE_VAR(i,max_acceleration_units_per_sq_second_silent); - - char ver2[4]=EEPROM_VERSION; - i=offset; - EEPROM_WRITE_VAR(i,ver2); // validate data - SERIAL_ECHO_START; - SERIAL_ECHOLNPGM("Settings Stored"); + if (EEPROM_M500_SIZE + EEPROM_OFFSET == i) { + char ver2[4] = EEPROM_VERSION; + i = offset; + EEPROM_WRITE_VAR(i, ver2); // validate data + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Settings Stored"); + } + else { //size of eeprom M500 section probably changed by mistake and data are not valid; do not validate data by storing eeprom version + //M500 EEPROM section will be erased on next printer reboot and default vaules will be used + puts_P(PSTR("Data stored to EEPROM not valid.")); + } } #endif //EEPROM_SETTINGS diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 2544dce6..5ca589fa 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1642,7 +1642,7 @@ void setup() if (!previous_settings_retrieved) { lcd_show_fullscreen_message_and_wait_P(_i("Old settings found. Default PID, Esteps etc. will be set.")); //if EEPROM version or printer type was changed, inform user that default setting were loaded////MSG_DEFAULT_SETTINGS_LOADED c=20 r=4 - erase_eeprom_section(EEPROM_OFFSET, 156); //erase M500 part of eeprom + erase_eeprom_section(EEPROM_OFFSET, EEPROM_M500_SIZE); //erase M500 part of eeprom } if (eeprom_read_byte((uint8_t*)EEPROM_WIZARD_ACTIVE) == 1) { lcd_wizard(0); From 0a5394a20e10e2b85ab6d961b6944c4992d6c462 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 19 Sep 2018 15:10:10 +0200 Subject: [PATCH 2/6] defines moved to eeprom.h --- Firmware/ConfigurationStore.cpp | 2 -- Firmware/eeprom.h | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 4984c152..e0f887fe 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -56,8 +56,6 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size, char* name) } //====================================================================================== -#define EEPROM_OFFSET 20 -#define EEPROM_M500_SIZE 188 //bytes // IMPORTANT: Whenever there are changes made to the variables stored in EEPROM // in the functions below, also increment the version number and update EEPROM_M500_SIZE. This makes sure that // the default values are used whenever there is a change to the data, to prevent diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 54a21648..36272e65 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -183,6 +183,6 @@ #define EEPROM_FIRMWARE_PRUSA_MAGIC 0 #define EEPROM_OFFSET 20 //offset for storing settings using M500 -//#define EEPROM_OFFSET +#define EEPROM_M500_SIZE 188 //size of M500 eeprom section in bytes #endif // EEPROM_H From 1c33b673c08f89a9fd9e1de9f832bfa9ff7a8224 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Wed, 19 Sep 2018 18:43:27 +0200 Subject: [PATCH 3/6] comment update --- Firmware/eeprom.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/eeprom.h b/Firmware/eeprom.h index 36272e65..d79bbd08 100644 --- a/Firmware/eeprom.h +++ b/Firmware/eeprom.h @@ -183,6 +183,6 @@ #define EEPROM_FIRMWARE_PRUSA_MAGIC 0 #define EEPROM_OFFSET 20 //offset for storing settings using M500 -#define EEPROM_M500_SIZE 188 //size of M500 eeprom section in bytes +#define EEPROM_M500_SIZE 188 //size of M500 eeprom section in bytes; if EEPROM_M500_SIZE increases it is necessary to update also EEPROM_VERSION #endif // EEPROM_H From d8dc2eef7a2e6280d9b9669a0f2d39cdef95ebf7 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Fri, 21 Sep 2018 15:42:28 +0200 Subject: [PATCH 4/6] if max_feedrate_silent and max_acceleration_units_per_sq_second_silent were never stored to eeprom, use default values; eeprom_version changed back to V2 --- Firmware/ConfigurationStore.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index e0f887fe..546c774a 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -62,7 +62,7 @@ void _EEPROM_readData(int &pos, uint8_t* value, uint8_t size, char* name) // wrong data being written to the variables. // ALSO: always make sure the variables in the Store and retrieve sections are in the same order. -#define EEPROM_VERSION "V3" +#define EEPROM_VERSION "V2" #ifdef EEPROM_SETTINGS void Config_StoreSettings(uint16_t offset) @@ -323,11 +323,19 @@ bool Config_RetrieveSettings(uint16_t offset) #endif #endif - calculate_extruder_multipliers(); - + calculate_extruder_multipliers(); + int max_feedrate_silent_address = i; EEPROM_READ_VAR(i,max_feedrate_silent); EEPROM_READ_VAR(i,max_acceleration_units_per_sq_second_silent); + //if max_feedrate_silent and max_acceleration_units_per_sq_second_silent were never stored to eeprom, use default values: + float tmp_feedrate[]=DEFAULT_MAX_FEEDRATE_SILENT; + unsigned long tmp_acceleration[]=DEFAULT_MAX_ACCELERATION_SILENT; + for (uint8_t axis = X_AXIS; axis <= E_AXIS; axis++) { + if (eeprom_read_dword((uint32_t*)(max_feedrate_silent_address + axis * 4)) == 0xffffffff) max_feedrate_silent[axis] = tmp_feedrate[axis]; + if (max_acceleration_units_per_sq_second_silent[axis] == 0xffffffff) max_acceleration_units_per_sq_second_silent[axis] = tmp_acceleration[axis]; + } + #ifdef TMC2130 for (uint8_t j = X_AXIS; j <= Y_AXIS; j++) { From 740e922b87314e5f1af66719b989df62a68db3e7 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 24 Sep 2018 16:00:23 +0200 Subject: [PATCH 5/6] EEPROM M500 block size check for reading stored data added --- Firmware/ConfigurationStore.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 546c774a..227b7afb 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -354,8 +354,18 @@ bool Config_RetrieveSettings(uint16_t offset) // Call updatePID (similar to when we have processed M301) updatePID(); - SERIAL_ECHO_START; - SERIAL_ECHOLNPGM("Stored settings retrieved"); + + if (EEPROM_M500_SIZE + EEPROM_OFFSET == i) { + SERIAL_ECHO_START; + SERIAL_ECHOLNPGM("Stored settings retrieved"); + + } + else { //size of eeprom M500 section probably changed by mistake and data are not valid; default values will be used + puts_P(PSTR("Data read from EEPROM not valid.")); + Config_ResetDefault(); + previous_settings_retrieved = false; + } + } else { From cd438c5c00c05c9a21b91c51f4e7f1d4e99f5c26 Mon Sep 17 00:00:00 2001 From: PavelSindler Date: Mon, 24 Sep 2018 16:01:31 +0200 Subject: [PATCH 6/6] whitespace --- Firmware/ConfigurationStore.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Firmware/ConfigurationStore.cpp b/Firmware/ConfigurationStore.cpp index 227b7afb..b1500816 100644 --- a/Firmware/ConfigurationStore.cpp +++ b/Firmware/ConfigurationStore.cpp @@ -360,7 +360,7 @@ bool Config_RetrieveSettings(uint16_t offset) SERIAL_ECHOLNPGM("Stored settings retrieved"); } - else { //size of eeprom M500 section probably changed by mistake and data are not valid; default values will be used + else { //size of eeprom M500 section probably changed by mistake and data are not valid; default values will be used puts_P(PSTR("Data read from EEPROM not valid.")); Config_ResetDefault(); previous_settings_retrieved = false;