Überlegungen zum SPI-Busabschluss


22

Also habe ich in meiner vorherigen Frage gefragt, ob ich den SPI-Bus für die Kommunikation von Board zu Board über eine kurze Distanz verwenden soll. Es wurde mir empfohlen, Abschlusswiderstände zu testen. Ich platzierte einen Widerstand in der Nähe des Ziels (aber nicht genau dort, es gab einen Abstand von 1 cm) und erdete ihn [da es sich um eine Platine ohne Abschlusswiderstand handelte, musste ich improvisieren. Ich konnte den Widerstand nicht an das Gerät anlöten, da es ein TQFP ist und empfindliche Stifte hat.]

Bei einigen grundlegenden Tests stellte ich fest, dass ein 1K-Widerstand das Überschwingen kaum reduzierte. 470 Ohm und 180 Ohm funktionierten besser. Je tiefer ich ging, desto besser funktionierte es. Mit 180 Ohm war das Überschwingen ungefähr ein Volt oder etwas niedriger. Jetzt kann ich leider nicht mehr viel nach unten gehen, weil der Strom mehr ist, als meine MCU verarbeiten kann. Ich habe das Problem in der aktuellen Version der Platine behoben, indem ich einen 330-Ohm-Widerstand in Reihe verwendet habe. Dies brachte das Überschwingen auf 3,7 V und die Anstiegszeit betrug 10 oder 11 ns. Aber ich hätte wirklich gerne eine "richtige" Lösung für die nächste Revision. Mein Frequenzbedarf bleibt gleich: 2 MHz, würde aber 4 MHz vorziehen.

Ich hatte also das Gefühl, ich sollte hier fragen: Soll ich bei der nächsten Überarbeitung des Boards bullige Puffer in die Zeilen setzen? Das Auffinden eines Puffers ist eigentlich kein Problem, aber die Stromaufnahme wird erheblich zunehmen. Ich habe 8 Geräte am SPI, die eine Terminierung benötigen, und 3 Leitungen, die immer aktiv sind, gehen zu jedem. Ein Beispiel, SCK geht an alle 8 Geräte. Jedes Gerät verfügt beispielsweise über einen 100-Ohm-Abschlusswiderstand. Das ist also eine Stromaufnahme von 12 * 3,3 / 100 = 390 mA!

Also, was ist der beste Rückgriff hier? Sollte ich mich für eine aktive Terminierung entscheiden, indem ich Schottky-Dioden als Klemmen verwende?

EDIT: In Bezug auf die Leitungsimpedanz: Wie ich bereits erwähnt habe, ist die Absicht, 4 externe Platinen anzuschließen. Der Abstand von Pad zu Pad ist für alle gleich (12 Zoll). Es gibt jedoch auch Geräte auf derselben Platine wie die MCU - diese müssen jedoch nicht terminiert werden - die Längen betragen etwa 1 Zoll (oder weniger) und es gibt nur ein sehr geringes Überschwingen (300 oder mV). Die Spuren, die auf externe Bretter gehen, sind ungefähr gleich lang und breit. Die 2. Schicht auf meinem Board ist eine ununterbrochene Grundebene.


Eine übliche Methode besteht darin, einen Reihenwiderstand zu platzieren, der der Leitungsimpedanz entspricht. Versuchen Sie etwas wie eine serielle Terminierung von 50 Ohm. Es wäre hilfreich, wenn Sie Ihre Leiterbahnen und Anschlüsse so auslegen würden, dass sie eine feste Impedanz haben. Versuchen Sie es mit niedrigeren seriellen Anschlüssen und sehen Sie, was Sie finden. Er schlug eine Erdung mit 32 Ohm vor. Sie können diese viel geringere Leistung, also 3 dB weniger Leistung, tatsächlich erreichen, indem Sie 64 Ohm an die Stromschiene und 64 Ohm an die Bodenschiene anschließen.
Kortuk

@Kortuk Ein 32 Ohm Widerstand hat das Überschwingen leider nicht wesentlich verringert. Der Footprint befand sich jedoch auch an der falschen Stelle (er sollte niemals als Terminator dienen) und nicht an der Quelle, so dass ich mir nicht sicher bin, ob das der Fall ist. In Bezug auf die Leitungsimpedanz haben alle Leitungen ungefähr die gleiche Länge und Breite. Sie alle laufen über eine komplette Ebene, die sich auf der 2. Ebene befindet.
Saad

