Weiß jemand, wie schnell man den SPI-CLK samplen sollte, damit man auch sicher die Flanken erkennen kann? Grund: Bei 3,125fachem Sampletakt hatte ich Probleme (<0,5% 16Bit-Wörter gingen verloren), bei 4,6875fachem Takt funktioniers zu 100%. Das würde irgendwie auf 4fach deuten ... Gibts irgendwelche Quellen, die das belegen können? Grüße Gast
> wie schnell man den SPI-CLK samplen sollte, Wenn du einen SPI-Slave bauen willst: Gar nicht. Dann nimmt man den SPI-CLK als Takt (wie sein Name schon nahelegt) zum Eintakten in das Schieberegister. Mit dem synchronisierten SS# werden die Daten dann in den Slave übernommen. > Bei 3,125fachem Sampletakt hatte ich Probleme > (<0,5% 16Bit-Wörter gingen verloren) Ganz verloren??? Ich vermute eher, dass du falsche Daten übernommen hast. Und das könnte daran liegen, dass du natürlich auch den MOSI durch genausoviele FFs durchtakten mußt, wie das CLK-signal, sonst übernimmst du logischerweise den falschen Pegel am Dateneingang. EDIT wieder gefunden: Beitrag "Re: SPI im CPLD mit State Machine - geht das so?"
Hmm ... mit dem synchronisierten SS die Daten übernehmen ... Ich hatte es schonmal mit dem Eintakten versucht, hatte aber damit ziemliche Probleme, weil ich so eine schräge Statemaschine gebastelt hatte, der dann plötzlich der Takt gefehlt hat, am Ende der Übertragung. Soweit ich weiß raten trotzdem die meisten dazu den SCK zu samplen ... Naja, ein guter SPI-Slave verwirft halb-übertragene Wörter, wenn eine Flanke nicht erkannt wird. Soll ja irgendwie robust sein :-) Mein Slave zählt mit und übernimmt die Daten bei der letzten Flanke. Danke für deinen Tipp ... Dein Vorschlag würde die Probleme mit der Übertragungsgeschwindigkeit eliminieren. Grüße Gast
Hä? SPI sind gekoppelte Schieberegister, was einfacheres gibts doch gar nicht. Einfach ein Schieberegister bauen, was bei aktivem Chipselect und entsprechender Flanke des SCLK die Daten übernimmt. Der Master kümmert sich ja darum, dass die Daten entsprechend anliegen. Wenn das ChipSelct deaktiviert wird, übernimmst du die Daten in ein "Schattenregister" und kannst sie dann weiter verarbeiten. Wenige Zeilen in VHDL, im Schematic noch viel einfacher.
es ist nicht immer so einfach, 3 beispiele: 1) 2 FPGA SPI-SPI 4MHz spi rate, leitunglange <10cm auf dem PCB storungsfreie ubertragung NUR mit SCK filterung moglich sonst clock glitches 2) ATmega SPI 4mhz rate -> Actel FPGA, 32 bit SPI shift register wenn FPGA uber 95% voll, 100% error!!! na das war Actel tools die mist gebaut haben da hat der shiebe register systematischen fehler gehabt obwohl das clock perfect war 3) 4mhz ins FPGA rein, SPI clk mit 50mhz systemclock gesampelt bit error rate 1:10M ohne sampling ohne error === wenn es mit direkt clocking geht, dann gluck gehabt! Antti
@ Antti Lukats (Gast) >wenn es mit direkt clocking geht, dann gluck gehabt! Das ist Unsinn! 99% aller ICs arbeiten mit DIREKTER Taktung der SPI Logik, es wird KEINE Überabtastung gemacht. Und die funktionieren alles ziemlich gut. Dass man besonder bei heutigen, sauschnellen FPGAs bisweilen Probleme hat, weil der Takt unsauber ist und die FPGAs dann doppelt takten ist ein anderes Problem. Mit sauberem Takt (Layout!) geht es auch problemlos. Schliesslich muss man auch alle anderen Takte sauber ins FPGA bringen. MFG Falk
ist nicht so unsinn ;) die meisten MCU's die SPI slave hardware haben, die haben auch begrenzungen a SPI clock <> system clock da es gesampelt wird und moglicherweise gefiltert, bei Silabs muss der SPI clock zum beispiel 12 fach kleiner als system clock sein. klar sollten alle clocks sauber sein, sind es aber nicht immer. Die platine wo das FPGA SPI-SPI clock ohne filtrierung nicht ging war nicht meins, ich musste es aber zum laufen bringen ohne den layout zu andern. die SAU alten SPI chips die sehen eine >200mhz clk spike einfach nicht und da gehen sie ja auch lustig mit direkt clock aber aufpassen muss es auf jeden fall, nicht nur platine layout aber auch slew rate limit, etc Antti
@ Gast > Naja, ein guter SPI-Slave verwirft halb-übertragene Wörter, Nein, halbe Übertragungen kommen bei SPI gar nicht vor. Eine Übertragung beginnt mit SS#=0 und endet mit SS=1. Schau dir mal die Doku von Motorola an. Es gibt durchaus auch Slaves, bei denen z.B. nur die Hälfte eines Datenwortes übertragen wird, wenn nur die entsprechenden Bits interessant sind. @ Antti > 1) 2 FPGA SPI-SPI 4MHz spi rate, leitunglange <10cm auf dem PCB > storungsfreie ubertragung NUR mit SCK filterung moglich > sonst clock glitches Das ist aber m.E. ein Layout/Design-Problem. Meine SPI-Slaves laufen auch mit 10MHz und 20cm Leitungslänge über OK ohne CRC-Error. Ja, die Fehlerprüfung ist ins Protokoll eingebaut, aber hat in zig-Milliarden Übertragungen (>>1000 Slaves mit Übertragung alle 2ms) nicht ein einziges Mal zugeschlagen. > begrenzungen a SPI clock <> system clock Richtig: f(sclk) = f(system)/2 Das heißt aber, unser Gast hat ein anderes Problem, bei dem ist nämlich schon Schluss >> Bei 3,125fachem Sampletakt ...
In der Regel sind das wirklich reine Layout Probleme. Wenn man denn chancen hat im Layout, dann sollte man zumindest die Clock-Leitungen terminieren. Bei kurzen Leitungslängen (so ca. bis 30cm) reicht oft schon ein Serienwidrstand von ca. 100 Ohm am Eingang. Mit der Eingangskapazität zusammen bildet der dann die Terminierung. Reflektion und Überschwingen sollte dann behoben sein. Im übrigen: Auch bei 50 MHz sollte es keine Probleme mit dem Clock geben. Reflektionen und Überschwinger die zu Problemen auf dem Takt führen hängen nicht von der Taktrate sondern von der Flankensteilheit und der Terminierung ab.
@ Matthias G. (mgottke) >terminieren. Bei kurzen Leitungslängen (so ca. bis 30cm) reicht oft >schon ein Serienwidrstand von ca. 100 Ohm am Eingang. Eher am Ausgang, siehe Wellenwiderstand. > Mit der >Eingangskapazität zusammen bildet der dann die Terminierung. Na hoffentlich nicht so . .. >führen hängen nicht von der Taktrate sondern von der Flankensteilheit >und der Terminierung ab. Wohl wahr MfG Falk
Hallo Falk, >>terminieren. Bei kurzen Leitungslängen (so ca. bis 30cm) reicht oft >>schon ein Serienwidrstand von ca. 100 Ohm am Eingang. > Eher am Ausgang, siehe Wellenwiderstand. Das ist prinzipiell richtig, aber meist sind die Ausganstreiber, zumindest bei SPI, nicht so "kräftig", dass dort noch die Quellimpedanz angepasst werden müsste. Idealerweise müsste man ja eine Quellimpedanz exakt dem Wellenwiderstand haben. Die Terminierung sollte ebenfalls exakt dem Wellenwiderstand sein. >> Mit der >>Eingangskapazität zusammen bildet der dann die Terminierung. > > Na hoffentlich nicht so . .. Leider ist das aber so möglich. Eine Terminierung kann immer über eine RC Riihenschaltung gegen ein ruhendes Bezugspotenzial erfolgen. Die Eingangskapazität stellt so eine dar. Allerdings ist die benötigte Kapazität von der Leitungslänge abhängig. Daher funktioniert die Nutzung der Eingangskapazität nur in Kombination mit dem Widerstand am Eingang nur bei kurzen Verbindungen. Würde man z.B. einen 100 Ohm Widerstand gegen GND-Potential legen, würde er das Signal vom Pegel zu sehr belasten. Vor allem wenn der Ausgansgtreiber sehr "schwach", also hochohmig ist. Alternativ kann man ja auch je 200 Ohm gegen VCC und GND schalten. Dynamisch gesehen ist das ja eine Parallelschaltung und ergibt als Terminierungswiderstand wieder 100 Ohm. Die Last für den Treiber ist dafür aber geringer. Die 100 Ohm Serienwiderstand im Zusammenhang mit der Eingangskapazität bilden aber zusätzlich noch einen Tiefpass gegen Übersprechen anderer Leitungen. Das ist aber wiederum eine Layoutfrage und kann vermieden werden.
@ Matthias G. (mgottke) >Das ist prinzipiell richtig, aber meist sind die Ausganstreiber, >zumindest bei SPI, nicht so "kräftig", dass dort noch die Quellimpedanz >angepasst werden müsste. ??? Wozu dann terminieren? >Idealerweise müsste man ja eine Quellimpedanz exakt dem Wellenwiderstand >haben. Die Terminierung sollte ebenfalls exakt dem Wellenwiderstand >sein. WELCHE Terminierung? Serienterminierung am Ausgang oder Parallelterminierung am Eingang? Nach deiner Aussage ist der erste Fall unnötig, was ich jedoch bezeifle. Und Parallelterminierung bei CMOS . . . >Leider ist das aber so möglich. Eine Terminierung kann immer über eine >RC Riihenschaltung gegen ein ruhendes Bezugspotenzial erfolgen. Die >Eingangskapazität stellt so eine dar. Nö, du würdes dann ja einen RC-Filter vor den Takteingang setzen. Das ist was anderes als ne RC-Terminierung, siehe Artikel oben. > Allerdings ist die benötigte >Kapazität von der Leitungslänge abhängig. Quark. >nur bei kurzen Verbindungen. Würde man z.B. einen 100 Ohm Widerstand >gegen GND-Potential legen, würde er das Signal vom Pegel zu sehr >belasten. Was du nicht sagst . . . > Vor allem wenn der Ausgansgtreiber sehr "schwach", also >hochohmig ist. Alternativ kann man ja auch je 200 Ohm gegen VCC und GND >schalten. Dynamisch gesehen ist das ja eine Parallelschaltung und ergibt >als Terminierungswiderstand wieder 100 Ohm. Die Last für den Treiber ist >dafür aber geringer. Ist ja nett dass du mir erklären willst wie Parallelterminierung funktioniert, ist aber vollkommen überflüssg da zu spät. Rate mal wer den Artikel Wellenwiderstand geschrieben hat . . . >Die 100 Ohm Serienwiderstand im Zusammenhang mit der Eingangskapazität >bilden aber zusätzlich noch einen Tiefpass gegen Übersprechen Und damit ist es KEINE Terminierung!
Unter Terminierung meinte ich Empfangsseitig. Du hast aber recht, Terminierung ist beidseitig. Das habe ich aber nur anders ausgedrückt. RC hin oder her, jedenfalls ist ein Serienwiderstand in Reihe mit der Eingangskapazität eine Terminierung Eingangsseitig. Die Terminierung ist nämlich nicht direkt für den Eingang notwendig, sondern zur Vermeidung von Reflektion und daraus resultierend zur Vermeidung Schwingen auf der Leitung bei übertragenen Franken. Dass der Eingang dann Probleme mit dem "gezappele" auf der Leitung hat ist erst die Folge. Letztlich macht man eine Terminierung um die Folgen des "gezappels" zu vermeiden. Aber man bekämpft dazu die Ursache nicht die Wirkung! Die Praxis zeigt, dass das sehr wohl funktioniert. >> Allerdings ist die benötigte >>Kapazität von der Leitungslänge abhängig. > Quark. Aus Sicht der Terminierung ist das nicht Quark. Über die RC-Reihenschaltung muss die Laufzeit in der Leitung ausgeglichen werden. Wenn das der Fall ist, findet keine Reflektion mehr statt. Für die Terminierung ist es Bedeutungslos welche Frequenzen übertragen werden. Wenn man sich allerdings die Spannungspegel anschaut, dann ist es bei einer RC-Kombination gegen GND nicht unerheblich wie groß der C ist. Denn wenn R*C viel größer 1/f beträgt, bildet sich an C eine Art Mittelwert am Kondensator und die Quellimpedanz und der R (am C) bilden einen Spannungsteiler, der den Pegel am Eingang schmälert. Bei R*C viel kleiner 1/f erhält man im Gegensatz dazu den vollen Pegel am Eingang. Dafür ist die Flankensteilheit dynamisch begrenzt. Nutzt man nun die Eingangskapazität, so hat man den Vorteil, dass in den meisten Fällen die Eingangskapazität so klein ist, dass man keine Nennenswerte Einbußen in der Flankensteilheit hinnehmen muss und gleichzeitig aber den vollen Pegel erreicht. Ähnliches erreicht man auch mit einer externen RC-Terminierung. Allerdings liegt dann die Eingangskapazität parallel der RC-Kombination. Diese Eingangskapazität ist dynamisch erst einmal Niederohmig. Das führt dann zu einem kleinen Überschwinger. Meist ist der aber nicht problematisch und wird oft durch parasitäre Kapazitäten der Leiterplatte weitestgehend "geschluckt". Allerdings bildet die Quellimpedanz und der R (am C) einen dynamischen Spannungsteiler. Bei kleinem C (so dass man den vollen Ausgangspegel erreicht) hat das zur Folge, dass das Signal am Eingang sehr Steil bis etwa zur halben Pegelspannung ansteigt und dort dann mit dem Zeitverhalten der RC-Kombination langsam weiter ansteigt. Das Problem das sich da ergibt ist, dass der kleine Schwinger durch die Eingangskapazität nun bei halber Pegelspannung auftritt. Das ist genau der Betriebszustand an dem der Eingang zwischen Low- und Highpegel umschaltet. Bei sehr schnellen Eingängen z.B. bei FPGAs hatte ich da schon den Fall, dass dieser kleine Schwinger zu zusätzlich erkannten Takten führte. Das ließ sich allerdings nur durch sehr kapazitätsarme Hochspannungstastköpfe und einem Oszi mit sehr hoher Samplingrate (20GS) erfassen. Mit 10mm Groundleitung an der Messspitze ist das schon nicht mehr messbar gewesen. Die Kontaktierung der Messspitze ist für die Messung sehr diffizil.
@Matthias G. (mgottke) >Unter Terminierung meinte ich Empfangsseitig. Du hast aber recht, >Terminierung ist beidseitig. Nöö, das KANN beidseitig sein, MUSS aber nicht. >RC hin oder her, jedenfalls ist ein Serienwiderstand in Reihe mit der >Eingangskapazität eine Terminierung Eingangsseitig. Und selbst wenn du es nocht 100mal wiederholst, es ist KEINE Terminierung. Lies mal den Artikel Wellenwiderstand und denk drüber nach. > Die Terminierung ist >nämlich nicht direkt für den Eingang notwendig, sondern zur Vermeidung >von Reflektion und daraus resultierend zur Vermeidung Schwingen auf der >Leitung bei übertragenen Franken. Ober- oder Unterfranken ? ;-) >Die Praxis zeigt, dass das sehr wohl funktioniert. Was noch lange nicht heisst, dass deine Erklärung stimmt. Ein Maikäfer kann auch fliegen, ohne zu wissen warum das so ist ;-) >Aus Sicht der Terminierung ist das nicht Quark. Über die >RC-Reihenschaltung muss die Laufzeit in der Leitung ausgeglichen werden. Vollkommener Unsinn. >Dafür ist die Flankensteilheit dynamisch begrenzt. ??? >Das ließ sich allerdings nur durch sehr kapazitätsarme >Hochspannungstastköpfe Hochspannungstasköpfe für ein FPGA? ;-) MFG Falk
>>Aus Sicht der Terminierung ist das nicht Quark. Über die >>RC-Reihenschaltung muss die Laufzeit in der Leitung ausgeglichen werden. > > Vollkommener Unsinn. Probier mal aus was was passiert wenn Du auf einmal 100m Leitung (mit definierter Impedanz) über RC empfangsseitig abschließt. Das ist ein riesen Unterschied ob Du nun 10 pF oder 100 nF verwendest. Bei 10 cm Leitung ist das aber völlig wurscht. Das waren meine ersten Messungen und leidvollen Erfahrungen. >>Dafür ist die Flankensteilheit dynamisch begrenzt. > ??? Tiefpass! > Hochspannungstasköpfe für ein FPGA? ;-) ja, denn ein Tastkopf besteht immer aus einem kapazitiven und resistiven Spannungsteiler. Bei einem Tastverhältnis von 10:1, was typisch ist, sind die Eingangskapazitäten am Tastkopf typischerweise bei 15 bis 30 pF. Bei einem Hochspannungstastkopf hat man typischerweise ein Teilerverhältnis von 100:1 oder sogar noch höher. Da Teilst sich die Kapazität auch um den höheren Teilungsfaktor. Daher bei 100:1 hat man durchaus typische Eingangskapazitäten von 1,5 bis 3 pF. So kommt es hin und wieder vor, dass man mit einem 10:1 Tastkopf fast nur noch die Kapazität des Tastkopfes das Signal bestimmt. Bei einem Hochspannungstastkopf sieht das oft schon anders aus. Leider geht bei kleinen Spannungen dafür die Auflösung zurück. Mfg Matthias
@Matthias G. (mgottke) >Probier mal aus was was passiert wenn Du auf einmal 100m Leitung (mit >definierter Impedanz) über RC empfangsseitig abschließt. Du baust aber verdammt grosse Leiterplatten . . . > Das ist ein >riesen Unterschied ob Du nun 10 pF oder 100 nF verwendest. Und hast verdammt schlechte ICs mit 100nF Eingangskapazität . . . >Bei 10 cm >Leitung ist das aber völlig wurscht. Das waren meine ersten Messungen >und leidvollen Erfahrungen. Und hast dennoch nichts gelernt. >>>Dafür ist die Flankensteilheit dynamisch begrenzt. >> ??? >Tiefpass! Deine Formulierung "die Flankensteilheit dynamisch begrenzt" ist kompletter Unsinn und nix als Pseudowissen. >Teilerverhältnis von 100:1 oder sogar noch höher. Da Teilst sich die >Kapazität auch um den höheren Teilungsfaktor. Daher bei 100:1 hat man >durchaus typische Eingangskapazitäten von 1,5 bis 3 pF. Lern mal was über richtige HF-Tastköpfe für HOCHFREQUENZ! http://www.sigcon.com/Pubs/straight/probes.htm >Hochspannungstastkopf sieht das oft schon anders aus. Leider geht bei >kleinen Spannungen dafür die Auflösung zurück. Bei grossen genauso ;-) Das wär mit einem gescheiten HF-Tastkopf nicht passiert. MFG Falk
Sorry Falk, aber die Diskussion kann ich mir ersparen. Seit Jahren entwickle ich Schaltungen und habe Umgang mit Messtechnik. Klar lerne ich immer wieder was dazu, dazu gibt es mitunter auch solche Foren. Du solltest aber mal genauer lesen was hinter dem geschriebenen steht. Mit 100m meine ich natürlich keine Leiterplatte mehr. Dazu gibt es Kabel! 100nF sind natürlich diskret und nicht Eingangskapazitäten. Ein bisschen Seriöser solltest Du da schon sein. Und was HF-Tastköpfe sind weiß ich auch. Aber leider habe ich darauf keinen Zugriff. Wohl aber auf einen Hochspannungstastkopf. Man muss sich eben manchmal mit Dingen behelfen, die einem zu Verfügung stehen. Deshalb habe ich auch aus meinen Erfahrungen berichtet. Deinen Frage nach dem "warum" in Bezug auf den Hochspannungstastkopf habe ich ja noch verstanden und auch fairerweise erklärt. Den Ton den Du aber in den Antworten anschlägst halte ich für nicht io. Folgendes sollte hier im Forum die Grundlage der Diskussionen sein: Kritik bezeichnet „die Kunst der Beurteilung, des Auseinanderhaltens von Fakten, der Infragestellung“ in Bezug auf eine Person oder einen Sachverhalt. (aus Wikipedia) Für mich ist die Diskussion hiermit beendet. MfG Matthias
Vielleicht wollte Falk nur anmerken, dass 100m Kabel und 100nF Kondensatoren nicht äquivalent mit den Gegebenheiten auf Platinen sind. Grüße Gast
Deine Formulierung "die Flankensteilheit dynamisch begrenzt" ist kompletter Unsinn und nix als Pseudowissen. -> Dem stimme ich so zu!
Vermutlich reden beide von zwei verschiedenen Dingen. Der eine von einem RC-Tiefpass, also R in Reihe und dahinter ein C nach Masse, der andere von einer RC-Terminierung, nämlich eine Reihenschaltung von R und C nach Masse...
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.