Forum: FPGA, VHDL & Co. Wie schnell SPI-CLK samplen?


von Gast (Gast)


Lesenswert?

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

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


Lesenswert?

> 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?"

von Gast (Gast)


Lesenswert?

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

von Christian R. (supachris)


Lesenswert?

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.

von Antti Lukats (Gast)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@  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

von Antti Lukats (Gast)


Lesenswert?

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

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


Lesenswert?

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

von Matthias G. (mgottke)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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

von Matthias G. (mgottke)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@  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!

von Matthias G. (mgottke)


Lesenswert?

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.

von Falk B. (falk)


Lesenswert?

@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

von Matthias G. (mgottke)


Lesenswert?

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

von Falk B. (falk)


Lesenswert?

@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

von Matthias G. (mgottke)


Lesenswert?

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

von Gast (Gast)


Lesenswert?

Vielleicht wollte Falk nur anmerken, dass 100m Kabel und 100nF 
Kondensatoren nicht äquivalent mit den Gegebenheiten auf Platinen sind.

Grüße
Gast

von Gast (Gast)


Lesenswert?

Deine Formulierung "die Flankensteilheit dynamisch begrenzt" ist
kompletter Unsinn und nix als Pseudowissen.

-> Dem stimme ich so zu!

von Luftdruck (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.