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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren