SPI Chip Select Problem?

OP #5899243
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
Gast
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.
Gast
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.
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.
OP
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!!
Gast
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
Gast
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.
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.
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.
Gast
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
Gast
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 7 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.