Forum: Mikrocontroller und Digitale Elektronik STM32 - SPI Master Slave funktioniert nicht


von John W. (halfpastseven)


Lesenswert?

Hallo,

ich habe eine kurze Verständnisfrage bezüglich SPI Master -> Slave.

Ich habe einen Master STM32F407(168MHz, SPI Prescaler 32 = 1,3125MHz) 
und einen Slave STM32F100 (24MHz, SPI Prescaler 16 = 1,25MHz).

Die Init der Controller mit prinzipieller Kommunikationsaufbau habe ich 
soweit fertig und funktioniert auch.

Ich kann nun Daten zum Slave senden und diese werden auch richtig 
empfangen.

Wenn ich aber Daten auch zurückschicken will stimmen diese nicht 
überein, auch nicht am Oszi mit der Busanalyse!?!?

Meine Theorie:
Da der Master den Takt erzeugt un die Daten sendet funktioniert der 
Empfang am Slave, wenn aber der Slave im Takt des Masters die Daten 
zurückschicken möchte stimmen die Daten auf Grund der verschiedenen 
Taktfrequenzen nicht überein!

Weiß jemand ob das so stimmen kann?

Vielen Dank im Voraus!

von John W. (halfpastseven)


Lesenswert?

Ok vielleicht etwas viel Text für so eine einfache Frage...


----------------------------------------------
Master STM32F407 - 168MHz, SPI Takt: 1,3125MHz
----------------------------------------------
------------------------------------------
Slave STM32F100 - 24MHz, SPI Takt: 1,25MHz
------------------------------------------

Kommunikation vom Master -> Slave: ok

Kommunikation vom Slave -> Master: nicht ok
(teilweise stimmen die ersten 2-3 Byte sogar)


Kann das an den unterschiedlichen SPI Taktfrequenzen liegen??

von PittyJ (Gast)


Lesenswert?

Ich dachte immer, der Slave synchronisiert sich auf das gegebene 
Taktsignal auf. Von daher sollte der Slave überhaupt keinen eigenen Takt 
benötigen.
Oder habe ich das falsch verstanden?

von astr Sle f (Gast)


Lesenswert?

> Von daher sollte der Slave überhaupt keinen eigenen Takt
benötigen.

Das ist so.

Der Master ist der Master, weil er den Takt liefert.

von John W. (halfpastseven)


Lesenswert?

Danke für eure Antworten!

Ich dachte ursprünglich auch das der eingestellte  Peripherietakt vom 
Slave egal sein muss,
zweifelte aber dann doch ein wenig daran da eben die Slave  -> Master 
Kommunikation nicht funktionierte!

Bedeutet das dann das auch, wenn ich nur
in paar Kiloherz Peripherietakt am Slave einstelle würde dieser dann 
trotzdem noch mit dem Megaherz-Takt vom Master klarkommen würde??!

Hat sonst jemand noch eine Idee woran es liegen kann das nur die ersten 
2-3 Byte korrekt übertragen werden???

von (prx) A. K. (prx)


Lesenswert?

John W. schrieb:
> Bedeutet das dann das auch, wenn ich nur
> in paar Kiloherz Peripherietakt am Slave einstelle würde dieser dann
> trotzdem noch mit dem Megaherz-Takt vom Master klarkommen würde??!

Es gibt stets ein Mindestverhältnis vom Peripherietakt zum zulässigen 
SPI-Takt. So könnte beispielsweise irgendwo stehen, dass der Takt vom 
zuständigen Peripheriebus mindestens das N-fache des extern angelegten 
SCK-Signals betragen muss.

PS: STM32F1xx: N=2.

von John W. (halfpastseven)


Lesenswert?

Vielen Dank A.K., das war genau die Information die ich benötigt habe!! 
:-)

Muss ich nochmals in den Manuals nachlesen aber im Nachhinein ist es 
irgendwie logisch das der Slave schneller sein muss als der Master damit 
er die Daten handeln kann!!

Werde ich morgen gleich mal testen und dann hier berichten!!

von John W. (halfpastseven)


Lesenswert?

@A.K. Wo hast du übrigends den Faktor 2 für STM32F1 her?
Ich habe das Datenblatt und Referenzmanual überflogen nichts darüber 
gefunden?

Habe jedenfalls den Slave Peripherietakt inzwischen auf 6MHz angehoben
-> Kommunikation funktionierte besser, hatte aber hat immer noch 
Ausfälle.

Mittlerweile funktioniert die Kommunikation aber ohne Probleme.
Das Hauptproblem war die Leitungsverbindung (ca.40cm) zwischen Master 
und Slave.

Falls noch jemand so ein ähnlich Problem hat hier meine Lösung:

Früher:
-> einfache Litzen parallel verlegt
-> starke Störungen von DC/DC Wandler und SPI Takt auf allen Signale
-> SPI Takt mit unschöner Flanke und Schwingungen

Aktuell:
-> Flachbandkabel mit Masse/Signal/Masse/Signale/Masse ... usw
-> 100R Serienwiderstand in alle SPI Leitungen direkt beim Master
-> Signale und Flanken nun um ca. Faktor 10 besser, einwandfreie Signale

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.