API-004: I2C EEPROM Bit-Banding
Diese API ermöglicht das Benutzen von I2C EEPROM (electrically erasable read only memory = elektrisch löschbarer Festspeicher). Man kann einzelne Bytes in den EEPROM Speicher schreiben und aus dem EEPROM lesen.
- Programmiersprache: ANSI C
- Mikrocontroller: AT89C5131A - 8051 Mikrocontroller
- IDE: µVision 4
- Compiler: Cx51 V9.5

API - I2C EEPROM Bit-Banding
API Beschreibung
Diese API ermöglicht das Benutzen von I2C EEPROM (electrically erasable read only memory = elektrisch löschbarer Festspeicher). Man kann einzelne Bytes in den EEPROM Speicher schreiben und aus dem EEPROM lesen.
Diese API ist mit I2C-006 1k EEPROM und I2C-007 64k EEPROM kompatibel.
Folgende Voraussetzungen müssen erfüllt sein:
Diese API ist mit I2C-006 1k EEPROM und I2C-007 64k EEPROM kompatibel.
Folgende Voraussetzungen müssen erfüllt sein:
- Inkludierung der „API-002: Emulator der I2C (TWI) Schnittstelle“ wird vorausgesetzt.
- Die Übertragung der Bytes über I2C Schnittstelle darf nicht unterbrochen werden, z. B. von einem Interrupt.
- Jeder Schreibzyklus wird mit einer Stoppbedingung beendet, d.h. tWR „Write Cycle Time“ (EEPROM interner Schreibzyklus, während dieser Zeit reagiert EEPROM auf keinen Befehl von außen) von ca. 5ms muss eingehalten werden.
Programmiersprache: | ANSI C |
Mikrocontroller: | AT89C5131A - 8051 MK |
IDE: | µVision 4 |
Compiler: | Cx51 V9.5 |
Dateien
- eeprom.c - Datei mit C-Funktionen
- eeprom.h - Header Datei
- eeprom_config.h - Konfiguration Datei
Funktions-Deklarationen
// Schreibe ein Byte in den EEPROM errorCodeEEPROM_t EEPROM_WriteByte(unsigned int address, unsigned char dataByte); // Lese ein Byte aus dem EEPROM errorCodeEEPROM_t EEPROM_ReadByte(unsigned int address, unsigned char* dataByte);
Konstanten
Error Code errorCodeEEPROM_t
// Error Code EEPROM typedef enum _errorCodeEEPROM { EEPROM_SUCCESS = 0x00, EEPROM_BUSY = 0x01, EEPROM_WRITE_FAIL = 0x02, EEPROM_READ_FAIL = 0x03, EEPROM_ERROR = 0x04 } errorCodeEEPROM_t;
Konfiguration
In eeprom_config.h kann man die EEPROM-API Parameter ändern. Die Einstellungen sind in zwei Gruppen unterteilt:
- stack2Learn Modulauswahl
- Einstellung der Slave Adresse
Modulauswahl
Öffnen Sie die Datei eeprom_config.h. In der Zeile 43 steht folgende Präprozessor-Direktive:#define EEPROM_MODUL 0x01
- 0x01 bedeutet: Verwendeter Modul ist I2C-006 1k EEPROM
- 0x02 bedeutet: Verwendeter Modul ist I2C-007 64k EEPROM
Einstellung der Slave Adresse
Öffnen Sie die Datei eeprom_config.h. In der Zeile 74 steht folgende Präprozessor-Direktive:#define EEPROM_SLAVE_ADDRESS 0xA0
Standard Wert der symbolischen Konstanten EEPROM_SLAVE_ADDRESS ist 0xA0, d.h. alle Jumper A0, A1, A2 stehen auf null.
Machen Sie die eeprom_config.h in µVision 4 auf. Klicken Sie auf der unteren Leiste auf den „Configuration Wizard“. Es öffnet sich eine „GUI-like“Oberfläche. Über diese Oberfläche kann man alle Einstellungen auf einfachere Weise ändern. Die Standard Einstellungen kann man dem Bild unten entnehmen.


EEPROM Einstellungen über Configuration Wizard
Es ist möglich, die Einstellungen über Configuration Wizard vorzunehemen.Machen Sie die eeprom_config.h in µVision 4 auf. Klicken Sie auf der unteren Leiste auf den „Configuration Wizard“. Es öffnet sich eine „GUI-like“Oberfläche. Über diese Oberfläche kann man alle Einstellungen auf einfachere Weise ändern. Die Standard Einstellungen kann man dem Bild unten entnehmen.

