eeprom M95M02

Gast #7174960
Lesenswert?

Hallo und guten Tag,

mit einem 32bit Mikrocontroller sollen gewisse Daten in ein eeprom 
abgelegt werden. Hierfür möchten wir das eeprom M95M02 einsetzen.
Aktuell bin ich dabei den SPI Treiber zu implementieren. Mit dem OSzi 
kann ich auch die SIgnal CLK, CS, MISO und MOSI analysieren. Das 
Versenden von Kommandos müsste soweit passen nur der EMpfang 
funktioniert nicht. Gibt es gewisse Punkte die bei dier Verwendung des 
eeproms beachtet werden müssen?
Gast #7174972
Lesenswert?

> nur der EMpfang funktioniert nicht

Wie äußert sich das? Gibt es Aktivität auf der MISO-Leitung?

Passt die von Dir gewählte SPI-Betriebsart zu einer, die das EEPROM 
versteht?

(die findest Du im Datenblatt auf S. 12).

Mit welcher Taktfrequenz arbeitest Du? Was machst Du mit dem /Hold-Pin?
Gast #7175260
Lesenswert?

- SPU Taktfrequenz: ~5Mhz
- SPI Mode: CLKPOL=0, CLKPHA=0
- Blockkondensatoren muss ich noch
  nachrüsten zwischen Vcc und Gnd.
- An den MISO, MOSI, CLK hängt noch parallel ein anderer Spi 
Speicherbaustein. Dieser wird aber aktuell nicht benutzt. Da habe ich 
den CS permanent auf '1' geschaltet.
Moderator (Firma: Titel) Persönliche Seite #7175270
Lesenswert?

sonde schrieb:
> Mit dem OSzi kann ich auch die SIgnal CLK, CS, MISO und MOSI
> analysieren.
Und wie sehen diese Signale direkt an den Pins des EEPproms aus?

Schöne stetige Flanken ohne Klingeln?

> Gibt es gewisse Punkte die bei dier Verwendung des eeproms beachtet
> werden müssen?
Verhält sich das Timing auf Bitebene so, wie es im Datenblatt steht?

Verhält sich das Timing auf Wortebene so, wie es im Datenblatt steht?

sonde schrieb:
> Blockkondensatoren muss ich noch
> nachrüsten zwischen Vcc und Gnd.
Ja, so halt, wie es im Datenblatt steht.

Wenn das soweit passt, dann liest du zuerst mal das ID-Register aus...
Moderator (Firma: Titel) Persönliche Seite #7175310
Lesenswert?

sonde schrieb:
> welches Register genau?
Blöd auch, daß Ding hat kein ID-Register. Dann muss also das 
Statusregister herhalten. Da sind ach einem Powerup wenigstens 2 Bits 
definiert...

sonde schrieb:
> Gibt es gewisse Punkte die bei dier Verwendung des eeproms beachtet
> werden müssen?
Die anderen Pins /W und /HOLD müssen entsprechend dem Bild 5 auch einen 
definierten Zustand haben.

sonde schrieb:
> Bei dem anderen Baustein ist der CS an einem anderen Mikrocontroller
> Gpio Pin abgeschlossen.
Ui, interessantes Konzept.
Aber dieser uC hängt sonst nicht mit an diesem SPI-Bus?
Gast #7175390
Lesenswert?

Sorry hab mich wohl etwas falsch ausgedrückt.

Natürlich sind beide SPI Bausteine am selben Mikrocontroller 
angeschlossen.
Die beiden Bausteine teilen sich die Pins MISO, MOSI, CLK. Nur die CS 
sind am Mikrocontroller an verschiedenen IO Pins angeschlossen
Gast #7175443
Lesenswert?

Die wichtigste Aussage wird von angehenden EEPROM-Programmierern
oft nicht beachtet bzw. übersehen (Datenblatt Seite 17):
1
The Write enable latch (WEL) bit must be set prior to
2
each WRITE and WRSR instruction. The only way to do this
3
is to send a Write enable instruction to the device.
Moderator (Firma: Titel) Persönliche Seite #7175666
Lesenswert?

sonde schrieb:
> Leider kann ich nichts empfangen.
So ausdauernd, wie du da von "nichts empfangen" schreibst, solltest du 
dir dringend mal anschauen, was SPI ist und wie der funktioniert.

Denn weil SPI einfach nur gekoppelte Schieberegister sind, empfängst du 
immer gleichzeitig jeweils dann ein Bit, wenn du eines sendest. Ob das 
Bit irgendwelche Information trägt, und welche das ist, das steht im 
Datenblatt.

sonde schrieb:
> Mit dem OSzi kann ich auch die SIgnal CLK, CS, MISO und MOSI analysieren.
Zeig doch mal Bilder davon. Wieviele Kanäle hat dein Oszi? Zur Analyse 
von SPI wäre ein 4-Kanal-Oszi schon nicht schlecht. Bei einem 
2-Kanal-Oszi muss man sich das Protokoll aufwendig zusammenbasteln.
Moderator (Firma: Titel) Persönliche Seite #7175784
Lesenswert?

sonde schrieb:
> Das CS Signal wird nach der SPi Initialiserung permanent auf 0V
> geschaltet.
So geht das nicht. Sieh dir nochmal genau an, wofür das CS-Signal da 
ist. In jedem_ Timing-Diagramm im Datenblatt ist es _vor einer 
Übertragung high, nur_ während der Übertragung low und wird _danach 
wieder high.

