Forum: Mikrocontroller und Digitale Elektronik STM32 - SPI buffer flush


von Vincent H. (vinci)


Angehängte Dateien:

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...  :/

von Jim M. (turboj)


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.

von Vincent H. (vinci)


Lesenswert?

Danke!
Auf diese Idee kam ich überhaupt nicht...

Gott sei Dank war SS eh noch frei.

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.