Forum: Mikrocontroller und Digitale Elektronik Word(2Byte) auf ein SPI EEPROM schreiben via TI Controller


von Mark J. (markjo)


Lesenswert?

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

von Oliver S. (oliverso)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

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.

von Mark J. (markjo)


Angehängte Dateien:

Lesenswert?

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).

von Mark J. (markjo)


Lesenswert?

> 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?

von Peter Z. (hangloose)


Lesenswert?

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
von Falk B. (falk)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.