1
Serienabschluss ist an der Quelle, wenn Sie es an der Last platzieren, tut es nichts. Versuchen Sie, einen 50 Ohm direkt an Ihrer Quelle in Reihe zu schalten, um den Effekt zu erkennen.
Kortuk

Sie können es sich wie folgt vorstellen: Die gesamte Leitung fungiert als Kondensator, und dieser Widerstand fungiert als R für einen Tiefpass, wenn Sie es sich als konzentriertes Modell vorstellen. Wenn Sie sich das Übertragungsleitungsmodell ansehen, bedeutet ein angepasster Widerstand dort, dass Sie die Hälfte der Amplitudenwellenbewegung haben und dann, wenn er auf das andere Ende trifft und es reflektiert, auf den vollen Wert stößt.
Kortuk

Antworten:


32

Das Sprechen über die Signalbeendigung ist wie das Öffnen einer Dose Würmer. Dies ist ein RIESIGES Thema, das sich nur schwer in ein paar hundert Worten zusammenfassen lässt. Deshalb werde ich nicht. Ich werde eine Menge Dinge aus dieser Antwort herauslassen. Aber ich werde Ihnen auch eine große Warnung geben: Es gibt viele Fehlinformationen über das Abschließen von Widerständen im Netz. Tatsächlich würde ich sagen, dass das meiste, was im Internet zu finden ist, falsch oder irreführend ist. Eines Tages schreibe ich etwas Großes auf und poste es in meinem Blog, aber nicht heute.

Als Erstes ist zu beachten, dass der Widerstandswert, der für Ihre Terminierung verwendet werden soll, mit Ihrer Trace-Impedanz in Beziehung stehen muss. In den meisten Fällen entspricht der Widerstandswert der Trace-Impedanz. Wenn Sie die Impedanz der Messkurve nicht kennen, sollten Sie sie ermitteln. Es gibt viele Online-Impedanzrechner . Eine Google-Suche bringt Dutzende mehr.

Die meisten Leiterplatten-Leiterbahnen haben eine Impedanz von 40 bis 120 Ohm. Deshalb haben Sie festgestellt, dass ein 1k-Abschlusswiderstand fast nichts bewirkt und ein 100-Ohm-Widerstand viel besser ist.

Es gibt viele Arten der Terminierung, aber wir können sie grob in zwei Kategorien einteilen: Quell- und Endterminierung. Die Ursprungsbeendigung liegt beim Fahrer, die Endbeendigung liegt am fernen Ende. Innerhalb jeder Kategorie gibt es viele Arten der Kündigung. Jeder Typ ist am besten für verschiedene Zwecke geeignet, wobei kein Typ für alles gut ist.

Ihre Terminierung, ein einzelner Widerstand gegen Masse am anderen Ende, ist eigentlich nicht sehr gut. Tatsächlich ist es falsch. Die Leute machen es, aber es ist nicht ideal. Im Idealfall wird dieser Widerstand auf die Hälfte Ihrer Stromschiene auf eine andere Stromschiene gelegt. Wenn also die E / A-Spannung 3,3 V beträgt, geht dieser Widerstand nicht an GND, sondern an eine andere Stromschiene mit einer halben Spannung von 3,3 V (auch bekannt als 1,65 V). Der Spannungsregler für diese Schiene muss speziell sein, da er Strom liefern UND ableiten muss, während die meisten Regler nur Strom liefern. Regulierungsbehörden, die für diese Verwendung arbeiten, erwähnen auf der ersten Seite des Datenblattes etwas zur Kündigung.

Das große Problem bei den meisten Endanschlüssen ist, dass sie viel Strom verbrauchen. Es gibt einen Grund dafür, aber ich werde nicht darauf eingehen. Für die Verwendung mit niedrigem Strom müssen wir uns die Terminierung der Quelle ansehen. Die einfachste und gebräuchlichste Form der Source-Terminierung ist ein einfacher Vorwiderstand am Ausgang des Treibers. Der Wert dieses Widerstands ist derselbe wie die Leiterbahnimpedanz.

Die Quellterminierung funktioniert anders als die Endterminierung, der Nettoeffekt ist jedoch der gleiche. Es regelt die Signalreflexionen und verhindert sie nicht. Aus diesem Grund funktioniert es nur, wenn ein Treiberausgang eine einzelne Last speist. Wenn es mehrere Lasten gibt, sollte etwas anderes getan werden (wie die Verwendung von Abschlusswiderständen oder Abschlusswiderständen mit mehreren Quellen). Der große Vorteil der Quellterminierung besteht darin, dass der Treiber nicht wie bei der Endterminierung geladen wird.

