Forum: Mikrocontroller und Digitale Elektronik SPI über eine Kabel


von Peter S. (cbscpe)


Lesenswert?

Ich habe hier eine Anwendung mit einer SD-Card über SPI. Der Takt 
beträgt knapp 12MHz. Alles ist auf der gleichen Platine (13x10cm). Der 
Host läuft mit 5V und ich verwende Pegelwandler. Alles funktioniert. Nur 
leider ist die SD-Card sehr schwer zugänglich wenn die Platine eingebaut 
ist. Daher möchte für die nächste Version zwischen dem Host und der 
SD-Card eine Verlängerung, Flachbandkabel, einsetzen. Ideal wären so 
etwa 30cm. Frage, wo kommen die Pegelwandler hin, welche Leitungen 
sollte ich wo abschliessen und wie beschalte ich das Kabel am 
sinnvollsten? Und ist das überhaupt realistisch, respektive welche 
Taktfrequenz ist mit 30cm noch machbar?

Gruss
Peter

von Einer K. (Gast)


Lesenswert?

30cm bei 12MHz halte ich schon für arg optimistisch

evtl möchtest du differenzielle Leitungstreiber verwenden.

von Sebastian S. (amateur)


Lesenswert?

Kommst Du denn überhaupt an die Software ran?

Rund um die SD-Kartenleserei wird fast immer mit dem maximal möglichen 
Takt, auf dem Bus gearbeitet. Vor allem, bei einer Länge von 30 cm, 
wirst Du da Probleme bekommen.

Die Geschwindigkeit wird aber immer vom Rechner (Master) vorgegeben. 
Diese wird aber fast immer - so sie denn variabel ist - wärend dessen 
Initialisierung (Software) festgelegt.

von Peter S. (cbscpe)


Lesenswert?

Ich habe Zugriff auf Alles, ich habe die Schaltung entworfen und die 
Software geschrieben.

Ich weiss 12MHz und 30cm ist optimistisch. Ist aber kein need-to-have 
sondern nur ein nice-to-have.

Also anders gefragt, was ist mit 30cm noch machbar ohne dass man auf 
aufwändige Schaltungen zurückgreift. Eben wo gehören die Pegelwandler 
hin, wie und wo schliesse ich die Leitungen ab und wie beschalte ich das 
Flachbandkabel.

von c-hater (Gast)


Lesenswert?

Peter S. schrieb:

> Also anders gefragt, was ist mit 30cm noch machbar ohne dass man auf
> aufwändige Schaltungen zurückgreift.

12MHz sollten durchaus noch recht problemlos machbar sein.

Nur mal zur Erinnerung: PATA lief mit bis zu 133MHz an bis zu 40cm 
langen Flachbandkabeln...

Der Trick war einfach nur: jede zweite Ader im Kabel ist GND und es gibt 
eine (passive) Busterminierung, sprich: zwei (bei PATA auch: drei) 
Widerstände pro Signalstrippe. Im Falle von SPI mit einem Master und 
einem Slave fallen also drei Widerstände als Aufwand an (weil SCK nur 
unidirektional ist).

Das hört sich für mich jetzt irgendwie noch nicht wie eine wirklich 
"aufwendige Schaltung" an...

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Was für ein Prozessor ist es denn?
Zusätzlich von den chater genannten Terminierungen bei PATA sollte der 
Ausgangstreiber dann auch nicht auf Vollgas gestellt werden, sondern so 
dasses grade reicht von der Anstiegszeit her.

Nicht die Frequenz ist das Problem, sondern die Steilheit der 
Signalflanke.

von c-hater (Gast)


Lesenswert?

Mw E. schrieb:

> Zusätzlich von den chater genannten Terminierungen bei PATA sollte der
> Ausgangstreiber dann auch nicht auf Vollgas gestellt werden, sondern so
> dasses grade reicht von der Anstiegszeit her.

Öhm, naja. Wenn zuviel Power vom Treiber kommt, macht man einfach die 
Widerständer größer. Bezüglich der Signale selber spielt das keine 
Rolle, bezüglich der eingehenden EM-Gülle ist es sogar besser, es erhöht 
das SNR.

Nur bezüglich der abgestrahlten EM ist es natürlich schlechter. Aber so 
lange man nicht ein kommerzielles Produkt durch die EMV-Prüfung bringen 
muss... Who cares?

von Andre (Gast)


Lesenswert?

Alternativ mit LVDS die Strecke überbrücken? Z.B.  DS90LV019

von Peter S. (cbscpe)


Lesenswert?

