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
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;-(
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....
das hier wird wohl die Antwort sein: Beitrag "Problem beim Schreiben eines SPI EEPROM AT25080" Hatte ähnliche Probleme..
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?
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.
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 !!!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.