Ich habe bereits gesagt, dass sich Ihr Vorwiderstand für den Source-Abschluss am Treiber befinden muss und denselben Wert wie Ihre Trace-Impedanz haben muss. Das war eine Vereinfachung. Es gibt ein wichtiges Detail darüber zu wissen. Die meisten Treiber haben einen gewissen Widerstand am Ausgang. Dieser Widerstand liegt normalerweise im Bereich von 10-30 Ohm. Die Summe aus dem Ausgangswiderstand und Ihrem Widerstand muss Ihrer Leiterbahnimpedanz entsprechen. Nehmen wir an, Ihre Messkurve hat 50 Ohm und Ihr Treiber 20 Ohm. In diesem Fall wäre Ihr Widerstand 30 Ohm, da 30 + 20 = 50. Wenn auf den Datenblättern nicht angegeben ist, wie hoch die Ausgangsimpedanz / der Ausgangswiderstand des Treibers ist, können Sie davon ausgehen, dass sie 20 Ohm beträgt. Sehen Sie sich dann die Signale auf der Platine an und prüfen Sie, ob sie angepasst werden müssen.

Eine andere wichtige Sache: Wenn Sie diese Signale auf einem O-Scope betrachten, MÜSSEN Sie am Empfänger prüfen. Wenn Sie an einem anderen Ort suchen, erhalten Sie wahrscheinlich eine verzerrte Wellenform, und Sie werden zu der Annahme verleitet, dass die Dinge schlimmer sind als sie wirklich sind. Stellen Sie außerdem sicher, dass Ihr Masseclip so kurz wie möglich ist.

Fazit: Schalten Sie mit einem Widerstand von 33 bis 50 Ohm auf Source-Terminierung um und Sie sollten in Ordnung sein. Es gelten die üblichen Einschränkungen.


David, vielen Dank für eine ausführliche Antwort. All dies ergab einen Sinn, aber ich glaube, mein System enthält noch eine weitere Komplikation: Die SPI-Leitungen gehen von einer Karte zur anderen. Das Abschätzen der Leitungsimpedanz kann daher schwierig sein. Das Signal wird auf der Hauptplatine etwa 3 Zoll lang übertragen, durchläuft ein 6-Zoll-Flachbandkabel und wandert dann erneut auf einer 3-Zoll-Spur, bis es das Ziel erreicht. Die Drähte des Flachbandkabels wechseln sich ab Boden (wie SCK, GND, MOSI, GND usw.). Steht Ihre 30-20 Ohm Empfehlung noch?
Saad

@ Saad Was ich in solchen Fällen getan habe (und das habe ich oft getan), ist, einen einzelnen Widerstand am Treiber zu verwenden und dessen Wert zu optimieren, sobald der Prototyp gebaut ist. Es ist ein Kompromiss, aber es funktioniert. Momentan habe ich mehrere Systeme, die SPI über 1 Fuß lange Kabel mit 3 bis 6 Zoll Leiterbahnen auf jeder Leiterplatte betreiben. Einige davon laufen mit 30 MHz! Ja, beginnen Sie mit 33 oder 47 Ohm und optimieren Sie von dort aus.

3
+1 bereits, aber ein Diagramm, das zeigt, wie ein Source-Abschluss (dh in Reihe, nicht von der Leitung zur Masse) angeschlossen wird, wäre sehr hilfreich.
Das Photon

16

Da Sie kurze Strecken fahren, halte ich Abschlusswiderstände nicht für eine gute Idee. Wie Sie herausgefunden haben, müssen sie ziemlich niedrig sein, um die Arbeit zu erledigen, und dann zieht die Leitung viel Strom und die Spannung wird um 2 gedämpft, wenn Sie die Leitung auch mit der gleichen Impedanz betreiben.

Ihre Taktrate ist nicht allzu hoch, sodass die Frequenzen, die Sie benötigen, um selbst eine 4-MHz-Bitrate zu unterstützen, nicht die sind, die die Probleme verursachen. Das Problem ist, dass Sie schnelle Flanken haben, die die Leitungen treiben, die Oberwellen im Bereich von 100 MHz haben, die die Probleme verursachen. Bei Ihren gewünschten Frequenzen haben Sie ein konzentriertes System, keine Übertragungsleitung. Das erleichtert die Sache erheblich.