Der /S ist der Framesync, wenn der 1 ist, dann wird der SPI-Automat im 
EEPROM zurückgesetzt. Das steht wiederholt bei 6.1 und 6.2 ...

Und was hatte ich gestern abend um 19:38 geschrieben: wenn du das 
Signaltiming laut DB einhältst, dann geht das.
Angehängte Dateien:
Gast #7175922
Lesenswert?

Ist natürlich falsch:
So jetzt habe ich auch nach jedem Kommando den CS auf low und danach auf
high gesetzt. Tut immer noch nicht.

Vor jedem Kommando wird CS auf low gesetzt und danach wieder auf high.
Moderator (Firma: Titel) Persönliche Seite #7175958
Lesenswert?

Beantworte bitte mal die Fragen zum Oszilloskop.

Denn es ist bei der Inbetriebnahme eines Prototypen m.E. so ziemlich das 
Einfachste, so ein EEPROM mit gerade mal 4 Kommunikationspins Pins zum 
Laufen zu bringen.

Und so wie ich den bisherigen Verlauf des Threads interpretiere, ist bei 
Weitem nicht sicher, ob das Timing auf Bit- und Wortebene tatsächlich 
passt.
Moderator (Firma: Titel) Persönliche Seite #7176106
Lesenswert?

sonde schrieb:
> Hier ein Bild vom Oszilloskope
Und der grüne Kanal ist der MISO?

Also, das sieht ja gar nicht mal so ohne aus. Nach Buskollision sieht 
das nicht aus. Eher einem Kurzschluss. Aber das hast du sicher schon 
geprüft.

Hast du das SO8-Gehäuse? Was passiert, wenn du den MSIO-Pin ablötest und 
direkt daran misst?

> SPI Übertragung mit dem Datenbyte 0xFF
Die 0xo5 passt, die tauch auf dem MOSI auf. Auch die Timings passen zum 
Datenblatt. Aber da ist nirgends ein Datenbyte 0xFF weder auf dem MOSI 
noch auf dem MISO zu sehen.

> Hier ein Bild vom Oszilloskope:
BTW: wenn du die Signale so sortierst, wie sie im DB stehen, dann fällt 
der Vergleich nicht so schwer...

sonde schrieb:
> Ja stimmt da zweite Byte ist 0x00.
Wie oft kann man sich eigentlich irren?

> Auch mit 0xFF tut es nicht.
Was "tut nicht"? Kommen dann diese FF wenigstens am MOSI heraus?
Gast #7176135
Lesenswert?

Der grüne Kanal ist MISO.
Ja es ist ein SO8 Gehäuse.
MOSI ist permanent auf 0V.
CS habe ich nun auch abgeändert. CS wird erst nach dem 2. Byte wieder 
auf high gesetzt. Der Ausgang bleibt nach wie vor auf 0.
Moderator (Firma: Titel) Persönliche Seite #7176185
Lesenswert?

sonde schrieb:
> Wenn ich den Status (Register 0x05) auslese, welchen Wert sollte ich
> dann erhalten?
So wie ich das sehe genau das, was du siehst, so lange du da drin nicht 
ein Bit änderst. Siehe das DB Kapitel 5.1.2 Device Reset.

Es sieht so aus, als ob du mit dem WRSR Kommando erst mal ein paar Bits 
umbiegen musst:
"The Write Status register (WRSR) instruction enables the user
to change the values of the BP1, BP0 and SRWD bits"
Angehängte Dateien:
#7176202
Lesenswert?

sonde schrieb:
> Im Datenblatt steht das nicht explizit drin dass man das
> vor dem Read Status Register ausführen soll.

Um das Statusregister zu lesen muss man das auch nicht ;-)
Aber um Daten zu schreiben, ist WREN nötig.

Nein, am Statusregister muss nichts geändert werden, um Daten zu 
schreiben.

Und vorab noch ein Tipp: wenn Du Daten geschrieben hast (max. eine 
Page), dann solange das Statusregister pollen bis Bit[0]=0.
Moderator (Firma: Titel) Persönliche Seite #7176204
Lesenswert?

sonde schrieb:
> Sehe ich das richtig so?
Lies im DB 6.3.2 WEL bit

Du musst vor jedem einzelnen Schreibbefehl das WREN Kommando abschicken, 
denn am Ende eines Schreibbefehls wird das Bit zurückgesetzt.

sonde schrieb:
> Siehe da ich lese den Wert 0x02 aus.
Na bitte, jetzt kannst du 1x einen Schreibbefehl ausführen.
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #7176218
Lesenswert?

sonde schrieb:
> Ok nachdem ich nun das Stutus Register auf 0 gesetzt habe lese ich nun
> immer wieder 0 aus. Ich hoffe das passt soweit.
Ja, du musst in die Statusregister Bits schon was anderes als 0 
reinschreiben oder eben mit WREN das WEL wieder setzen.

Pat A. schrieb:
> noch ein Tipp: wenn Du Daten geschrieben hast (max. eine Page), dann
> solange das Statusregister pollen bis Bit[0]=0.
Dazu kann laut Kapitel 6.3 Bild 10 der /S dauerhaft auf low bleiben. Mir 
erscheint das Warten aufs EEPROM aber wie Rechenzeitverschwendung.

Alternativ kann man nämlich während der tw=10ms was Sinnvolles tun und 
vor dem nächsten Schreiben nochmal schauen, ob der vorige Schreibvorgang 
inzwischen schon beendet ist.

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