SPI mit RS485-Übertragung: Problem mit zu langen Propagation-Delays

Gast #1395166
Lesenswert?

Hallo an alle,

könnt ihr mir bitte ein paar Tipps geben. Auf einem SPI-Bus sollen die 
Signale wegen längeren Entfernungen physikalisch mit RS485-Technik 
übertragen werden. Übertragungsrate größer 2 Mbit/s erforderlich. Die 
Busteilnehmer werden mit 3.3V Supply betrieben, deswegen auch die 
Treiber bzw. Receiver mit diesem Pegel nötig.

Nun die Treiber und Receiver haben Propagation-Delays bis zu 100ns 
(angehängtes Datenblatt). So entsteht in dem CLK-Signal auf dem Weg vom 
Master zu einem der Slaves eine Verzögerung gleich dem zweifachen 
Propag. Delay ( Quelle > Treiber > Receiver > Senke) und dann noch im 
SOMI-Signal das gleiche. Bei einer Rate von 2 MBit/s ist der Abstand von 
der steigender Flanke des Clocks bis zur fallenden 250ns. Bevor die 
steigende Flanke über Treiber und Receiver zum Slave gelangt und er die 
Daten (ebenfalls über Treiber / Receiver) zum Master reicht, will der 
Master an der fallenden Flanke schon lesen. Lässt sich dieses Problem 
irgendwie lösen, ohne die Datenrate zu reduzieren?

Besten Dank für jeden Hinweis!!!
Angehängte Dateien:
#1395176
Lesenswert?

Wie man es eigentlich machen müsste: Takt vom Master zum Slave 
übertragen, dort umdrehen und wieder zurück übertragen. Dann passen Takt 
und Daten immer zusammen. Dumm daran ist, dass die üblichen SPI-Module 
das nicht hergeben. Wenn man allerdings im Master den Tx-Teil vom SPI 
per Software implementiert und das eigene Hardware-SPI nur als Slave für 
Rx verwendet, dann geht das. Oder mit zwei Hardware-SPIs, einer pro 
Richtung.
Gast #1395207
Lesenswert?

Tut mir leid, das ging mir viel zu schnell! Mit Umdrehen meinst du, dass 
der Slave zum Master wird und der Master zum Slave?

Und diesen Abschnitt verstehe ich leider gar nicht. :-|

>Wenn man allerdings im Master den Tx-Teil vom SPI
>per Software implementiert und das eigene Hardware-SPI nur als Slave für
>Rx verwendet, dann geht das. Oder mit zwei Hardware-SPIs, einer pro
>Richtung.

Könntest Du vielleicht etwas ausführlicher erläutern?
#1395219
Lesenswert?

1
"Master"                                         Slave
2
MOSI1+SCK1 => RS485-Tx => Leitung => RS485-Rx => MOSI+SCK
3
MISO2+SCK2 <= RS485-Rx <= Leitung <= RS485-Tx <= MISO+SCK

Also: SCK vom Master zum selektierten Slave schicken und dort auf einer 
zweiten Leitung wieder zurück zum Master schicken. Die Hin-Leitung 
taktet den Sender des Masters, die Rück-Leitung den Empfänger.

Wenn man auf Master-Seite zwei SPI-Module zur Verfügung hat, dann nimmt 
man das eine davon (MISO1/SCK1) als Master konfiguriert zum Senden, das 
andere (MISO2/SCK2) als Slave konfiguriert zum Empfangen.

Hat man nur eines, nimmt man zum Senden Software-SPI.
Gast #1395247
Lesenswert?

OK, jetzt kapiert :-)  Vielen Dank!!!! Interessante Lösung!!


Noch was:
Man muss praktisch ja nur den Zeitpunkt, an dem der Master die Daten 
liest etwas verzögern. Lässt es sich nicht mit den Einstellungen 
Clock-Polarity und Clock-Phase machen?
Moderator (Firma: Titel) Persönliche Seite #1395919
Lesenswert?

> Lässt es sich nicht mit den Einstellungen
> Clock-Polarity und Clock-Phase machen?
Damit änderst du auch den Sender.

> wegen längeren Entfernungen
Wie lang?
1 Meter Kupferkabel bringt dir auch schon ca. 3ns Verzögerung...

>Nun die Treiber und Receiver haben Propagation-Delays bis zu 100ns
Nimm schnellere: LTC1686
1
Precision Propagation Delay Over Temperature:
2
Receiver/Driver 18.5ns ±3.5ns
Gast #1395948
Lesenswert?

>Wie lang?
>1 Meter Kupferkabel bringt dir auch schon ca. 3ns Verzögerung...

Kann bis zu 10m lang werden.


>Nimm schnellere: LTC1686

Das ist natürlich auch möglich. Ich würde halt gern ICs benutzen, die 
z.B. nur 4 Transmitter bzw. 4 Receiver haben, weil man bei SPI auf der 
Slave-Seite 3 Receiver und nur einen Transmitter braucht und auf der 
Master-Seite umgekehrt 3 Transmitter und einen Receiver. Mit einem Quad 
Receiver bzw. Transmitter kann man das kompakter aufbauen. Und für 3.3V 
Supply habe ich nur Quads gefunden mit Delays von ca. 100ns. Alles mit 
Trancievern aufzubauen würde bedeuten, mehr Platz auf der Platine und 
viele unbenutzte Transmitter bzw. Receiver.

