Forum: Mikrocontroller und Digitale Elektronik SPI Chip Select Problem?


von Michael S. (scm)


Lesenswert?

Hallo zusammen,

ich bin in diesem Forum schon oft hilfesuchend fündig geworden, hänge 
nun aber schon seit einiger Zeit an einem Problem, zu welchem ich weder 
hier noch woanders eine Lösung finde. Ich hoffe, es ist hier jemand bei, 
der einen Hinweis hat. Hier das Problem:

SPI Kommunikation zwischen Feather M0 und LSM303 will nicht so recht. 
Der Sensor ist mit etwa 5cm langen Leitungen mit dem uC verbunden und es 
gibt 4k7 PullUp an den Datenleitungen sowie dem CS.

Wenn ich nun den Sensor über den uC konfigurieren will, funktioniert 
dies leider nicht. Um den Fehler zu suchen, habe ich direkt am CS Pin 
des uC eine 30cm lange Leitung gehängt und an dessen Ende den Tastkopf 
des Oszilloskops und voila, es hat funktioniert. Danach wollte ich es 
ohne Tastkopf nochmal versuchen, Tastkopf entfernt (nicht die 30cm 
Leitung)und es hat zu meinem Erstaunen auch funktioniert. Nun habe ich 
unzählige Tests gemacht - mit Leitung, mit Tastkopf, mit verändertem 
PullUp, anderer Pin am uC, einfach mal 10s den CS auf Low ziehen bevor 
ich konfiguriere und es zeigt sich ein einheitliches Bild: sobald ich 
die etwa 30cm Schaltlitze an den CS hänge, funktioniert es. Die Litze 
läuft ins Leere, auch kein Tastkopf. 10x hintereinander nur mit Litze 
funktioniert, 10x ohne funktioniert nicht. Hat jemand Ähnliches schonmal 
gesehen? Ich drehe mich seit Tagen im Kreis...

Vielen Dank im Voraus! Gerne schiebe ich Informationen nach, wenn etwas 
fehlt!

Schöne Grüße
SCM

von Megatroll (Gast)


Lesenswert?

Wozu Pullup ? Lass die weg.

Allenfalls ein Schema, welche Pins, incl GND und Vcc  wurde wo und wie 
angeschlossen. Wie schnell laeuft das Ganze ? Allenfalls ein Bild vom 
Aufbau. Allenfalls ein Bild vom Oszilloskop.

von Megatroll (Gast)


Lesenswert?

Allenfalls ist ddas Verhalten des chips auch nicht ganz Standard. Man 
muss das Datenblatt, speziell bei analog Devices sehr genau anschauen, 
wie das mit den Flanken genau gehen soll.

von Peter D. (peda)


Lesenswert?

SPI ist recht empfindlich. Vermutlich koppelt SCK auf /CS über und die 
zusätzliche Kapazität mildert das ab.
Versuche mal mit 100R Widerständen, die Flanken langsamer zu machen. Die 
Widerstände kommen unmittelbar an den Ausgang, d.h. für MOSI, SCK, /CS 
an den Master und für MISO an den Slave.

von Michael S. (scm)


Lesenswert?

Vielen Dank @Peter D., das hat sehr geholfen! Ich habe nach und nach 
100R Widerstände an die Ausgänge gehängt und getestet. SCK allein 
reichte nicht, auch zusammen mit CS hat es noch nicht funktioniert. 
Jetzt, wo an allen vier Ausgängen 100R Widerstände hängen, funktioniert 
es einwandfrei!

Als ich die Schaltung entworfen habe, hing der Sensor an längeren 
Leitungen. Nur jetzt, im finalen Gehäuse mit kurzen Leitungen, traten 
die Probleme auf. Wieder eine lesson learned!


Nochmals vielen Dank und einen schönen Abend!!

von Klaus (Gast)


Lesenswert?

Michael S. schrieb:
> Wieder eine lesson learned!

Was hast du denn gelernt? Wenn eine Schaltung nicht geht, kippt man 
solange 100Ω Widerstände drüber, bis sie geht. Warum sind eigentlich 
Schaltungen von anderen nicht voll mit 100Ω Widerständen? Warum, wenn 
sie nötig sind, werden sie nicht gleich in den Chip integriert? Klär 
doch mal die Mitleser hier auf, ich will auch was lernen.

MfG Klaus

Peter D. schrieb:
> SPI ist recht empfindlich. Vermutlich koppelt SCK auf /CS über und
> die zusätzliche Kapazität mildert das ab.

