Introduction: Correcting the Issue With On-board EEPROM for the BTT GTR V1.0

NOTE: this has been corrected with the most current versions of Marlin.

As it is; when the I2C EEPROM is enabled and trying to save to it or initializing it will cause the board reset.

Well, I decided to try the build that BTT provided on Github with the GTR

Marlin-bugfix-2.0.x BTT_GTR_V1.0-Demo

Editing the pins_BTT_GTR_V1_0.h file

  • Removed // in front of #define I2C_EEPROM in the pins file.
  • Added this code just below;
#ifdef E2END
	#undef E2END
#endif
#define E2END 0x1FFF // EEPROM end address 24C64 (64Kb = 8KB)

Configuration.h

  • Removed // in front of #define EEPROM_SETTINGS

Complied and flashed this firmware to the GTR. Flash worked with no resetting issues.


Marlin 2.0.5.3

EEPROM failing then board reset just after.

Next, I tried an external I2C EEPROM in the I2C (J65) got the same results.

Checking files I finally came across comparing the GTR Demo Marlin from BTT and the current Marlin 2.0.5.3 and found this file under \buildroot\share\PlatformIO\variants\BIGTREE_SKR_PRO_1v1\variant.h

In the BTT Demo it has this;

//I2C Definitions
#define PIN_WIRE_SDA            PH5
#define PIN_WIRE_SCL            PH4

· In 2.0.5.3 it has this;

// I2C Definitions
#define PIN_WIRE_SDA            PB7
#define PIN_WIRE_SCL            PB6

The BTT Demo has the correct pins that are connected to the on-board EEPROM.

So in 2.0.5.3 variant.h I changed the code to the following;

// I2C Definitions
#if STM32F4X_PIN_NUM >= 176
	#define PIN_WIRE_SDA            PH5
        #define PIN_WIRE_SCL            PH4
#else
        #define PIN_WIRE_SDA            PB7
        #define PIN_WIRE_SCL            PB6
#endif

Step 1: Final Code Changes for 2.0.5.x for the BTT GTR On-board EEPROM to Work.

\buildroot\share\PlatformIO\variants\BIGTREE_SKR_PRO_1v1\variant.h

// I2C Definitions
#if STM32F4X_PIN_NUM >= 176
	#define PIN_WIRE_SDA            PH5
        #define PIN_WIRE_SCL            PH4
#else
        #define PIN_WIRE_SDA            PB7
        #define PIN_WIRE_SCL            PB6
#endif

Configuration.h

#define EEPROM_SETTINGS     // Persistent storage with M500 and M501<br>//#define DISABLE_M503        // Saves ~2700 bytes of PROGMEM. Disable for release!
#define EEPROM_CHITCHAT       // Give feedback on EEPROM commands. Disable to save PROGMEM.
#define EEPROM_BOOT_SILENT    // Keep M503 quiet and only give errors during first load
#if ENABLED(EEPROM_SETTINGS)
  //#define EEPROM_AUTO_INIT  // Init EEPROM automatically on any errors.
#endif

pins_BTT_GTR_V1_0.h

#define I2C_EEPROM
//#define SRAM_EEPROM_EMULATION                   // Use BackSRAM-based EEPROM emulation
//#define FLASH_EEPROM_EMULATION                  // Use Flash-based EEPROM emulation
#ifdef E2END
   #undef E2END
#endif
#define E2END 0x1FFF // EEPROM end address 24C64 (64Kb = 8KB)