Hallo Leute, ich habe ein EEPROM mit 4Kbit von ST im Einsatz. Die genaue
Bezeichnung lautet ST24c04, siehe Datenblatt im Anhang.
Beschaltet ist es folgendermaßen:
SDA, SCLK entsprechd mit Pullups an µC.
Vcc und Mode an 3,3V.
Vss, E1, E2 und PRE auf Masse.
Wenn ich als BlockSelect-Bit 0 wähle, dann die 256Byte beschreibe und
anschließend auslese, stimmen die Werte.
Wähle ich die oberen 256Byte, dann stimmen die Werte nicht mehr. Laut
Oszi werden die richtigen Daten übertragen beim Beschreiben, auch die
ACKs kommen.
Zwischen den jeweiligen Schreibzyklen wird 10ms gewartet gemäß tw im
Datenblatt.
Das komische ist eben, dass das nur bei den ersten 256Byte auftritt.
Hat jemand eine Idee woran es liegen könnte? Ich habe auch schon mehrere
EEPROMs der gleichen Version ausprobiert.
Vielen Dank.
Jo, das wär natürlich noch ne Möglichkeit. Komisch ist eben nur, dass es
beim ersten Block dann reibungslos funktioniert.
Was ich noch nachtragen muss:
Wenn ich den zweiten Block mit 0x00 beschreibe, stimmts. Ich lese
anschließend wirklich auf 0x00 aus. Mit dem Oszi überprüft.
Hat jemand schonmal was ähnliches gehabt? Gerade beim ST.?
>Jo, das wär natürlich noch ne Möglichkeit.
Möglichkeit? Du hast ein Softwareproblem;)
>Hat jemand schonmal was ähnliches gehabt? Gerade beim ST.?
Nö, kann immer locker vom Anfang bis zum Ende programmiert
werden. Hardwarefehler haben die nicht.
Der Fehler liegt wie immer in Zeile 42 oder sitzt vor dem Bildschirm.
Wenn du das erste Byte beider Hälften mit einem unterschiedlichen Inhalt
beschreibst, wobei das weder lauter Nullen noch lauter Einsen sein
sollten, was steht dann hinterher drin?
Im Anhang mal noch die Oszibilder beim jeweiligen Vorgang. Beim Lesen
wird in der Mitte ungefähr eine wiederholter Start eingeleitet.
Alles wird richtig "ge-ackt" und auch am Ende des Lesens kommt ein NAK.
Das wundert mich nicht, daß es nicht funktioniert.
Du hast ne Menge zusätzlicher Fehlermöglichkeiten (Interrupt, HW-I2C).
Machs erstmal zu Fuß (SW-I2C, keine Interrupts).
Außerdem fehlen Funktionen, z.B. EEPROM_Select.
Quelltexte als Anhang mit allem zum Compilieren nötigem!
Peter
Michl schrieb:> Ok, aber kann ich davon ausgehen, dass das Schreiben funktioniert, oder.
Das könntest du, wenn sich mit einem anderen bekannt funktionsfähigen
I2C-Interface der Inhalt verifizieren liesse.
>Ok, aber kann ich davon ausgehen, dass das Schreiben funktioniert
Ich glaube das ehrlich gesagz nicht. Vermutlich schreibst du immer
in den Block 0.
Was macht denn dein EEprom_Select genau?
Du weist wie bei den EEproms >256 Bytes die Blöcke addressiert werden?
Thomas
Michl schrieb:> Ok, aber kann ich davon ausgehen, dass das Schreiben funktioniert, oder.
Weiß ich nicht, ich kenne das TWI und den Interruptcontroller Deines MC
nicht.
Du weißt aber schon, daß man immer nur ein Byte oder eine Page schreiben
kann?
Peter
Mein EEPROM_Select setzt die Adresse des EEPROMS zusammen. Also 0b1010
und dann eben 0b00hintendran für die hardwired Adresse sowie eine 0 für
Block 0 bzw. eine 1 für Block 1 hinten dran.
Ergo: Block 0 = 0b1010000
Block 1 = 0b1010001
Das kommt ja auch raus laut Oszi.
Habe das EEPROM mal mit einem externen Lesegerät ausgelesen. Werte
werden korrekt geschrieben.
Also liegts am Lesen, wobei die Adressen stimmen laut Oszi. Ominös
iwie...
Ich habe das Problem immer noch.
Kann jmd. die Leseübertragung anhand der Oszi-Bilder und des Datenblatts
verifizieren? Meiner Meinung nach stimmt was ich LESE und ÜBERTRAGEN
wird.