Der gängige Fehler ist, das die Daten mit der falschen Clockflanke 
übernommen werden. Ein Stück Kabel oder der Tastkopf schiebt den Clock 
soweit, das es gerade noch passt.

MfG Klaus

von Frickelfritze (Gast)


Lesenswert?

Klaus schrieb:
> Ein Stück Kabel oder der Tastkopf schiebt den Clock
> soweit, das es gerade noch passt.

Säääähr rischdisch!

von Frickelfritze (Gast)


Lesenswert?

Peter D. schrieb:
> SPI ist recht empfindlich.

SPI ist recht unempfindlich. Denn der Slave hat üblicherweise
eine halbe Clock Periode Zeit die Daten vom Master zu
übernehmen wenn SPI richtig konfiguriert ist.

Die vielen Leute die SPI über 30 cm Steckbrett-Leitungen
"erfolgreich" betreiben beweisen es dir.

von Peter D. (peda)


Lesenswert?

Frickelfritze schrieb:
> SPI ist recht unempfindlich. Denn der Slave hat üblicherweise
> eine halbe Clock Periode Zeit die Daten vom Master zu
> übernehmen wenn SPI richtig konfiguriert ist.

Du kannst das SPI auch mit 100Hz betreiben, an dem kapazitiven 
Übersprechen ändert das genau 0,nix.
Die SPI-Slaves sind in der Regel viel zu schnell (>=50MHz). Da man aber 
oft keine 50MHz braucht, kann man die Flankensteilheit mit nem 
Widerstand reduzieren.
Wichtig ist auch eine getrennte Signalführung und eine gute 
GND-Verbindung. Nimmt man Flachkabel, sollte zwischen den 4 Signalen 
immer ein GND-Draht liegen.

von Peter D. (peda)


Lesenswert?

Klaus schrieb:
> Der gängige Fehler ist, das die Daten mit der falschen Clockflanke
> übernommen werden.

Dann helfen aber Reihenwiderstände nicht, da sie SCK und MOSI um den 
gleichen Betrag verschieben. Und ein Kondensator an /CS natürlich auch 
nicht.

von Megatroll (Gast)


Lesenswert?

Es geht eigentlich weniger darum, die Flanken zu daempfen wie die 
Reflexionen zu reduzieren.

von Falk B. (falk)


Lesenswert?

Ohne ein Bild vom realen Aufbau und einer ECHTEN, HF-tauglichen Messung 
ist das alles nur Spekulation. Bei 5cm Leitungsläng müssen die Flanken 
schon SEHR steil sein, um Refletionen zu erzeugen, siehe 
Wellenwiderstand, so in der Liga 2ns und weniger. OK, moderne uCs 
und Logik-ICs schaffen das. Vermutlich ist es eher ein Problem der 
unsauberen, nicht hf-tauglichen Masseführung, sowohl auf dem Board als 
auch auf der Leitung.

von Frickelfritze (Gast)


Lesenswert?

Peter D. schrieb:
> Du kannst das SPI auch mit 100Hz betreiben, an dem kapazitiven
> Übersprechen ändert das genau 0,nix.

Bei kurzen Kabeln wie es der TO beschreibt macht das Kabel-
Übersprechen genau 0,nix. Denn bei diesen Verhältnissen
trägt der niedrige Quellwiderstand des Ausgangstreibers
entscheidend dazu bei dass alles stabil steht.

Peter D. schrieb:
> Nimmt man Flachkabel, sollte zwischen den 4 Signalen
> immer ein GND-Draht liegen.

Ja, besonders bei

Michael S. schrieb:
> etwa 5cm langen Leitungen

von Klaus (Gast)


Lesenswert?

Peter D. schrieb:
> Dann helfen aber Reihenwiderstände nicht, da sie SCK und MOSI um den
> gleichen Betrag verschieben. Und ein Kondensator an /CS natürlich auch
> nicht.

Richtig, man sollte den SPI-Mode am µC einfach richtig einstellen. Und 
sich nach dem Datenblatt richten und nicht einfach solange rumprobieren, 
bis es mal geht.

MfG Klaus

von A. S. (Gast)


Lesenswert?

Es gibt bei CS verschiedene Modi für das Zusammenspiel von Clock, Daten 
und CS.

https://de.wikipedia.org/wiki/Serial_Peripheral_Interface#Protokollablauf_und_Einstellm%C3%B6glichkeiten

In der Regel funktioniert der richtige gut, und noch ein weiterer so 
gerade.

Vodoo mit kurzen Leitungslängen oder 100R Widerständen sieht aus nach 
"so gerade". Nimm lieber die, die gut funktioinert.

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.