Funktionen
errorCodeEEPROM_t EEPROM_WriteByte (unsigned int address, unsigned char dataByte);
Diese Funktion schreibt einen Byte (8-bit) via I2C Schnittstelle in den EEPROM Speicher.
An diese Funktion werden die Adresse der Speicherzelle im EEPROM (address) und die zu speichernde Information (dataByte) übergeben.
Bitte beachten Sie, dass Funktion EEPROM_WriteByte() eine Stoppbedingung sendet und beendet den Schreibzyklus. Der EEPROM Speicher kann den nächsten Befehl, erst nach dem er die interne Speicherung von dem empfangenen Byte beendet hat (ca. 5ms), bearbeiten.
Diese Funktion verwendet folgende globale Konstanten:
unsigned char dataByte - Byte mit Daten
An diese Funktion werden die Adresse der Speicherzelle im EEPROM (address) und die zu speichernde Information (dataByte) übergeben.
Bitte beachten Sie, dass Funktion EEPROM_WriteByte() eine Stoppbedingung sendet und beendet den Schreibzyklus. Der EEPROM Speicher kann den nächsten Befehl, erst nach dem er die interne Speicherung von dem empfangenen Byte beendet hat (ca. 5ms), bearbeiten.
Diese Funktion verwendet folgende globale Konstanten:
- EEPROM_NUMBER_OF_ADDRESS (eeprom_config.h) - Anzahl der Speicherzellen im EEPROM
- EEPROM_SLAVE_ADDRESS (eeprom_config.h) - Slave Adresse des EEPROMs
- EEPROM_MODUL (eeprom_config.h) - Verwendetes Modul
- EmuI2C_SendData() aus API-002: Emulator der I2C (TWI) Schnittstelle
Funktionstyp
errorCodeEEPROM_t - gibt den Status der Übertragung wieder. Mögliche Werte sind:Konstanten Name | Wert | Beschreibung |
---|---|---|
EEPROM_SUCCESS | 0x00 | Übertragung erfolgreich |
EEPROM_BUSY | 0x01 | Unbekannter Fehler |
EEPROM_WRITE_FAIL | 0x02 | Schreiben fehlgeschlagen |
EEPROM_ERROR | 0x04 | Allgemeiner Fehler |
Übergabeparameter
unsigned int address - Addresse der Speicherzelle im EEPROM Seicher (0x00 bis EEPROM_NUMBER_OF_ADDRESS (eeprom_config.h))unsigned char dataByte - Byte mit Daten
errorCodeEEPROM_t EEPROM_ReadByte (unsigned int address, unsigned char dataByte);
Diese Funktion liest einen Byte (8-bit) via I2C Schnittstelle aus dem EEPROM Speicher.
An diese Funktion werden die Adresse der Speicherzelle im EEPROM (address) und der Pointer auf eine Variable (* dataByte), für den empfangenen Byte, übergeben.
Diese Funktion verwendet folgende globale Konstanten:
unsigned char* dataByte - Pointer auf eine Variable für das empfangene Byte
An diese Funktion werden die Adresse der Speicherzelle im EEPROM (address) und der Pointer auf eine Variable (* dataByte), für den empfangenen Byte, übergeben.
Diese Funktion verwendet folgende globale Konstanten:
- EEPROM_NUMBER_OF_ADDRESS (eeprom_config.h) - Anzahl der Speicherzellen im EEPROM
- EEPROM_SLAVE_ADDRESS (eeprom_config.h) - Slave Adresse des EEPROMs
- EEPROM_MODUL (eeprom_config.h) - Verwendetes Modul
- EmuI2C_SendData() aus API-002: Emulator der I2C (TWI) Schnittstelle
- EmuI2C_ReceiveData() aus API-002: Emulator der I2C (TWI) Schnittstelle
Funktionstyp
errorCodeEEPROM_t - gibt den Status der Übertragung wieder. Mögliche Werte sind:Konstanten Name | Wert | Beschreibung |
---|---|---|
EEPROM_SUCCESS | 0x00 | Übertragung erfolgreich |
EEPROM_BUSY | 0x01 | Unbekannter Fehler |
EEPROM_WRITE_FAIL | 0x02 | Schreiben fehlgeschlagen |
EEPROM_READ_FAIL | 0x03 | Empfang fehlgeschlagen |
EEPROM_ERROR | 0x04 | Allgemeiner Fehler |
Übergabeparameter
unsigned int address - Addresse der Speicherzelle im EEPROM Seicher (0x00 bis EEPROM_NUMBER_OF_ADDRESS (eeprom_config.h))unsigned char* dataByte - Pointer auf eine Variable für das empfangene Byte
Beispiel
#include "eeprom.h" // EEPROM Header #include "eeprom_config.h" // EEPROM API Config void main (void){ unsigned int address = 0x00; unsigned char dataByteToSend = 0xAA; unsigned char dataByteFromEEPROM = 0x00; // Byte schreiben EEPROM_WriteByte(address, dataByteToSend); // warten ca 5ms wait_ms(5); // Byte lesen EEPROM_ReadByte(address, &dataByteFromEEPROM); while(1); }