SPI ist nachtragend

OP #220080
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.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 21 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.