Forum: Mikrocontroller und Digitale Elektronik Abschlusswiderstände SPI-Bus


von Tobi G. (Gast)


Lesenswert?

Hallo,

folgendes Problem. Ich möchte an einem AVR32 AP7 an einem SPI Bus bis zu 
8 Teilnehmer anhängen. Der Controller braucht für den Übergang von 0V 
auf 3.3V an einem SPI Pin. ca. 1ns. Nach allem was ich bis jetzt über 
Wellenwiderstände und Leistungsanpassung gelesen habe komme ich schon 
bei unter 5 cm Leitungslänge in den kritischen Bereich. Da ich nicht 
glaube, dass ich die 8 Endpunkt auf diese Länge anschließen kann sind 
wohl Abschlusswiderstände angesagt.

Was ich auch schon herausgefunden habe ist, dass eine Serienanpassung 
(also einfach einen Serienwiderstand nach dem Treiber) wohl eher für 
Punkt-zu-Punkt geeignet ist. Ich habe ja aber eine eins-zu-viele 
Kommunikation. Also wäre vielleicht ein Abschluss mit 
Thevenin-Terminierung sinnvoll? Und genau hier kommt mein Problem. Ich 
lese immer nur, dass die Parallelschaltung der beiden Widerstände dem 
Leitungswiderstand entsprechen muss.

Z = R1 || R2
(R1 -> Pull-Up, R2 -> Pull-Down)

Aber wie lege ich die beiden Widerstände aus. Muss es R1 = R2 = 2*Z 
sein? Oder kann ich das Verhältnis wählen wie ich lustig bin hauptsache 
die oben genannte Bedingung ist erfüllt?

Hierbei kommen wir zur nächsten Problematik. Mein Controller kann max 
8mA über einen Port liefern, was ja bedeutet, dass ich ihn nicht mit 
einem Widerstand kleiner 450 Ohm belasten sollte. Das würde ja bedeutet, 
dass mein R2 auf diesen Wert schon festgelegt ist. Das zugehörige R1 
wären ca. 90 Ohm (bei Z = 75 Ohm).

Liege ich mit meinen Berechnungen richtig oder habe ich etwas übersehen?

Mein letztes Problem ist die MISO Leitung. Wie schließe ich eine 
viele-zu-eins Kommunikation ab? Und wo sollte dieser Abschluss auf dem 
Layout platziert werden.

Schon im Vorraus vielen Dank.

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


Lesenswert?

Aus Wellenwiderstand:
>Wenn eine elektrische Leitung als lang betrachtet werden muß,
>dann treten Reflexionen auf.
>:
>Eine Leitung ist dann als elektrisch lang zu betrachten,
>wenn die einfache >Laufzeit der Leitung grösser als
>ca. 1/6 der minimalen Anstiegszeit der Signale ist.

Sorg doch einfach dafür, dass du keine "elektrisch lange" Leitung hast, 
indem du die Anstiegszeit mit einem Serienwiderstand an den schnellen 
Ausgangspins reduzierst. Geht natürlich nicht, wenn du deinen SPI mit 
500MHz fahren willst :-)

von Tobi G. (Gast)


Lesenswert?

Ich gleichen Text steht aber auch drin, dass man diese 
Serienterminierung nur bei 1:1 Verbindungen benutzen soll.

von Andreas K. (a-k)


Lesenswert?

Tobi G. wrote:

> Mein letztes Problem ist die MISO Leitung. Wie schließe ich eine
> viele-zu-eins Kommunikation ab?

Sind die SPI-Slaves genauso fix auf der Flanke wie der Controller? Wenn 
nicht, stellt sich das Problem nicht.

von Tobi G. (Gast)


Lesenswert?

Stimmt die Slaves sind sehr viel langsamer. D.h. es ist wirklich kein 
Problem.
Und ich glaube ich habe mittlerweile auch die Einwende von Mr. Miller 
verstanden: Ich bin nicht darauf angewiesen, dass ich Flanken von 1ns 
hinbekomme. Wenn ich das richtig verstanden habe kann ich sogar einen 
sehr viel zu großen Widerstand benützen (z.B. 100 Ohm) und alles was 
passiert ist, dass meine Flanke langsamer wird. Oder handle ich mir da 
andere Probleme ein?

Vielen Danke für die Hilfe.

von Andreas K. (a-k)


Lesenswert?

MOSI ist auch unwichtig, weil da nur der Zustand zählt. Bei CS hängt es 
vom Slave ab, manche finden die Flanke interessant, andere nicht. Beim 
Takt ist wichtig, dass die Flanke durch Reflexionen nicht soweit 
beschädigt wird, dass aus einem Takt auch mal zwei werden. Wird dessen 
Flanke durch R/C entsprechend gebremst, dann passiert das nicht. Da kann 
also auch ein kleiner C helfen.

von lkmiller (Gast)


Lesenswert?

>Ich gleichen Text steht aber auch drin, dass man diese
>Serienterminierung nur bei 1:1 Verbindungen benutzen soll.
Schon, aber das gilt ja wieder nur, wenn ich eine
"elektrisch lange" Leitung habe.

Mit dem von mir vorgeschlagenen Serienwiderstand mache ich keine 
Serienterminierung, sondern erhöhe nur den Ausgangswiderstand des 
betreffenden Treibers. Ich reduziere damit die Flankensteilheit
des Signals und erzeuge mir so eine "elektrisch lange" Leitung
gemäß der Definition.


>...dass aus einem Takt auch mal zwei werden....
Reflexionen erkennt man i.A. nicht an doppelten Takten,
sondern an verzerrten Signalen (Überschwinger, Klingeln...),
und zwar abhängig von der Position des Messpunktes.

