Forum: Mikrocontroller und Digitale Elektronik Störungsschutz auf der Slave-Select-Leitung bei SPI, geht es so?


von noips (Gast)


Lesenswert?

Guten Morgen!

Bei einer Datenübertragung per SPI über ca. 5 - 10 m werden die Signale 
CLK und SOMI/SIMO differentiell übetragen (RS485) und das Signal SS 
single ended. Zum Schutz des SS von Störungen (Spikes) ist folgendes 
vorgesehen:

 - abgeschirmtes Kabel
 - Tiefpass und Schmitt-Trigger vor dem SS-Eingang

Jetzt möchte ich euch um eine Beurteilung bitten, ob es so geht.

Und noch zur Dauer der Spikes, die ja zur Tiefpass-Dimensionierung 
bekannt sein soll. Gibt es da irgendwelche Orientierungswerte dazu, wie 
lange die Spikes sein können, oder kann man das allgemein überhaupt 
nicht sagen?

Für jede Hilfe bin ich sehr dankbar!

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

SPI über 5...10m ist nicht gut. Lieber eine andere externe 
Interface-Form wählen und SPI-Signale nur lokal auf der Platine 
verwenden. SPI kan u.U. sehr schnell sein, bis 66Mhz bei 
Flash-Bausteinen zum Beispiel.

von noips (Gast)


Lesenswert?

>SPI über 5...10m ist nicht gut. Lieber eine andere externe
>Interface-Form wählen und SPI-Signale nur lokal auf der Platine
>verwenden. SPI kan u.U. sehr schnell sein, bis 66Mhz bei
>Flash-Bausteinen zum Beispiel.

SPI ist primär für platineninterne Kommunikation gedacht, aber es gibt 
Erfahrungen mit SPI-Datenübertragung über längere Entfernungen ( > 10m ) 
mit Bustreibern. Es muss mit SPI realisiert werden, daran wird nichts 
geändert.

von (prx) A. K. (prx)


Lesenswert?


von Matthias (Gast)


Lesenswert?

Warum eigentlich das SS Signal single Ended?

Wenn man sowieso RS485 macht, dann klatscht man auch gleich den Treiber
für das SS Signal mit rein. Dann sind alle Signale differentiell und 
relativ gut gegen Störungen gesichert. Außerdem muss man sich nicht den 
Kopf zerbrechen, was die Signallaufzeiten bzw. die Flankensteilheit 
betrifft....

von noips (Gast)


Lesenswert?

@ Matthias

