Auf dem SKR V1.4 (Turbo / und andere Boards von BTT) befindet sich eine EEPROM Emulation, die Werte im Flashspeicher des Boards speichert.
Dies soll Einstellungen speichern, ohne die Firmware neu erstellen zu müssen, vor allem, wenn es Werte sind, die ab und zu angepasst werden (sollen), z.B. Temperaturkalibrierungsdaten.
Bigtreetech hat diese Emulation sicherlich auch aus Kostengründen genutzt, um preiswerte Boards anbieten zu können.
Viele Nutzer meinen jedoch, dass es nicht so ideal wäre, diese Emulation intensiver zu nutzen, denn wenn es Probleme mit dem Flash gibt, wäre u.U. das ganze Board hinüber/unbrauchbar, wenn sich diese Speicherzellen verabschieden und/oder nur noch teilweise arbeiten.
Darauf hat Bigtreetech reagiert und bietet nun als extra Modul eine kleine Platine an, die ein echtes EEPROM trägt und im Notfall muss nur das gesteckte IC Modul gewechselt werden.
Scheinbar soll auch ein größeres Modul passen, das habe ich aber weder probiert, noch weiter verfolgt, daher ohne Gewähr.
Hier die Oberseite und Unterseite des Moduls:
Mitgeliefert wurden in meiner Bestellung noch vier Jumperkabel.
Diese Jumperkabel sind vor allem dann nötig, wenn man das Touchdisplay von BTT nutzt, denn leider ist der I2C Anschluss für dieses EEPROM Modul auf dem SKR V1.4 (Turbo) so platziert, dass beim Einstecken des Moduls das TFT Touch Kabel im Weg ist.
Dann liegt darunter auch noch der Anschluss für das WLan Modul, welches aber meist ebenfalls auf Grund geänderter Pins per Jumperkabel verbunden werden muss (siehe Infos in der Anleitung zum WLan Modul).
Da ich das Modul bei mir aus oben genannten Platzgründen nicht direkt einstecken kann, habe ich das Modul so verkabelt (als wenn es eben direkt eingesteckt wäre):
Wichtig auch die Einstellung der kleinen Schiebeschalter auf dem oberen rechten Bild (gelb/rot markiert).
Sobald das Modul aufgesteckt oder verkabelt wurde, muss folgende Änderung an der erweiterten Konfiguration vorgenommen werden.
Dafür öffnen wir die Datei
C:\Marlin-2.0.x\Marlin\Configuration_adv.h
C:\Marlin-bugfix-2.0.x\Marlin/Configuration_adv.h
und hängen folgenden Code ganz an das Ende der Datei:
//
// BTT EEPROM Module V1.0 enable
//
#define I2C_EEPROM
#define MARLIN_EEPROM_SIZE (32*1024) // 32KB
Das Modul hat standardmäßig 256K (32 KB) und daher ist hier auch diese Größe aktiviert.
Ob größere Chips mit mehr Speicher funktionieren, habe ich allerdings nicht getestet und daher bliebe nur eigenes Testen.
Damit ist nun die Grundvoraussetzung für den Betrieb des realen EEPROMs gegeben (vorher funktionierte nur eine Emulation auf dem Hauptprozessor des Boards).
Um die Konfiguration zu vervollständigen, müssen wir Marlin noch mitteilen, dass und wie dieses Modul benutzt werden soll.
Dazu öffnen wir nun die folgende Konfigurationsdatei
C:\Marlin-2.0.x\Marlin\Configuration.h
C:\Marlin-bugfix-2.0.x\MarlinConfiguration.h
und springen zum Bereich Additional Features und dort direkt darunter zur EEPROM Konfiguration, die nach unserer Anpassung so aussehen sollte:
#define EEPROM_SETTINGS // Persistent storage with M500 and M501
//#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
Hierbei ist lediglich in der ersten Zeile das "//" am Anfang zu entfernen, um diese Option zu aktivieren.
Die Funktion EEPROM_AUTO_INIT wird bewusst deaktiviert gelassen, da man sonst im Fehlerfall alle gespeicherten Einstellungen wie z.B. Bed_Leveling Parameter verliert.
Sollte ein Fehler trotzdem eine Initialisierung des EEPROMS benötigen, kann man das immer noch nachträglich machen.
Wie in den Einstellungen auch zu lesen ist, werden hier die drei GCode Befehle unterstützt:
M500 - Store settings to EEPROM.
M501 - Read settings from EEPROM. (i.e., Throw away unsaved changes)
M502 - Revert settings to "factory" defaults. (Follow with M500 to init the EEPROM.)
Übersetzt:
M500 - Speichere Einstellungen ins EEPROM.
M501 - Lese Einstellungen vom EEPROM. (z.B., Verwerfe nicht gespeicherte Werte)
M502 - Stelle "Werkseinstellungen" wieder her. (Gefolgt von M500 zum initialisieren des EEPROMs.)
Das war es auch schon und das Modul sollte seinen Dienst verrichten, sobald man die Firmware neu erstellt und auf das Mainboard geflasht hat.
Nach dem Flashen der Firmware und erscheint höchstwahrscheinlich auf dem Display (hier im Marlin Modus) nach dem Einschalten die folgende Abfrage:
EEPROM Version ERROR
Werkseinstellungen?
Ignore Reseten
(Schreibfehler wirklich vorhanden)
Hier rate ich zum "Reseten", damit das EEPROM mit sinnvollen Werten vorkonfiguriert wird.
Das Ganze kann auch getestet werden, indem man mit einem Programm dann die Befehle M502 gefolgt von M500 eingibt (Reset und Vorkonfiguration) und anschließend mit M501 die Werte ausließt.
Ist alles ok, wird kein Fehler angezeigt und die gespeicherte Konfiguration ausgegeben.
Um das Ganze zu prüfen, ob man nun wirklich mit dem externen EEPROM arbeitet, statt mit der internen Emulation, kann man für den obigen Test einfach die Stromversorgung vom Modul abziehen und den Drucker wieder einschalten.
Jetzt sollte wieder die obige Abfrage nach einem Reset erfolgen, solange, bis man das Modul (im ausgeschalteten Zustand) wieder mit Strom versorgt und den Test wiederholt.
Die Abfrage sollte dann wieder verschwinden.
Hier geht es zurück zur Startseite: Startseite