Die Lösung besteht daher darin, die hohen Frequenzen zu dämpfen, die Sie nicht wirklich benötigen, aber die Probleme verursachen. Dies kann mit einem einfachen RC-Tiefpassfilter unmittelbar nach allem geschehen, was eine Leitung ansteuert. Dies ist zum Teil das, was die 330 Ω-Widerstände jetzt tun. Sie bilden mit der parasitären Kapazität der Leitung ein Tiefpassfilter. Anscheinend ist das nicht ganz genug und / oder nicht vorhersehbar genug. Dies kann mit einer absichtlichen Kapazität auf jeder Leitung behoben werden.

Sie möchten den Bus mit 4 MHz betreiben. Dies bedeutet, dass das schnellste zu unterstützende Signal eine 4-MHz-Rechteckwelle ist. Das heißt, die Länge jedes Levels beträgt 125 ns. Nehmen wir an, wir möchten, dass dies mindestens 4 Zeitkonstanten sind, was eine Einschwingzeit von 98% impliziert. Das heißt, die maximale Zeitkonstante, die wir zulassen möchten, beträgt 31 ns. 31 ns / 330 Ω = 94 pF. Dies ist die Gesamtlast der 330-Ω-Widerstände, die Sie benötigen, um die 31-ns-Zeitkonstante zu erhalten. Es wird immer eine parasitäre Kapazität geben, die Sie nicht vorhersagen können, also würde ich sehen, wie es mit 47 pF aussieht. Dadurch bleibt Platz für 10-20 pF versteckte Kapazität, während die maximal zulässige Zeitkonstante nicht überschritten wird.

Die Vorwiderstände sollten so nah wie möglich an allen Pins sein, die den Bus ansteuern. Dies setzt voraus, dass alle anderen Pins auf dem Bus CMOS-Eingänge sind, wenn einer angesteuert wird. Bei Leitungen, die immer nur von einem einzigen Pin angesteuert werden (wie die Taktleitung, die nur vom Master angesteuert wird), stellen Sie die 47 pF nach dem Widerstand so nah wie möglich ein. Platzieren Sie den 47 pF für Leitungen, die zu verschiedenen Zeiten von verschiedenen Pins angesteuert werden können (wie MISO), in der Nähe der Mitte aller Treiber. Jede Leitung erhält unabhängig von der Anzahl der Treiber nur einen Kondensator mit 47 pF, aber für jeden Treiber gibt es einen Widerstand.

Die obigen Berechnungen sind als erste Hilfe gedacht. Einige Parameter können nicht bekannt sein und sind daher im Voraus zu berücksichtigen. Beginnen Sie mit 330 Ω in Reihe und 47 pF gegen Masse, aber haben Sie keine Angst, Änderungen aufgrund der tatsächlich beobachteten Ergebnisse vorzunehmen.


2

Wenn kein Abschluss vorliegt und ein Signal von einer Quelle mit sehr niedriger Impedanz an einen Empfänger mit sehr hoher Impedanz gesendet wird, springt das Signal wiederholt vor und zurück. Die Phase des Signals wird bei jedem Umlauf um 180 Grad gedreht.

Wenn die Signale beim Erreichen des Ziels nicht reflektiert werden sollen, kann die Endterminierung verwendet werden. Dies führt dazu, dass das Signal am Zielort sauber absorbiert wird, ohne reflektiert zu werden. Bei vielen gängigen Implementierungen wird die Quelle jedoch mit einer signifikanten Gleichstromlast konfrontiert.

In vielen Fällen kann man Ergebnisse erzielen, die genauso praktisch sind, wenn man stattdessen einen Vorwiderstand an der Signalquelle einfügt. Befindet sich am anderen Ende der Leitung kein Empfänger, wird das Signal reflektiert, wenn es ankommt. Eine solche Reflexion wird jedoch von der Quelle absorbiert und nicht erneut reflektiert. Beachten Sie auch, dass der Quellenabschluss keine Gleichstrombelastung für das Gerät darstellt, das die Leitung ansteuert.

