I2C Eeprom Delay zw. Schreib- und Lesezugriff

Gast #3335197
Lesenswert?
• ▲
▼
Hi,

arbeite gerade mit dem LPC1758 Prozessor. Das I2C funktioniert vom 
Prinzip her, allerdings benötigt man anscheinend zwischen einem Schreib- 
und Lesezugriff ein gewisses Delay, ansonsten erhalte ich im Lesezyklus 
nicht die gewünschten Daten vom Eeprom AT24C04 zurück.

Wahrscheinlich liegt es am Eeprom selbst, welches eine gewisse Zeit 
benötigt bis die Daten reingeschrieben worden sind. Welchen Mechanismus 
gibt es um zu erkennen ab wann man wieder einen Lese- oder einen 
weiteren Schreibzyklus erfolgreich an das Eeprom senden kann?

Gruß
Lars
#3335762
Lesenswert?
• ▲
▼
Lars schrieb:
> ansonsten erhalte ich im Lesezyklus
> nicht die gewünschten Daten vom Eeprom AT24C04 zurück.

Dann machst Du was falsch.
Einen Lesezyklus wärend des internen Schreibzyklus ist garnicht möglich, 
da auf die Slaveadresse ein NACK kommt.
Das gleiche gilt auch bei mehreren Schreibzyklen hintereinander.

Du wertest wohl nicht der Status einer I2C-Aktion aus, das muß man aber 
immer tun.

Ich mache das immer so, daß ich vor jedem Adressieren des EEPROM einen 
Timeout von 10ms aufsetze und dann ständig versuche, den EEPROM zu 
adressieren, bis es erfolgreich ist.
Läuft dagegen der Timeout ab, liegt ein Fehler vor.
#3335768
Lesenswert?
• ▲
▼
Georg G. schrieb:
> TK schrieb:
>> Das Verfahren, nach dem Du suchst heisst ACK-Polling.
>
> Leider gibt es je nach Hersteller da Abweichungen. Aus dem Datenblatt
> von Atmel:
>
> All inputs are disabled during this write cycle and the EEPROM will
> not respond until the write is complete (refer to Figure 2).

Na und? Dann bekommst du solange ein NAK, bis das Ding wieder auf den 
Bus reagiert. Wo ist das Problem?
#3335815
Lesenswert?
• ▲
▼
Georg G. schrieb:
> Die älteren Typen ganz
> allgemein können kein ACK-Polling.

Also in meinem Datenblatt z.B. des AT24C04-10PI-2.7 steht explizit 
"ACKNOWLEDGE POLLING" drin.

Georg G. schrieb:
> All inputs are disabled during this write cycle and the EEPROM will
> not respond until the write is complete (refer to Figure 2).

Und genau deshalb funktioniert ja das ACKNOWLEDGE POLLING.
Disabled = NACK

Georg G. schrieb:
> Da kann man sauber eine Bauchlandung
> machen, wenn der Einkäufer ein Schnäppchen gemacht hat und der
> Programmierer ein Timeout für überflüssig hielt.

Das Timeout braucht man nur für Hardwarefehler (Chip defekt, Kurzschluß 
oder Unterbrechung des I2C).
Gast #3335986
Lesenswert?
• ▲
▼
Es wäre mir ebenfalls neu, dass ein ACK Polling nicht gehen soll. Wenn 
der int. Schreibzyklus aktiv ist und dabei ein weiterer Versuch 
unternommen wird das EEPROM zu adressieren, kommt ein nACK zurück und 
zwar solange, bis der int. Zyklus beendet ist. Natürlich muss mit 
Erkennen des nACK das Telegramm mit einem Stop beendet werden.

Gruß

TK

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.