STM32 - SPI buffer flush

OP #4254254
Lesenswert?
• ▲
▼
Grüß euch

Ich bräuchte Hilfe mit dem SPI Modul des STM32L476. Ich vermute mal es 
hat sich zu den F4-Controllern kaum etwas geändert, also eventuell kann 
jemand trotz der kurzen Verfügbarkeit dieser Chips was dazu sagen...

Problem ist folgendes. Ich möchte mit sehr alter Hardware kommunizieren, 
die ein SPI-ähnliches Protokoll nutzt. Die Peripherie meines Controllers 
ist bereits erfolgreich als Slave initialisiert und ich bekomme auch 
sinnvolle Daten am Eingang...

Und zwar genauso lang, wie sich der Master dazu entscheidet die 8-bit 
Breite beizubehalten. Dummerweise kommen aber ab und zu auch mal 
zusätzliche Bits an, die ich aber schlichtweg nicht benötige. Leider 
werden diese Bits aber ohne mein zutun trotzdem ins Shift Register des 
SPI Moduls geschrieben, solang ich die Schnittstelle nicht abdreh.



Das wär nicht weiter problematisch, könnt ich das Shift Register 
irgendwie flushn. Leider hab ich bis jetzt keine Möglichkeit gefunden 
das zu tun und auch das Datenblatt ist da nicht besonders hilfreich. 
Dieses schlägt folgendes Prozedere (S.1285) vor um die SPI im "Receive 
Only" Modus abzudrehn:
1
    /* Reset SPI */
2
    SPI2->CR1 &= ~SPI_CR1_SPE;
3

4
    while((SPI2->SR & SPI_SR_BSY))
5
    while((SPI2->SR & SPI_SR_FRLVL))
6
    dummy = *(__IO uint8_t *)&SPI2->DR;
7
                SPI2->CR1 |= SPI_CR1_SPE;

Und das bringt 0. Sobald neue Bits vom Master daherkommen werden sie von 
den bereits unnötig empfangenen verschoben...


Irgendwer eine Idee?
Achja, als Slave senden funktioniert natürlich auch nicht, weil ja der 
Master den Clock vorgibt und selbst wenn ich was ins Datenregister 
schreib, dieses nicht rausgeshiftet wird...  :/
Angehängte Dateien:
#4254617
Lesenswert?
• ▲
▼
SS kurz auf eine Pin umbiegen, der garantiert auf HIGH Pegel ist. Das 
resettet die SPI Statemachine, der Bitzähler fängt bei 0 an. Dann wieder 
auf den korrekten Pin umbiegen.

Das setzt natürlich voraus, das die SS Funktion auf mehr als einem Pin 
verfügbar ist und der Master vorhersehbar idle bleibt.

Antwort schreiben

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.

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.