Forum: Mikrocontroller und Digitale Elektronik SPI ist nachtragend


von Daniel B. (khani)


Lesenswert?

Hallo Leute,

ich habe hier eine interessante Beobachtung. Vielleicht kennt jemand
das Phänomen und kann mir sagen, was das heißen soll.

Meine Applikation (auf dem AVR) macht folgendes :

1. SPI als Master einschalten und Pins entsprechend konfigurieren
2. ein Befehlsbyte absenden
3. ein Adressbyte senden
4. irgendeinen Murks senden (damit Takt beim Slave ankommt)
5. ein Datenbyte auslesen (aus SPDR) (highbyte)
6. noch einen Murks senden
7. noch ein Datenbyte lesen (low byte)
8. SPI ausschalten

Die Schritte 1-8 finden im Laufe des Gesamtprogramms öfters statt, aber
immer in dieser Reihenfolge.

Jetzt meine Beobachtung :
Wenn ich nach einem Reset des Mikrocontrollers (übrigens ein ATmega32)
mit dessen Reset-Pin die oben beschriebenen Schritte durchführe, dann
liest der AVR aus meinem angeschlossenen Slave-Device (VS1003B) den
Wert 0x9800 aus - das ist gut, denn das hatte ich auch erwartet. Führt
man die angegebenen Schritte ein zweites Mal aus (ohne AVR-Reset), dann
erhält man 0x0098.

Das heißt aus irgendeinem Grund bleibt das zweite Datenwort im
Empfangspuffer kleben und wird beim nächsten Mal als empfangenes
Datenbyte gelesen. Wenn man einfach vor Schritt 1 präventiv ein Mal aus
dem SPDR liest, dann ist alles OK.

Hat das schon mal jemand beobachtet und gibt es eine rationale
Erklärung dafür oder ist das ein unbekanntes Phänomen (jedenfalls
deutet im Datenblatt nichts darauf hin - die SPI-Section kann ich dann
bald auswendig) ?

MfG, Daniel.

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.