von Andreas K. (a-k)


Lesenswert?

lkmiller wrote:

>>...dass aus einem Takt auch mal zwei werden....
> Reflexionen erkennt man i.A. nicht an doppelten Takten,
> sondern an verzerrten Signalen (Überschwinger, Klingeln...),
> und zwar abhängig von der Position des Messpunktes.

Dass daraus keine 2 sauber getrennten Taktimpulse werden ist klar. Und 
solange diese Effekte die Erkennung der Taktflanke nicht beeinträchtigen 
sind die ja erst einmal kein Problem. Wenn aber die Verzerrung so übel 
wird, dass die Flankenerkennung beim Empfänger auf eine Flanke zweimal 
anspricht (beispielsweise weil das Signal auf halben Anstieg kurz Pause 
macht), oder ähnlichen Mist baut, dann schon.

von Falk B. (falk)


Lesenswert?

@Tobi G. (Gast)

>Thevenin-Terminierung sinnvoll? Und genau hier kommt mein Problem. Ich

Ja.

>Z = R1 || R2

>Aber wie lege ich die beiden Widerstände aus. Muss es R1 = R2 = 2*Z
>sein?

Ja.

> Oder kann ich das Verhältnis wählen wie ich lustig bin hauptsache
>die oben genannte Bedingung ist erfüllt?

Nicht wirklich.

>Hierbei kommen wir zur nächsten Problematik. Mein Controller kann max
>8mA über einen Port liefern, was ja bedeutet, dass ich ihn nicht mit
>einem Widerstand kleiner 450 Ohm belasten sollte. Das würde ja bedeutet,
>dass mein R2 auf diesen Wert schon festgelegt ist. Das zugehörige R1
>wären ca. 90 Ohm (bei Z = 75 Ohm).

Dann nimm AC-Terminierung. Ist hier besser.

>Liege ich mit meinen Berechnungen richtig

Ja.

> oder habe ich etwas übersehen?

Nein.

>Mein letztes Problem ist die MISO Leitung. Wie schließe ich eine
>viele-zu-eins Kommunikation ab? Und wo sollte dieser Abschluss auf dem
>Layout platziert werden.

Kritsch ist eigentlich nur die SCK und ggf. die CS Leitungen. MISO und 
MOSI werden abgetastet, da kann man mit ein paar Reflexionen für ein 
paar Nanosekunden leben.

@ Lothar Miller (lkmiller)

>Sorg doch einfach dafür, dass du keine "elektrisch lange" Leitung hast,

Leichter gesagt als getan.

>indem du die Anstiegszeit mit einem Serienwiderstand an den schnellen
>Ausgangspins reduzierst.

Das verlängert NICHT die Anstiegszeit, es macht eine Fehlanpassung. 
Sieht auf dem Scope ähnlich aus, ist aber was anderes.

@ Andreas Kaiser (a-k)

>Sind die SPI-Slaves genauso fix auf der Flanke wie der Controller? Wenn
>nicht, stellt sich das Problem nicht.

Irrtum! Die Ics sind meist EINIGES schneller als die 
Datenblattspezifikation. D.H. ein SPI-Slave, der nur 10 MHz offiziell 
verkraftet reagiert durchaus auch auf einen 20ns breiten Taktpuls.

>hinbekomme. Wenn ich das richtig verstanden habe kann ich sogar einen
>sehr viel zu großen Widerstand benützen (z.B. 100 Ohm) und alles was
>passiert ist, dass meine Flanke langsamer wird.

Jain.

> Oder handle ich mir da andere Probleme ein?

Jain. ;-)


@ Andreas Kaiser (a-k)

>Flanke durch R/C entsprechend gebremst, dann passiert das nicht. Da kann
>also auch ein kleiner C helfen.

AUA! Cs an Taktleitungen, wir wollen das junge Talent doch nicht gleich 
mit solchen bösen Murkslösungen verderben.
Ein saubere Lösung wäre, einen LANGSAMEN Treiber direkt hinter den SCK 
Ausgang zu setzen, z.B. einen 74HC04. Das invertieren kann amn dur Wahl 
des entsprechenden SPI-Modus kompensieren.


@ lkmiller (Gast)

>betreffenden Treibers. Ich reduziere damit die Flankensteilheit
>des Signals

Jain.

> und erzeuge mir so eine "elektrisch lange" Leitung
>gemäß der Definition.

Nein, es ist ein Fehlanpassung, hier Überterminierung (R_A>Z).

MFG
Falk

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


Lesenswert?

@ Falk
>>indem du die Anstiegszeit mit einem Serienwiderstand an den schnellen
>>Ausgangspins reduzierst.

>Das verlängert NICHT die Anstiegszeit, es macht eine Fehlanpassung.
>Sieht auf dem Scope ähnlich aus, ist aber was anderes.

Aber wie würde es denn aussehen, wenn der Widerstand jetzt nicht von mir 
eingelötet, sondern vom Chip-Hersteller als Kanalwiderstand in den 
Ausgangs-FETs mit eingebaut wäre?

Im Datenblatt des ICs sehe ich bei größeren Kanalwiderständen, bezogen 
auf irgendeine vom Hersteller definierte und dokumentierte Referenzlast, 
eine größere Anstiegs+Abfallzeit. Wenn ich mit dieser reduzierten 
Flankensteilheit jetzt eine "elektrisch lange" Leitung anfahre, wäre ich 
ja wieder fein raus, oder habe ich dann automatisch eine Fehlanpassung?


Interpretiere ich die Kernaussage
zum Thema Terminierung und Anpassung richtig:

Jede Leitung muss terminiert werden

Aber wenn es im speziellen Fall keine Probleme macht,
kann die Terminierung weggelassen werden ;-)

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.