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
Laut Datenblatt musst du 5ms warten. Die Alternative wäre, laufend das Lesen zu versuchen. Während die Daten geschrieben werden, stellt sich der Chip nach außen tot.
Das Verfahren, nach dem Du suchst heisst ACK-Polling. Solange das EEPROM im internen Schreibzyklus ist, gekommst Du in dieser Zeit immer ein nACK zurück. Gruß TK
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).
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.
:
Bearbeitet durch User
Georg G. schrieb: > Leider gibt es je nach Hersteller da Abweichungen. Wäre mir neu. Kannst Du mal einen Typ nennen, wo das nicht gehen soll?
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?
Peter Dannegger schrieb: > Kannst Du mal einen Typ nennen, wo das nicht gehen soll? Siehe das Posting... Atmel 24C04 (ohne das A). Die älteren Typen ganz allgemein können kein ACK-Polling. 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.
Georg G. schrieb: > Peter Dannegger schrieb: >> Kannst Du mal einen Typ nennen, wo das nicht gehen soll? > > Siehe das Posting... Atmel 24C04 (ohne das A). Die älteren Typen ganz > allgemein können kein ACK-Polling. Was tun die dann wenn die noch nicht bereit sind, und man trotzdem darauf zugreifen will? Bekommt man dann trotzdem ein ACK?
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).
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.