Wenn es nur ein Treiber für SS wäre :-(. Jeder Slave braucht ja ein 
eigenes Signal und bei vielen Slaves möchte man nicht unbedingt pro 
Slave einen Treiber und slaveseitig einen Receiver spendieren. Hinzu 
kommt noch das sich die Anzahl der Leitungen verzweifacht.

@ A. K.

Es tut mir leid für den neuen Thread, in dem alten schien sich niemand 
mehr zu melden und ich dachte ich mache einen neuen und frag noch 
zusätzlich wegen Spike-Dauer.

von (prx) A. K. (prx)


Lesenswert?

Wieviele Slaves sind es denn?

von noips (Gast)


Lesenswert?

>Wieviele Slaves sind es denn?

Es können bis zu 10 werden aber es wurden 5 SS-Leitungen vorgesehen die 
dann mit Logik 2^5 = 32 Slaves erlauben.

von (prx) A. K. (prx)


Lesenswert?

Was ist kritischer? Aufwand im Slave oder Aufwand im Kabel? Wenn Kabel, 
dann hätte ich eine Idee: Eine einzige SS Leitung verwenden, in jedem 
Slave in ein Schieberegister bei SS=1 die Daten takten, das Ergebnis auf 
Node-Adresse vergleichen und mit SS=0 für den eigentlichen Slave-Select 
verknüpfen. Seitens des Masters bedeutet dies, bei Wechsel des 
adressierten Slaves vor SS=0 erst einmal mit SS=1 die Adresse zu senden.

von noips (Gast)


Lesenswert?

Braucht man dann nicht bei jedem Slave neben dem Schieberegister noch 
einen uC zum Auslesen und Vergleichen der Adresse? Das wäre etwas zu 
aufwändig. Als einfachste Slaves sind eigentlich nur SPI-fächige 
AD-Wandler geplant.

von (prx) A. K. (prx)


Lesenswert?

Nö, nur nen '688. Was man beispielsweise für 6 Adressbits braucht:

1x 74HC174, plus AND-Gate (SCK&SS) vorneweg.
1x 74HC688, SS als Enable rein, Ausgang ist Slave-Select.

Vielleicht gibt's auch einen SIPO Shifter mit passendem Enable.

von noips (Gast)


Lesenswert?

Tut mir leid, ich komm nicht mit. Als Takt-Signal des Schieberegister 
wird SCK&SS verwendet? Wird in Schieberegister die 6-Bit Adresse 
eingelesen? Was ist an die Dateneingänge anzuschließen?

von (prx) A. K. (prx)


Lesenswert?

Sorry, aber Grafik ist grad nicht drin, Prosa muss reichen.

Schieberegister, beispielsweise 74HC164, mit
mit CLK = SCK AND SS, also AND Gate davor.
und DIN = MOSI.
und CLR = 1
Da werden also bei SS=1 die SPI-Daten reingeschoben und parallel 
ausgegeben.

Die parallelen Ausgänge des Schieberegisters gehen an die eine Seite 
eines 74HC688 Komparators, dessen andere Seite geht an DIP-Switches oder 
ist fest verdrahtet. Das Enable des '688 geht an SS. Dessen Ausgang 
dient als eigentliches SS für den ADC oder was immer der SPI-Slave ist. 
Dieser Ausgang ist nur dann aktiv (0) wenn SS=0 ist, und die vorher bei 
SS=1 in das Schieberegister reingeschobene Adresse die Node-Adresse ist.

von (prx) A. K. (prx)


Lesenswert?

Bingo! Wenn 16 Adressen ausreichen, dann geht das auch mit dem 74HC194. 
Erspart das AND Gate für den Takt. Das lässt sich so verschalten, dass 
bei SS=0 nichts passiert.

Also, in jeder SPI-Node:

CP'194  = SCK
DSL'194 = MOSI
S1'194  = SS (ein einziges SS für alle Slaves!)
S0'194  = 0
MR'194  = 1

Px'688  = Qx'194
Qx'688  = Node-Adresse
G'688   = SS
P=Q'688 = Select-Leitung für SPI-Slave, und RS485-Enable

von noips (Gast)


Lesenswert?

OK, jetzt bin ich mitgekommen. Gegenüber meiner Lösung bringt es also 
folgendes:

Vorteile:

 - nur 2 statt 5 Leitungen für SS
 - Einsparung von 5 Tiefpässen
 - Einsparung von 5 Schmitt-Trigger
 - SS besser geschüzt gegen Störungen

Zusätlicher Aufwand:

 - 74HC164 (oder 74HC194)
 - UND-Gatter
 - RS485-Treiber masterseitig
 - RS485-Receiver slaveseitig
 - Adresse statt auf 5 Port-Pins seriell über MOSI

Gibt es die Schieberegister auch mit 3.3 V Supply?

von (prx) A. K. (prx)


Lesenswert?

74HC geht ab 2V. Mit dem '194 entfällt das UND-Gatter. Dafür hast du das 
74HC688 vergessen. Wer hat bei deiner 2-aus-5 Version die beiden SSx 
kombiniert?

von noips (Gast)


Lesenswert?

74688 und DIP-Schalter hatte ich auch so schon zur Adresszuweisung bei 
den Slaves.

Das scheint eine gute Lösung zu sein! Vielen Dank, die werde ich mal 
vorschlagen.

von noips (Gast)


Lesenswert?

>Wer hat bei deiner 2-aus-5 Version die beiden SSx kombiniert?

2-aus-5 Version ???

5 SS-Signale single ended => 5 Leitungen

1 SS-Signal differentiell => 2 Leitungen

Also statt 5 nur 2 Leitungen nötig.

von (prx) A. K. (prx)


Lesenswert?

noips schrieb:

> 2-aus-5 Version ???

Missverständnis. Bei 5 Signalen kann man auch mit einem einfachen 
2-Input Gate schon 10 verschiedene Adressen auseinander halten, braucht 
dafür keinen Komparator.

von noips (Gast)


Lesenswert?

Aber mit 74HC164 braucht man doch auch kein UND-Gatter. Er hat zwei 
Dateneingänge die miteinander verundet sind. An einen von beiden MOSI an 
den anderen SS. Und 32 Slaves möglich. So würde es doch auch gehen, 
oder?

von (prx) A. K. (prx)


Lesenswert?

Der doppelte Dateneingang nützt dir nichts. Man muss den Takt 
unterdrücken und damit verhindern, dass er bei SS=0 schiebt, sonst 
schiebt er auch in der normalen SPI-Phase bei SS=0 und das Select-Signal 
verschwindet mittendrin.

von noips (Gast)


Lesenswert?

Stimmt!

Noch was anderes. Mit der Lösung mit Shiftregister ist aber die 
SPI-Einstellung nicht mehr gegeben, bei der an der negativen SCK-Flanke 
eingelesen wird. Oder wenigstens nicht beim Übermitteln der Adresse, 
oder?

von (prx) A. K. (prx)


Lesenswert?

Das ist eine Frage des gewählten SPI-Mode. Passt jedenfalls zu Mode 0 
und 3, denke ich.

Den kann man in der Adressphase aber anders halten als in der 
Datenphase. Ich habe eine Anwendung mit 2 SPI-Slaves am gleichen Bus, 
die verschiedene Modi benötigen.

Nur muss man hier aufpassen, dass man bei der Mode-Umschaltung nach der 
Adressphase bei inaktivem SS keine positive Flanke produziert, denn die 
schiebt dann.

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.