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

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.