STM32 - SPI Master Slave funktioniert nicht

OP #2887856
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!
OP #2891149
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??
OP #2891979
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???
#2891984
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.
OP #2892039
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!!
OP #2894444
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren