mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik EEPROM über SPI funktioniert nicht


Autor: Mücke (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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/MC...) 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...

Autor: Mücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schade, dass niemand hilft

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mücke (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Mücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kein "alter Hase" mehr da mit ner pfiffigen Idee?

Autor: Mücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was ist eigentlich mit der Baudrate? Kann ich die mehr oder minder 
beliebig wählen, oder nach was richtet sich die?

Autor: Andreas Schweigstill (Firma: Schweigstill IT) (schweigstill) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Weinbauer (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Mücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Toni B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie wärs mit einer Websuche: "68hc12 application note SPI"

Autor: Mücke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Toni B. schrieb:
> Wie wärs mit einer Websuche: "68hc12 application note SPI"

hm also auf mein spezielles Problem konnte ich da leider nichts 
übertragen. Vielleicht bin ich da zu engstirnig...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.