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 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:

  • 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.



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-likeOberflä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:

  • 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
Diese Funktion verwendet folgende externe Funktionen:

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:

  • 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
Diese Funktion verwendet folgende externe Funktionen:

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);
}