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
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...