I2C EEPROM sequentiell lesen/schreiben mit ATmega

Gast #214667
Lesenswert?
• ▲
▼
Habe mal eine spezielle Frage zum schreiben und lesen eines I2C EEPROMs
(24C256) mit einem ATmega128.
Einzelne Bytes kann ich auf eine gezielte Adresse schreiben und auch
ein zeln wieder auslesen.
Laut Datenblatt des EEPROMs kann ich 64 Bytes in Folge senden und den
Speicher auch durchgehend auslesen. Doch nach jedem eingelesenen Byte
sendet mein µC immer ein NACK was bedeutet den Vorgang abzuschließen.
64 mal schreiben kann ich,doch wie kann ich meinem µC klar machen das
er durchgehend einlesen soll und kein NACK sondern ACK sendet?
Mal schauen
Gast
Lesenswert?
• ▲
▼
Ich schreibe i C und nutze die TWI Register im ATmega. INTs sind nicht
aktiviert.
~~~~~~~~~~~~~~~~~~~~~~
//EEPROM nochnals anspechen, jetzt LESEN-Modus

TWDR = EXT_EEPROM_ADR_READ;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT)));
if((TWSR & 0xF8) != MR_SLA_ACK)
    error(ERR_NO_MR_SLA_ACK);

// Jetzt BYTE einlesen
TWCR = (1 << TWINT) | (1 << TWEN);
while(!(TWCR & (1<<TWINT)));
    readchar = TWDR;

if(((TWSR & 0xF8) != MR_DATA_ACK) && ((TWSR & 0xF8) != MR_DATA_NACK))
   error(ERR_NO_MR_SLA_ACK);
~~~~~~~~~~~~~~~~~
Daten werden immer brav eingelesen, aber immer ein NACK gesendet.

mal sehen
Gast
Lesenswert?
• ▲
▼
Hi,

bei mir ist leider kein Groschen gefallen. Ich bin I2C-Anfänger und
will auch einen 24C256 verwenden. Aber ich habe keine Ahnung, wo ich
anfangen soll und vor allen Dingen wie. Es wäre toll, wenn du mir
helfen könntest.

Steffen
Gast
Lesenswert?
• ▲
▼
Hallo,

im TWI-Demo des AVR-LibC Manuals ist die I2C-Ansteuerung eines EEPROMs
sehr detailliert beschrieben.
Ich konnte als C-Anfänger den Code leicht auf 256kBit-EEPROMs
erweitern.(zusätzliche 8-Adressbits für EEPROM übertragen)

Robert

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.