Wenn keine Terminierung vorliegt und eine Leitung mit einer niedrigen Impedanz betrieben und mit einer hohen Impedanz empfangen wird, kann die Empfangsvorrichtung eine Spannung sehen, die höher als die Ansteuerspannung ist (theoretisch bis zu der doppelten Spannung, wenn die Quellenansteuerimpedanz beträgt) Null und die Empfangsimpedanz ist unendlich). Wenn entweder die Quelle oder der Empfänger ordnungsgemäß terminiert sind, entspricht die empfangene Spannung nahezu der Ansteuerspannung (wenn eine Nullimpedanzquelle einen Empfänger mit ordnungsgemäßer Impedanz ansteuerte oder eine Quelle mit ordnungsgemäßer Impedanz einen Empfänger mit unendlicher Impedanz ansteuerte). empfangene Spannung entspricht der Antriebsspannung). Wenn beide ordnungsgemäß abgeschlossen sind, ist die Empfangsspannung halb so hoch wie die Antriebsspannung.

Die Simulation hier zeigt dies. Es enthält einen Impulsgenerator, der eine Kette von Impulsen ungefähr 49-mal pro Sekunde erzeugt, zwei 5-ms-Verzögerungsleitungen in Reihe (Umlaufzeit 1/50 Sekunde) und schaltbare Abschlusswiderstände an beiden Enden.

Die Schaltung enthält drei SPDT-Schalter; Klicken Sie auf eines, um den Status zu ändern. Die beiden unteren Schalter steuern den Quell- und Zielabschluss. Für diese steht "up" für eine gute Beendigung und "down" für eine schlechte. Der obere Schalter steuert, ob die Leitung von einem automatischen Impulsgenerator oder von einem manuellen Logikeingang angesteuert werden soll. Um manuell Impulse über die Leitung zu senden, stellen Sie den oberen Schalter auf "down" und takten Sie dann das "L" daneben.

Die Signale, die das Ziel erreichen, sind sauber, wenn entweder die Quelle oder das Ziel ordnungsgemäß terminiert sind. Wenn beide ordnungsgemäß terminiert sind, entspricht die empfangene Signalspannung der Hälfte der Ansteuerspannung. Wenn einer ordnungsgemäß terminiert ist, der andere jedoch nicht, beträgt die empfangene Spannung etwa 91% der Ansteuerspannung (die "schlechten" Widerstände sind um den Faktor 10 "falsch" und absorbieren daher nicht etwa (10/11). der Energie). Wenn keine der beiden abgeschlossen ist, ist die empfangene Spannung zunächst ungefähr 1,656-mal so groß wie die Antriebsspannung, es treten jedoch alle 20 ms seltsame Reflexionen auf.


1

Versuchen Sie einen Wechselstromabschluss (z. B. einen 470 pF-Kondensator in Reihe mit einem 110 Ohm-Widerstand) und verbinden Sie diese Reihenkombination vom Ausgang des SPI-Clock-Ziels mit Masse. Der Abschluss verbraucht für die Dauer der Kantenzeit ungefähr 30 mA, was mit Leichtigkeit möglich ist, andernfalls jedoch keinen Strom. Für die bidirektionale Datenleitung wird es etwas kniffliger. Ich habe einen 470 pF, 220 Ohm Wechselstromabschluss sowohl am Master- als auch am Slave-Ende der SPI-Datenleitung angebracht, und das funktioniert, dh akzeptables Überschwingen und Unterschwingen.

Ich begrüße Kommentare dazu.


0

Nicht zu tief ins Detail gehen, da die vorherigen Beiträge den Nagel auf den Kopf treffen. Es kommt darauf an, dass SPI unsymmetrische Leitungen sind. Selbst wenn Sie eine niedrige Taktfrequenz haben, müssen die schnellen ns Taktflanken beachtet werden. In meinem Fall wurde ein 470-Ohm-Widerstand in Reihe mit der SPI-CLK-Leitung auf der Masterseite gefunden. Durch Entfernen dieses Widerstands und Implementieren der empfohlenen Lösung für unsymmetrische Leitungen von Lattice und der oben aufgeführten Vorschläge (ich konnte nur die Hälfte der Lösung von der Slave-Seite implementieren und die Filterkappen entsprechend anpassen) konnte ich die Länge meines SPI-Flachbandkommunikationskabels von verlängern 10cm bis 160cm ohne Kommunikationsfehler:

Verbesserung der Störfestigkeit für die serielle Schnittstelle : Ein Whitepaper zu Lattice Semiconductor (Juli 2014)

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.