Störungsschutz auf der Slave-Select-Leitung bei SPI, geht es so?

Gast #1398673
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!
Gast #1398701
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.
Gast #1398712
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....
Gast #1398722
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.
#1398754
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.
Gast #1398793
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.
#1398873
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.
#1398900
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
Gast #1398939
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?
Gast #1398952
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.
Gast #1399049
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?
#1399056
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.

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