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!
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??
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 daher sollte der Slave überhaupt keinen eigenen Takt
benötigen.
Das ist so.
Der Master ist der Master, weil er den Takt liefert.
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???
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.
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!!
@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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.