Hallo Leute, ich habe eine Frage zum SPI EEPROM. Um das EEPROM zu beschreiben bin ich folgendermaßen vorgegangen: ich schreibe auf eine Adresse und lese dann die Adresse wieder aus um dann zu vergleichen, ob der Geschriebene Wert sich auch wirklich im EEPROM befindet. Ich habe das sowohl mit 1 byte 2 byte und 4 byte gemacht. Wenn ich immer 2byte schreibe und dann 2 byte direkt wieder auslese ist es auch wirklich der geschriebene Wert (mit gleicher Adresse). Jetzt ist mir aufgefallen wenn ich im späteren Verlauf meines Programms wieder auf die Adresse zugreifen möchte (eine Adresse mit 2 Byte) dann steht garnicht der wirkliche geschriebene Wert im EEPROM. Es funktioniert nur mit 1 Byte, dass würde für mich bedeuten dass 1 Byte nur wirklich geschriebenen werden und sich auch im EEPROM befindet. (mit 2 Byte funktioniert es leider nicht). Jetzt habe ich mal zu Testzwecken 3 Adressen genommen immer direkt ausgelesen. Danach habe ich mal wieder auf die erste Adresse mit dem Lesebefehl zugegriffen und es befindet sich einfach 0x01 0x01 im Speicher des EEPROMs (also nicht der geschriebene Wert.) Kann mir jemand Helfen wo das Problem liegen könnte? Mein SPI BUs läuft auf ca. 400khz Ich verwende das EEPROM M95640-W 64-Kbit serial SPI bus EEPROM with high-speed clock Danke für eure Hilfe
Das Problem liegt in deinem Programm, vermutlich in Zeile 42. Was sagt denn das Datenblatt des EEPROMs darüber, wie man mehrere Byte nacheinander schreibt, und wie passt das mit deinem Programm und dem zusammen, was die SPI-Pins tatsächlich tun? Oliver
Mark J. schrieb: > im EEPROM. Es funktioniert nur mit 1 Byte, dass würde für mich bedeuten > dass 1 Byte nur wirklich geschriebenen werden und sich auch im EEPROM > befindet. (mit 2 Byte funktioniert es leider nicht). Dann machst du was falsch. Der Rest der Welt kriegt das hin. > Kann mir jemand Helfen wo das Problem liegen könnte? > Mein SPI BUs läuft auf ca. 400khz > Ich verwende das EEPROM M95640-W > 64-Kbit serial SPI bus EEPROM with high-speed clock Hast du mal das Datenblatt gelesen? Und auch das Thema Page Write beachtet? Wenn nämlich deine aufeinanderfolgenden Adressen in verschiedenen Pages liegen, geht das schief.
Hier habe ich mal die Daten aus dem Logic Analyzer hinzugefügt im ersten Bild sende ich als erstes den Write Enable für das EEPROM 0x06 dann kommt das Write to Memory Array 0x02 dann die Adresse MSB(0x00) LSB(0x55) und als letztes die Daten für das Word 0x01 und 0x90 im zweiten Bild sieht man dann dass die auf der Adresse die Daten direkt wieder ausgelesen habe also die Daten 0x01 0x90 stimmen überein danach habe ich auf andere Adressen geschrieben/ausgelesen und zum Schluss nochmal die Adresse 0x55 und daraufhin kamen die Daten 0x01 0x01, welches im dritten Bild zu erkennen ist. Das heißt das EEPROM hat die Daten irgendwie nicht übernommen. Nachdem Schreiben warte ich auch immer ca. 5ms (wird vom EEPROM nach dem Schreiben gefordert).
> Hast du mal das Datenblatt gelesen? Und auch das Thema Page Write > beachtet? Wenn nämlich deine aufeinanderfolgenden Adressen in > verschiedenen Pages liegen, geht das schief. Hallo Falk, wie würde man es denn machen wenn wir angenommen auf adresse 0x80 1 word haben und auf adresse 0x81 auch 1 word. (liegen ja nebeneiannder) oder ist sowas garnicht möglich?
Wenn du einen 16 Bit Wert schreiben willst, schreibst du zB das MSB deines "word" auf 0x80 und das LSB auf 0x81 Auf eine 16 Bit Adresse kann man 1 Byte schreiben. Wenn du mehrere Bytes schreibst, wird der Adresscounter automatisch inkrementiert.
:
Bearbeitet durch User
Mark J. schrieb: > Hier habe ich mal die Daten aus dem Logic Analyzer hinzugefügt im ersten > Bild sende ich als erstes den Write Enable für das EEPROM 0x06 dann > kommt das Write to Memory Array 0x02 dann die Adresse MSB(0x00) > LSB(0x55) und als letztes die Daten für das Word 0x01 und 0x90 im Und warum geht CS nicht auf HIGH? Das fehlt! Denn erst dann startet der Schreibvorgang! DANACH muss man 5ms warten. > zweiten Bild sieht man dann dass die auf der Adresse die Daten direkt > wieder ausgelesen habe also die Daten 0x01 0x90 stimmen überein danach > habe ich auf andere Adressen geschrieben/ausgelesen und zum Schluss > nochmal die Adresse 0x55 und daraufhin kamen die Daten 0x01 0x01, > welches im dritten Bild zu erkennen ist. Das heißt das EEPROM hat die > Daten irgendwie nicht übernommen. Wieso denn? Deinie beiden Byts sind doch beim 1. Auslesen auch wieder gelesen worden. > Nachdem Schreiben warte ich auch immer > ca. 5ms (wird vom EEPROM nach dem Schreiben gefordert). Hmm. Siehe oben.
Falk B. schrieb: > Wieso denn? Deinie beiden Byts sind doch beim 1. Auslesen auch wieder > gelesen worden. Ich würde mal darauf tippen: was da tatsächlich gelesen wurde ist ein Cache. Wo auch immer er stecken mag... Das passiert, wenn man seine Software nicht selber schreibt, sondern stumpf und ohne jedes Verständnis des Codes Wichsvorlagen zusammenleimt...
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.