Forum: Mikrocontroller und Digitale Elektronik Atmel 25080A - SPI - AT89C51RB2


von Markus K. (markus1989)


Angehängte Dateien:

Lesenswert?

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

von Klaus B. (Gast)


Lesenswert?

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ß!

von Markus K. (markus1989)


Lesenswert?

Danke dir Klaus für die Antwort,

ich werde mir das nochmal mit Hilfe deiner Punkte ganz genau anschauen!

mfg Markus

von R. B. (rabis)


Lesenswert?

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
Noch kein Account? Hier anmelden.