SPI-EEPROM Zugriffsproblem

Gast #1275750
Lesenswert?

Moin zusammen,

habe ein Problem mit SPI-EEPROM AT25020 an einem Cortex-M3 
(STM32F103RB).
Dazu anbei zwei Screenshots vom Oszi - je einen für schreiben und lesen.
Und zwar lese ich vor jedem Schreib-/Lesezugriff auf das EEPROM dessen 
Statusregister (SR) aus, um zu sehen, ob es bereit ist neue Daten 
anzunehmen.
Falls ja, dann schicke ich ein WREN (Write Enable) Command und dann 
einen WRITE Befehl (der auch Adressbit A8 enthält), dann A7 bis A0 und 
am Ende
das Byte, das geschrieben werden soll ($CC bei mir).
Lesen ähnlich: Statusregister checken, dann Read-Commando (enthält auch 
A8) und das untere Adressbyte mit A7 bis A0. Und dann liefert er mir 
nicht $CC - wie ich erwarte - sondern erneut den Inhalt des 
Statusregisters ($02).
Ich habe das Datenblatt rauf und runter, aber sehe nicht, wo der Fehler 
sein könnte. Der /WP (Write protect) Pin hängt über einen 1k gegen 3.3V, 
/HOLD ebenfalls über 1k gegen 3.3V.
Das /CS generiere ich über einen Portpin selbst. Am SPI hängt auch noch 
ein SPI-Flash von Atmel - selbstverständlich mit eigenem /CS.
Hat jemand eine Idee, wo der Fehler liegt?

Thanx, Arne
Angehängte Dateien:
Gast #1275771
Lesenswert?

Habe eben mal das /CS des zweiten SPI-Devices (AT45DB161 16MBit Flash) 
gecheckt. Da ich in meinem Programm zunächst nur das EEPROM zum Laufen 
kriegen will, hatte ich das /CS für das Flash nicht initialisiert. Das 
lungerte bei 2.5V rum. Initialisiere es jetzt immer, hat aber keine 
Änderung gebracht.
Heute morgen habe ich die Schaltung am Oszi (die Bilder waren von 
gestern) angeschaut: SR ist jetzt nicht mehr $02 sondern immer $00, d.h. 
das WEN Bit im SR ist 0 = "indicates that the device is not write 
enabled". Aber das SR ist immer noch $00 wenn ich ihm ein WREN (Write 
Enable) Kommando schicke. Ich dreh langsam am Rad mit dem Sch....
Gast #1275834
Lesenswert?

Hallo Stephan,

danke für den Link - es geht immer noch nicht :(
Anbei mal der aktuelle Oszi-Screenshot vom Schreibvorgang.
Sowie die SPI-Einheit des uC nicht mehr Busy ist, toggle ich das /CS. 
Der Clock ist dann Low (ich arbeite im SPI-Mode 0).
Gelesen wird immer $00 statt $CC.
In Deinem Thread schriebst Du am Ende des ersten Beitrags, dass Du auf 
Bit0 = 1 im SR wartest.
In meinem Datenblatt zum 25020 heißt es:
"Bit 0 (/RDY) : Bit 0 = "0" indicates the device is ready. Bit 0 = "1" 
indicates the write cycle is in progress."
Also invertiertes Verhalten?
Angehängte Dateien:
Gast #1277041
Lesenswert?

Hallo Stephan,

danke für Deinen Nachtrag. Ich beziehe mich mal auf den Scopescreenshot 
als Anhang meines Beitrags von 9:12h
Da habe ich die Bytes ja mit blauen Linien getrennt. Zunächst frage ich 
ab, ob das EEPROM bereit ist neue Daten entgegenzunehemen - es könnte ja 
noch mit einem vorherigen WRITE beschäftigt sein.
Deine Aussage: "Du hast definitiv nicht getoggelt zwischen WREN und 
WRITE !!!!" ist für mich nicht nachvollziehbar. Da wird doch eindeutig 
/CS getoggelt. - Wie gesagt: der Beitrag von 9:12h! Im Screenshot des 
ersten Beitrags hatte ich das definitiv nicht gemacht.
Was ich aber definitiv (auch) nicht gemacht habe, ist nach dem Lesen des 
SR und vor WREN wieder zu toggeln. Und da liegt jetzt der Fehler: man 
muss NACH JEDEM BEFEHL /CS toggeln. Es tut jetzt!

Danke Stephan!!!
BTW: hast Du auch schon Atmel SPI Flashs angesteuert? Wird nämlich die 
nächste Aufgabe hier... ;)

bye, Arne

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