hallo allerseits, ich bin gerade dabei ein SPI bus design für ein Projekt zu machen. Folgende Eckdaten: SPI Geschwindigkeit: 8MHz SPI Slaves: 8 Stück SPI Topologie: Stern/Bus gemischt Wie im Schaltplan zu sehen will ich einen 74LVC07 http://www.nxp.com/documents/data_sheet/74LVC07A.pdf als buffer Baustein verwenden. Grund dafür ist, weil ich nicht glaube, dass der uC 8 slaves treiben kann und weil Slave 1-4 zu 5-8 als Stern verbunden sind und SPI ja nicht wirklich für eine Stern Topologie ausgelegt ist. Die 100R Widerstände in Serie sind für die Strombegrenzung bzw. für das reduzieren der Anstiegszeit (Wert soll später mittels Oszi Messung angepasst werden). Die Pull-up Widerstände sind für den definierten Zustand am Ausgang wenn der Eingang high ist (wired-OR). CS wird über 4 GPIO Leitungen realisiert die später demuxt werden (ein DEMUX für Slave 1-4 und einer für 5-8) Meine Frage, kann die Schaltung so prinzipiell funktionieren oder habe ich einen groben Denkfehler? Bzw. glaub jemand das es auch funktionieren könnte wenn ich die SPI Leitungen direkt verbinde, also ohne buffer Baustein? Produktive Kritik erwünscht!
Ich denke, dass du dir eine ganze Menge sinnvoller Gedanken gemacht hast. Der Einsatz der 100R ist gut, die Aufsplittung in zwei getrennt gepufferte Zweige auch. Ob das zu viel ist oder ob es auch einfacher geht nicht, will ich jetzt nicht abschätzen. Kann aber sein. Unpassend bis falsch halte ich allerdings, dass du einen OC-Treiber verwendest und dann auch noch die Pullups hinter den 100 R einsetzt. Die Serienwiderstände an der Quelle dienen eigentlich nicht zur Reduktion der Flankensteilheit, sondern zur Absorption der vom Ende einer offenen Leitung zur Quelle zurück laufenden Reflektion und sollten daher der Leitungsimpedanz entsprechen. Sie verhindern so das Überschwingen auf der Leitung sowie Resonanzen, die mehr EMV-Störungen produzieren. Wenn mehrere Teilnehmer über die Leitung verteilt angeschlossen sind, bringt das allerdings weniger, aber bei dir scheinen sie ja am Ende der Leitung konzentriert zu sein. Nun wird aber bei dir das Low-Signal mit 100R || 300R getrieben, das High-Signal mit 300R. Damit wird die Impedanzanpassung ad Absurdum geführt. Darüber hinaus: Das Low-Signal kommt mit 3,3 V * 100R / 400R an, also ca. 0,8 V, das ist natürlich Quatsch. Mein Vorschlag: 4 einfache Buffer verwenden (LVC ist gut), keine Pullups. Die 4 MISOs direkt an den jeweils 4 Slaves zusammenschalten, mit nur einem Pullup (1k und mehr) pro Zweig versehen und dann über nur einen 100R zum µC. Dort über ein Und-Gatter (LVC1G08) die beiden Zweige zusammenfassen und in den MISO des µC gehen. Kurze Leitungen (Anstiegszeit >> Laufzeit), z. B. zwischen µC und Buffern, brauchen keine 100R! Grüße, Uwe
:
Bearbeitet durch User
Hallo, > Stefan N. schrieb: > Meine Frage, kann die Schaltung so prinzipiell funktionieren oder habe > ich einen groben Denkfehler? im Prinzip ja, aber die Schwachpunkte wurde ja schon genannt. Mit Pullup um 100kOhm wirst du die 8MHz sicher nicht schaffen. Die müßten sicher deutlich niederohmiger werde und gehören natürlich direkt an die OC-Ausgänge. > Bzw. glaub jemand das es auch funktionieren > könnte wenn ich die SPI Leitungen direkt verbinde, > also ohne buffer Baustein? Das hängt stark vom uC ab und von der Last am BUS. Normal sollte das aber keinProblem sein, wenn die Slaves nicht gerade eine große Last darstellen und die Leitungen nicht elendig lang sind. Es gibt uC mit sehr schwachen Ausgängen aber viele moderne uC haben eher sehr kräftige und robuste Ports. Ein Treiber hat aber auch noch den Vorteil, den uC vom BUS zu entkoppeln. Manche uC sind auch echte Sensibelchen und steben schon bei eher harmlosen Fehlern. Solche Standard-IC sind da auch eher robust. Gruß Öletronika
:
Bearbeitet durch User
U. M. schrieb: > Mit Pullup um 100kOhm Oh weh, dass hatte ich ja falsch gelesen! Ich meinte aus irgendeinem Grund, dass da 300 Ohm stehen würde... (ok, die Augen...)
hi, ich werde folgende Änderungen vornehmen: Pullup Widerstände auf 1k ändern und direkt am Ausgang positionieren. Serienwiderstand zwischen uc und Buffer weglassen. MISO Leitungen über einen eigenen Buffer auf 2 Leitungen und später auf eine zusammenfassen. Meine Fragen: Uwe B. schrieb: > Unpassend bis falsch halte ich allerdings, dass du einen OC-Treiber > verwendest Welcher IC würde sich besser dafür eignen bzw. warum nicht? Uwe B. schrieb: > Die > Serienwiderstände an der Quelle dienen eigentlich nicht zur Reduktion > der Flankensteilheit, sondern zur Absorption der vom Ende einer offenen > Leitung zur Quelle zurück laufenden Reflektion und sollten daher der > Leitungsimpedanz entsprechen. wird die Anstiegszeit aber schon im Vorfeld begrenzt treten Reflexionen bei so einer kurzen Strecke gar nicht erst auf oder habe ich den Artikel Wellenwiderstand falsch verstanden? Und die Leitung ist ja nicht wirklich offen weil jedem Output mehrere inputs gegenüberstehen. Uwe B. schrieb: > Dort über ein Und-Gatter (LVC1G08) die beiden Zweige > zusammenfassen und in den MISO des µC gehen. sollte das nicht eher ein Oder-Gatter sein? sonst würden ja nur daten ankommen wenn zwei Slaves von unterschiedlichen Zweigen und gleiche daten senden. Dass zwei Slaves gleichzeitig senden sollte ja generell nicht sein. U. M. schrieb: >> Bzw. glaub jemand das es auch funktionieren >> könnte wenn ich die SPI Leitungen direkt verbinde, >> also ohne buffer Baustein? > Das hängt stark vom uC ab und von der Last am BUS. > Normal sollte das aber keinProblem sein, wenn die Slaves nicht gerade > eine große Last darstellen und die Leitungen nicht elendig lang sind. vermutlich hast du recht, ich will nur auf Nummer sicher gehen Gruß, Stefan
brauchst du keine Chipselects? Was passiert wenn ein Slave Antworten will, ich denke das kommt bei deinem Aufbau nie vor, richtig?, dann musst du es aber auch nicht übertragen, und 8 MHz find ich ambitioniert, aber das ist subjektiv, vielleicht nimmst du ja einen Baustein der das kann, meine MSP430 sind im maximum mit 12,5MHz betreibbar, wobei dann logischerweise kein Rechtecksignal mehr ankommt sondern eher Dreieck, sowas vermute ich mit deinem CLK Signal dann auch, besonders weil ja 4 Slaves jeweils mit Leitungen und Eingangskapazitäten dein Signal verschlechtern, aber da kannst du ja einfach mit der Frequenz runtergehen bis es passt.
sdghb schrieb: > brauchst du keine Chipselects? Stefan N. schrieb: > CS wird über 4 GPIO Leitungen realisiert die später demuxt werden (ein > DEMUX für Slave 1-4 und einer für 5-8) sdghb schrieb: > meine MSP430 sind im maximum mit 12,5MHz betreibbar verwendet wird ein Cortex-M3 mit 86MHz sollte sich also ausgehen ;)
ok sorry, habs überflogen und nicht gesehen das mit den CS. Mit dem schnellen M3 kommt man trotzdem nicht gegen die Leitungs etc. Kapazitäten an, aber das wird sich in der Praxis dann zeigen. Was ich hatte, weiss aber nicht ob es an meinem zu komplizierten Aufbau lag, die SOMI-Leitungen haben sich gegenseitig in undefinierte oder nicht gewollte Zustände gezogen, die Gefahr sehe ich bei deinem Aufbau auch spontan und zwar vor dem 74L... Weil ja da die zwei Signale parallel liegen, aber vlt hast du das auch schon bedacht und man kann den einen SOMI auf HighZ legen während der andere was sendet, oder sowas.
Hi, sdghb schrieb: > Mit dem schnellen M3 kommt man trotzdem nicht gegen die Leitungs etc. > Kapazitäten an, aber das wird sich in der Praxis dann zeigen. Deshalb die Überlegung mit dem Buffer IC dazwischen, der sollte genügend Leistung haben um die Kapazitäten schnell zu laden. sdghb schrieb: > Was ich hatte, weiss aber nicht ob es an meinem zu komplizierten Aufbau > lag, die SOMI-Leitungen haben sich gegenseitig in undefinierte oder > nicht gewollte Zustände gezogen, die Gefahr sehe ich bei deinem Aufbau > auch spontan und zwar vor dem 74L... alle MISO pins der Slaves haben einen Tri-State Ausgang, also JA.
Hallo, > Stefan N. schrieb: > wird die Anstiegszeit aber schon im Vorfeld begrenzt treten Reflexionen > bei so einer kurzen Strecke gar nicht erst auf oder habe ich den Artikel > Wellenwiderstand falsch verstanden? Das stimmt schon, allerdings hast du keine Angaben zur Leitungslänge gemacht und wir wissen auch nicht, welcher Art die Slaves sind. Mit den Tiefpassen hinter dem Treiber begrenzt du die Anstiegszeiten, was natürlich etwas längere Leitungen zulässt, ohne dass man schon Impedanzanpassung benötigt. Als Faustregel rechnet man mit Wellenleiter-Effekten ab ca. Lambda/10. Bei 8MHz Takt brauchts du aber schon Grenzfrequenzen um 50MHz mit Wellenlängen um ca. 0,6...0,6m. Ab ca.50...60cm Leitungslänge wären dann schon Refexionen durch Fehlanpassung möglich. > Und die Leitung ist ja nicht > wirklich offen weil jedem Output mehrere inputs gegenüberstehen. Die Inputs sind auch in erster Linie kapazitive Lasten (Gatekapazitäten). Kapazitäten an den Leitungsenden wirken aber bei hohen Frequenzen wie ein Kurzschluss und können eben auch Reflexionen infolge der Fehlanpassung verursachen. Bei 8MHz und moderaten Längen bis ca. 50cm düfte es aber wenig Probleme geben, weil du noch gezielt Tiefpassverhalten einbaust. Beachte, dass bei Messungen mit Oszi die Signale auch deutlich verfälscht werden können. Bei Tastköpfen mit 1:1 kann die Kapazität bei ca. 100pF liegen, bei 10:1 immer noch bei ca. 10...15pF. Das ist unter Umständen viel mehr, als du an den BUS-Leitungen hast. Mit einer zusätzlichen Reihenkapazität an der Tastspitze um 1pF kannst du das stark abmildern. Natürlich stimmt dann die Spannung am Oszi nicht mehr, aber es geht ja primär um die Signalform. Gruß Öletronika
:
Bearbeitet durch User
Stefan N. schrieb: >> Mit dem schnellen M3 kommt man trotzdem nicht gegen die Leitungs etc. >> Kapazitäten an, aber das wird sich in der Praxis dann zeigen. > > Deshalb die Überlegung mit dem Buffer IC dazwischen, der sollte genügend > Leistung haben um die Kapazitäten schnell zu laden. Das ist nicht richtig. Leitungen haben nicht nur Kapazität, sondern auch Induktivität. So ergibt sich deren Impedanz. Man kann eine beliebig schnelle Flanke an eine Leitung anlegen, es fließt lediglich maximal der Strom, der der Impedanz entspricht. Die ist bei zweiseitigen, 1,5 mm-FR4-Leiterplatten mit 0,2 mm Leiterbahnbreite und einer gegenüberliegenden Massefläche ca. 150 Ohm. Das schafft jedes moderne IC. Bei 0,2 mm Abstand Leiterbahn/Massefläche (4 Lagen) sind es gut 70 Ohm. Du willst zwei dieser Leiterbahnen gleichzeitig treiben, da würde ich mich nicht mehr darauf verlassen, dass das der µC anständig macht. Könnte aber sein, das musst du heraus finden. Stefan N. schrieb: > wird die Anstiegszeit aber schon im Vorfeld begrenzt treten Reflexionen > bei so einer kurzen Strecke gar nicht erst auf oder habe ich den Artikel > Wellenwiderstand falsch verstanden? Teilweise. Richtig: Wenn die Anstiegszeit groß genug ist, treten (sichtbare!) Reflektionen gar nicht erst auf. Falsch: Mit einem Quellwiderstand wird die Anstiegszeit nicht begrenzt. Da widerspreche ich vielen anderen Antworten hier ausdrücklich. Er bildet mit der Leitungsimpedanz einen reellen 1:1 Spannungsteiler, und keinen RC-Tiefpass! Am Ende der (idealen) Leitung verdoppelt sich der anfänglich halbierte Spannungssprung und hat damit sein ursprüngliches dU/dt wieder. Das so reflektierte Signal kommt nach einer weiteren Laufzeit am Quellwiderstand an (dort ist ein Treppensignal sichtbar) und wird durch den Quellwiderstand abgeschlossen bzw. kein weiteres Mal reflektiert. > Und die Leitung ist ja nicht > wirklich offen weil jedem Output mehrere inputs gegenüberstehen. Richtig. Das verfälscht die idealen Verhältnisse. Aber nicht so viel, dass das Prinzip völlig ausgehebelt wird und der Sinn der Quellwiderstände ad Absurdum geführt wird. Das lässt sich alles recht gut simulieren. Stefan N. schrieb: > MISO Leitungen über einen eigenen Buffer auf 2 Leitungen und später auf > eine zusammenfassen. Wenn ich dich richtig verstehe, ist das nicht das, was ich meinte: Je 4 MISO Leitungen direkt an der Quelle bei den Slaves zusammenfassen, dort auch mit 100R und Pullup versehen und die 2 Leitungen später über ein Gatter auf eine zusammenfassen. Kein Buffer. Stefan N. schrieb: > sollte das nicht eher ein Oder-Gatter sein? Da immer nur ein Slave selektiert ist, ist die andere Leitung wegen des Pullups high. Geht natürlich prinzipiell auch mit Pulldown und Oder-Gatter, macht man aber aus anderen Gründen nicht. Stefan N. schrieb: > Welcher IC würde sich besser dafür eignen bzw. warum nicht? Jedes genügend schnelle Logik-IC mit ausreichend leistungsfähigem (d. h., niederohmigen) Ausgang. Meines Wissens nach sind LVCs gut geeignet. HCs/HCTs sind schwächer, wenn ich mich nicht täusche. Ob es spezielle Treiber-ICs bei LVC gibt, wie es sie - glaube ich wieder - bei HC/HCT gibt, weiß ich nicht. Grüße, Uwe
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.