Mit schnellen Bausteinen kann man das Problem lösen. Aber wenn man damit 
rechnet, dass im System zukünftig die Anzahl der Slaves (und damit die 
Datenrate) und die Buslänge zunehmen, dann ist wohl sinnvoller, den 
Vorschlag von A.K. zu realisieren. Seht ihr das auch so??
Gast #1395974
Lesenswert?

>Hast du nach RS485 statt RS422 gesucht?

Hab eigentlich gezielt nach RS485 gesucht. Was ist eigentlich der 
Unterschied zwischen RS485 und RS 422? Wikipedia sagt, dass RS422 nicht 
so ohne weiteres im RS485-Netzwerken verwendbar ist.
#1395986
Lesenswert?

Der klassische Bild: RS422 implementiert eine full-duplex Punkt-to-Punkt 
Verbindung mit nicht abschaltbarem Transmitter, RS485 eine half oder 
full-duplex Busverbindung für >2 Teilnehmer mit abschaltbarem 
Transmitter.

In der Realität ist es etwas komplizierter, denn bereits der 
RS422-Klassiker AM26LS31 ist abschaltbar. Allerdings haben RS422 
Bausteine keine Überlastsicherung, weil Kollisionen anders als bei RS485 
nicht zum normalen Betrieb zählen.

Da es bei solchem SPI aber ebensowenig Kollisionen gibt, ist das auch 
mit abschaltbaren Bausteinen für RS422 realisierbar.
Gast #1395998
Lesenswert?

RS422 ist durchaus busfaehig. Standardmaessig mit einem bestimmten 
Master, der immer auf Senden ist. Waehrend die Slaves nur senden wenn 
sie muessen.

Ich versteh das Gejammer ueber die Verzoegerung nicht. Die Verzoegerung 
des kabels faellt weg, da Daten und Clock verzoegert werden. Desgleichen 
die Verzoegerung von Treibern. Dann ist eigentlich nur die Skew zwischen 
Clock und Daten wichtig. Der Clock muss kommen wenn die Daten stabil 
sind. Dh wenn man Treiber hat, die die gewuenschte SPI frequenz bringen, 
ist man dabei.
#1396015
Lesenswert?

KelleRassel schrieb:

> Ich versteh das Gejammer ueber die Verzoegerung nicht. Die Verzoegerung
> des kabels faellt weg, da Daten und Clock verzoegert werden.

Das bezog aich auf die klassische SPI-Variante ohne Rückführung des 
Takts. Dann spielt die Verzögerung durchaus eine bedeutende Rolle. Erst 
mit der von mir vorgeschlagenen Rückführung des Takts ist wie du richtig 
schreibst nur der Skew wichtig.
Gast #1396117
Lesenswert?

Danke an alle!!!

Noch eine Unklarheit. Im Wikipedia-Artikel zu RS485 (Vergleich RS485 und 
RS422) steht:

   Bei EIA-422 Bauteilen, die doch über einen Driver-Enable verfügen,
   reicht die Treiberstärke nicht aus, um ein an beiden Enden 
terminiertes
   Netzwerk zu treiben.

Ihr sagt, für SPI, bei dem nie 2 Transmitter gleichzeitig aktiv sind 
reicht RS422 aus. Wie ist es mit der Treiberstärke und terminiertem 
Kabel aus eurer Sicht? Stimmt die Wikipedia-Behauptung nicht?
Gast #1396204
Lesenswert?

Hab jetzt ein Datenblatt vom Quad RS422-Transmitter angeschaut (im 
Anhang). In der Tabelle DC Electr. Characteristics finde ich:

Diff. Driver Output  bei RL = 100 Ohm  min. 2V

Wenn ich das richtig verstehe heißt es, dass bei bei einem 
Lastwiderstand von 100 Ohm die Spannung zw. den differentiellen 
Ausgängen nicht unter 2V fällt.

Aber ein mit zwei 120 Ohm Widerständen abgeschlossener Bus ( die 
Receiver jettz mal außer Acht gelassen) ist ja schon effektiv mit 60 Ohm 
belastet. Ob mit 60 Ohm Last die diff. Ausgangsspannung noch über der 
nötigen Schwelle von +/- 0.2V liegt garantiert das Datenblatt nicht. 
Somit kann ich speziell diesem Datenblatt nicht entnehmen, ob diese 
Treiber busfähig sind, oder? Oder sehe ich das falsch?
#1396229
Lesenswert?

Nominell ist das offenbar richtig, RS422 Bausteine sind mit 100 Ohm Last
angegeben, RS485 Bausteine mit 54 Ohm.

Aber schau mal beim MAX3030 auf Seite 4 links unten. Das langt auch bei 
54 Ohm noch locker. Nur ist das in dieser Kurve eben der typische Wert, 
nicht der vom Hersteller garantierte.

Heisst also: Formal korrekt ist es nur mit RS485 Treibern. Funktionieren 
wird es mit den MAX303x aber ziemlich sicher ebenfalls.
#1396410
Lesenswert?

Wenn nur ein Slave dranhängt, dann ist das Point-to-Point und passt 
RS422.

Aber wenn es mehrere Slaves am gleichen Bus gibt und folglich das SPI 
als Multidrop-Bus aufgebaut ist, dann haben MISO und der rücklaufende 
Takt Buscharakteristik und müssen an beiden Enden abgeschlossen werden.

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