Forum: Mikrocontroller und Digitale Elektronik SPI-EEPROM Zugriffsproblem


von Arne (Gast)


Angehängte Dateien:

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

von René K. (davinci77)


Lesenswert?

Hallo Arne

Hast du daran gedacht das der CS pin auf High muss zum Programieren?

Aus dem Datenblatt:
"to be programmed.
Programming will start after the CS pin is brought high"

Tschö
René

PS: Ok habe gerade in deinen Bildern gesehen das CS auf high geht;-(

von Arne (Gast)


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

von Stephan H. (stephan-)


Lesenswert?

das hier wird wohl die Antwort sein:
Beitrag "Problem beim Schreiben eines SPI EEPROM AT25080"

Hatte ähnliche Probleme..

von Arne (Gast)


Angehängte Dateien:

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?

von Stephan H. (stephan-)


Lesenswert?

Hallo Arne,

wenn Dir 8051 ASM was nützt, kann ich heute Abend mal den Code posten.

Gruß

von Arne (Gast)


Lesenswert?

Danke - aber das sagt mir dann nix.

thanx, Arne

von Stephan H. (stephan-)


Lesenswert?

Schade, wie ich gerade sehe toggle ich das CS zwischen den Befehlen.
Also:

CS=Low
WREN Command
toggle CS
Write Command
Put Adress High
Put Adress Low
Put Data
CS=High

Das muss gehen.

von Stephan H. (stephan-)


Lesenswert?

ps. habe noch mal Dein Scope angeschaut.

Du hast definitiv nicht getoggelt zwischen WREN und WRITE !!!!

Diese Frage stellte sich mir auch und wurde vom Dateblatt nicht 
beantwortet. Muss ich zwischen 2 Befehelen das CS toggeln ??

Definititv JA !!!

von Arne (Gast)


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

von Stephan H. (stephan-)


Lesenswert?

sog i do............topggle me...

Nee Flash habe ich noch nich gemacht.
Ist aber denke ich nicht großartig anders.
Wird schon werden.

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.