Meine Erfahrung mit SPI zeigt, dass vor allem der Clock mit den Daten 
synchron sein muss. D.h. bei der entsprechenden Flanke muss MISO stabil 
und richtig sein.

Ich setzte übrigens einen Atmega ein. Der DS90LV019 ist schön, man kann 
ich mit 3 und 5V betreiben. Vielleicht sind differenzielle 
Leitungstreiber eh die einfachste Lösung.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Das ist immer so bei synchronen Bussen.
Daher auch die Terminierung, damit keine Reflektion so stark wird, dass 
die Taktflanke verschliffen wird oder eine zweite erkannt werden kann.

Welchen Atmega quälste denn mit 24MHz für 12MHz SPI Takt?
Die gehn doch nur bis 20MHz.

Mit LVDS baue ich auch demnächst was, aber das ist dann ein SPI mit 
42MHz über 2m CAT5 RJ45.
Da hab ich die TX/RX hier genutzt:
https://www.mouser.de/ProductDetail/512-FIN1027AMX
https://www.mouser.de/ProductDetail/926-D90LV012ATMFXNPB

Die könn aber nur 3,3V, also dann eher für die SD Seite um ein paar 
Kosten zu sparen.
(Der DS90LV019 ist doch recht teuer)

von Peter S. (cbscpe)


Lesenswert?

Ok ich geb's zu ich quäle den Atmega1284P, nicht ganz mit 24MHz sondern 
"nur" mit einem 22.1184MHz Baudratenquartz. Ich könnte natürlich auch 
nett sein und einen 19.6608MHz Bauratenquartz nehmen. Hatte ich aber als 
ich den Prototypen aufgebaut hatte gerade nicht zur Hand. Wie gesagt 
läuft es einwandfrei. Aber das ändert nichts an meinem Problem. Ich kann 
mir nicht vorstellen, dass es mit 10MHz SPI einfacher wird.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Peter S. schrieb:
> welche Leitungen sollte ich wo abschliessen
Serienterminierung immer direkt nach dem Treiber und 30cm sind kein 
Problem.
Siehe dazu auch den Beitrag "Re: Serienwiderstand bei Hochfrequenz"

von Falk B. (falk)


Lesenswert?

Peter S. schrieb:

> SD-Card eine Verlängerung, Flachbandkabel, einsetzen. Ideal wären so
> etwa 30cm.

Kann man machen.

> Frage, wo kommen die Pegelwandler hin,

Naja, ist nicht so kritisch. Die kann man an den 5V Host oder die 
SD-Karte setzen.

> welche Leitungen
> sollte ich wo abschliessen

Da bei SPI alles unidirektional ist, nimmt man Serienterminierung an den 
jeweiligen Ausgängen. Siehe Wellenwiderstand.

> und wie beschalte ich das Kabel am
> sinnvollsten?

Im Idealfall legt man jede 2. Ader auf GND, siehe Artikel 
Wellenwiderstand.

> Und ist das überhaupt realistisch,

JA!
> respektive welche
> Taktfrequenz ist mit 30cm noch machbar?

Wenn es sein muss 50 MHz oder mehr, wenn man weiß was man tut.

von Falk B. (falk)


Lesenswert?

Arduino Fanboy D. schrieb:
> 30cm bei 12MHz halte ich schon für arg optimistisch

Ja, das "halten" ist so eine Tätigkeit. Ebenso wie das "meinen".

> evtl möchtest du differenzielle Leitungstreiber verwenden.

Quark^2.

von Falk B. (falk)


Lesenswert?

Peter S. schrieb:
> Ich weiss 12MHz und 30cm ist optimistisch. Ist aber kein need-to-have
> sondern nur ein nice-to-have.

Unfug! Das ist HF-mäßig bestenfalls Lehrlingsniveau!

von Peter S. (cbscpe)


Lesenswert?

Also einfach mal ausprobieren würde ich sagen. Serienterminierung und 
jede zweite Ader auf GND scheint wohl das Minimum zu sein. Ich mache mal 
sicher auch einen Aufbau mit differenziellen Leitungstreiber. Auf der 
Host Seite 5V Versionen und auf der SD-Card Seite 3V Versionen, der 
Mehraufwand zu den normalen Pegelwandler die ich eh benötige hält sich 
ja in Grenzen.

Falls es jemanden interessiert es geht um einen RLV12 Emulator für eine 
PDP-11. Der Prototyp läuft wie gesagt einwandfrei. Aber eben die 
SD-Karte ist sehr schlecht zugänglich wenn der Einschub im Bus steckt. 
Ideal wäre eine Verlängerung bis zum Breakout Panel, das ist je nach 
Position 25-80cm entfernt.

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.