EEPROM über SPI funktioniert nicht

Gast #2007883
Lesenswert?

Hallo,

mein Problem ist, dass ich es einfach nicht fertig bringe dieses EEPROM 
(http://www.mikrocontroller.net/attachment/97306/EEPROM.pdf) mit diesem 
Mikrocontroller 
(http://www.mikrocontroller.net/attachment/97308/MC9S12XF512.pdf) zu 
programmieren.

Ich wäre wirklich SEHR dankbar, wenn sich jemand den Code anschauen 
könnte, der etwas davon versteht. Ich hab mich jetzt 2 Tage damit 
beschäftigt und ich fände es fast ein bisschen Schade, wenns ganz 
umsonst war.

Im angehängten Code versuche ich einfach mal den Wert einer beliebigen 
Adresse (0x0333) des EEPROMS auszulesen. Wenn ich den ausgewählten 
Taster drücke, sehe ich beim Debuggen dass die im Code markierte 
while-Schleife nicht verlassen wird. Das liegt daran, dass hier SPI1SR = 
0b10100000 beträgt. D.h. Bit7 also SPIF wurde an dieser Stelle auch 
schon gesetzt, was aber eigentlich gar nicht sein dürfte, weil SPIF 
gesetzt wird, sobald ein neuer Datensatz über SPI eingetroffen ist (µC 
DB S.930). Die Daten sollten aber laut EEPROM-DB S.16 erst nach der 
vollständigen Übertragung der gewünschten Adresse reinkommen.

Ersetze ich die == durch &, so erhalte ich den Wert 0 zurück, was auch 
falsch ist, da laut EEPROM-DB S.18 angegeben ist, dass alle Werte mit FF 
initialisiert sind.

Ich habe leider mittlerweile keine Idee mehr, was ich machen könnte...
Angehängte Dateien:
Gast #2008176
Lesenswert?

Nach dem senden des zweiten Adressbytes musst du
noch ein DummyByte senden. Das EEPROM sendet schliesslich
nicht von alleine. Der Master muss den Takt erzeugen.
Und frag dann nicht das Receive sondern das Transmit Ready Flag ab.
Gast #2008208
Lesenswert?

Danke Holger,

habs jetzt mal so gemacht, wie du gesagt hast. Leider Bekomme ich immer 
noch Wert = 0.

Im Prinzip verstehe ich schon was du meinst, aber wie oben beschrieben 
finde ich es schon sehr seltsam, dass ich nach dem senden des ersten 
Adressbytes das Flag bekomme, dass ein Byte empfangen wurde. Dieses 
dürfte ja erst später auftreten.

Maaaan, das Ding macht mich noch kirre...

Noch ne Idee?
Angehängte Dateien:
(Firma: Schweigstill IT) Persönliche Seite #2008554
Lesenswert?

Mücke schrieb:
> Im Prinzip verstehe ich schon was du meinst, aber wie oben beschrieben
> finde ich es schon sehr seltsam, dass ich nach dem senden des ersten
> Adressbytes das Flag bekomme, dass ein Byte empfangen wurde. Dieses
> dürfte ja erst später auftreten.

Ich habe mir zwar nicht die Registerbeschreibung angeschaut, aber eine 
der Grundeigenschaften von SPI besteht darin, dass immer gleichzeitig 
gesendet und gelesen wird.
Gast #2008613
Lesenswert?

Andreas Schweigstill schrieb:
> Ich habe mir zwar nicht die Registerbeschreibung angeschaut, aber eine
> der Grundeigenschaften von SPI besteht darin, dass immer gleichzeitig
> gesendet und gelesen wird.

ja schon, aber zuerst einmal muss ich doch die Adresse ganz senden, von 
der ich den Wert gesendet haben will und dann kann erst der Wert 
gesendet werden. Und bei mir läuft da irgendetwas schief, denn sobald 
ich irgendetwas zum Senden ins Datenregister schreibe wird das Flag 
gesetzt, welches angibt, dass etwas empfangen wurde.

Es ist eh sehr verwirrend, dass es für schreiben und lesen nur ein 
gemeinsames Datenregister gibt.

Ich geb eh langsam auf. Keine Ahnung, was ich noch ändern könnt.
Gast #2008636
Lesenswert?

Mücke schrieb:
> ja schon, aber zuerst einmal muss ich doch die Adresse ganz senden, von
> der ich den Wert gesendet haben will und dann kann erst der Wert
> gesendet werden. Und bei mir läuft da irgendetwas schief, denn sobald
> ich irgendetwas zum Senden ins Datenregister schreibe wird das Flag
> gesetzt, welches angibt, dass etwas empfangen wurde.

ja, genau, das soll auch so sein. Die SPI lauscht immer am MISO mit,
sobald ein Takt über SCK raus geht. Meist ist dann im Empfangsregister
einfach eine 0, weil der Slave halt tatsächlich nichts zurück gibt.
Ich hatt auch schon, dass im Eingangsregister der gesendete Wert
angekommen ist, zum Gegenprüfen halt.
Bei den EEPROM die ich bisher verwendete war es so, dass nach der 
Adresse
einfach noch mal eine 0 gesendet werden musste um dann das gewünschte 
Byte ins Empfangsregister zu schieben.
Gast #2008642
Lesenswert?

Weinbauer schrieb:
> ja, genau, das soll auch so sein. Die SPI lauscht immer am MISO mit,
> sobald ein Takt über SCK raus geht. Meist ist dann im Empfangsregister
> einfach eine 0, weil der Slave halt tatsächlich nichts zurück gibt.
> Ich hatt auch schon, dass im Eingangsregister der gesendete Wert
> angekommen ist, zum Gegenprüfen halt.
> Bei den EEPROM die ich bisher verwendete war es so, dass nach der
> Adresse
> einfach noch mal eine 0 gesendet werden musste um dann das gewünschte
> Byte ins Empfangsregister zu schieben.

hilft mir leider nur alles nicht weiter...

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