Lektion 6: EEPROM & Co.

In diesem Kapitel möchten wir dir die Kleinigkeiten rund um die Konnekting-Bibliothek näher bringen. Hier werden auch Frangen aus dem Forum aufgegriffen und die Lösungen näher erläutert.

EEPROM

Externes EEPROM

Wie in der letzten Lektion bereits erwähnt, nutzt Konnekting ein EEPROM, um Gruppenadressen und Parameter zu speichern. Da der SAMD21G18 kein internes EEPROM besitzt, muss ein externes EEPROM her. Dazu eignet sich z.B. ein 24AA256 (32 K x 8). Wenn deine Applikation viele Daten nichtflüchtig speichert, dann solltest du prüfen, ob du damit auskommst. Der DemoSketch bringt die EEPROM_24AA256.h mit den Funktionen für den Zugriff mit. Du musst nur noch die Funktionspointer an Konnekting übergeben

    Wire.begin();
    Konnekting.setMemoryReadFunc(&readMemory);
    Konnekting.setMemoryWriteFunc(&writeMemory);
    Konnekting.setMemoryUpdateFunc(&updateMemory);
    Konnekting.setMemoryCommitFunc(&commitMemory);

und danach dann Konnekting initialisieren.

Flash als EEPROM

Konnekting greift hauptsächlich lesend auf das EEPROM zu. Wenn deine Applikation nur wenige Schreibzugriffe durchführt, dann kannst du auch den internen Flash-Speicher als EEPROM-Ersatz nutzen. Dazu gibt es die KonnektingFlashStorage-Bibliothek. Diese wird zunächst eingebunden und ein Speicherbereich festgelegt:

// internes Flash als EEPROM
#include <FlashAsEEPROM.h>
Flash(my_eeprom_storage, 1024);

Nun benötigt man noch die vier Funktionen für den Zugriff:

byte readMemory(int index) {
	return EEPROM.read(index);
}

void writeMemory(int index, byte val) {
	EEPROM.write(index,val);
}

void updateMemory(int index, byte val) {
	EEPROM.update(index,val);
}

void commitMemory() {
	EEPROM.commit();
}

Im Setup muss das EEPROM initialisiert werden:

	// tell the EEPROM implementation which flash to use
	EEPROM.setStorage(&my_eeprom_storage);

Danach geht es dann wie beim externen EEPROM weiter.

ACHTUNG! Der Flash-Speicher wird beim Neuprogrammieren der Firmware überschrieben. Das Gerät muss nach dem Flashen neu parametriert werden.

EEPROM in der Applikation

Damit deine Applikation weiß, wo sie ihre Daten speichern kann, stellt Konnekting eine Funktion bereit, die den Beginn des freien EEPROM-Speichers zurückgibt. Lesen der ersten Speicherstelle für die Applikation sieht so aus:

a = EEPROM.read(Konnekting.getFreeEepromOffset());

<– Lektion 5: Nun mit Konnekting