Hallo Leute, und zwar kämpfe ich grade mit dem EEPROM und der SPI Verbindung. Im Anhang findet ihr meinen C-Code zum Schreiben und Lesen auf das EEPROM und das Datenblatt. Leider funktioniert dies aber bis jetzt noch nicht. Vielleicht könnte da einer mal drüber schauen und mir sagen wo mein Fehler liegt. Ich habe hierzu noch eine generelle Frage. In dem Artikel Beitrag "Problem beim Schreiben eines SPI EEPROM AT25080" wird für die Überprüfung, ob der Transfer abgeschlossen ist, dass im EEPROM vorhandene Status Register herangezogen. Ich habe mich jetzt mit dem SPIF Flag am Controller versucht. Was für eine Art der Abfrage ist hierbei die bessere? Eine weiter grundlegende Frage liegt in dem Slave und Master Modus der über den Controller ausgewählt werden kann im Control SFr. Ich brauche doch eigentlich nur einen Slave Modus wenn ich mehrere µC miteinander verbinden möchte, oder liege ich dabei falsch? Ansonsten ist ja mein µC immer der Master, da ja nur er den Takt erzeugen kann. Ich danke euch im Vorraus. Es ist mein erster Versuch mit EEPROM und SPI, trotzdem hoffe ich, dass ich nicht ganz daneben liege. Leider besitze ich Momentan kein Oszi mit dem ich den Transfer überprüfen kann! mit freundlichen Grüßen Markus
Hallo, Wenn du vom Prozessor aus ein Eeprom ansprechen willst, muß der Mastermode eingestellt werden, dh. die CPU gibt die Clock vor und beginnt mit der Kommunikation. Meiner Erfahrung nach, werden folgende Punkte am ehesten falsch gemacht: 1) Clock-Phase und Polarität nicht gemäß Datenblatt des Eeproms. Sprich: mit welcher Clockflanke werden die Daten am Bus geshiftet, mit welcher Flanke wird der Busstatus gelesen 2) Die Slave-Selectleitung darf beim Übertragen des Kommands nicht inaktiv werden (siehe Fiigure 8/9 Write- und Readtiming im datenblatt), da andernfalls das Eeprom intern die Com-Statemachine zurücksetzt 3) das SPI-TX-Register darf erst geschrieben werden, wenn das letzte Byte vollständig gesendet wurde, dh. das SPIF -Flag kann sinnvollerweise daüfr ausgewertet werden (-> SPI transmission finished) 4) die Auswertung des Eeprom-Statusregisters ist wichtig für das Erkennen, wann der Schreibzugriff auf einen Zelle fertig ist. Das Programmioeren dauert in der Regel meherere ms. Ich hoffe, das konnte dir einwenig helfen ! Gruß!
Danke dir Klaus für die Antwort, ich werde mir das nochmal mit Hilfe deiner Punkte ganz genau anschauen! mfg Markus
Vielleicht so?
1 | void SPI_WR (unsigned char spi_data) { // 8 Bit |
2 | SPDAT = spi_data ; |
3 | while (SPSCR != 0x88) ; |
4 | }
|
Ist für AT89C51AC3 von ATMEL. Gruß Rabis
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.