Forum: FPGA, VHDL & Co. SPI-Master SCLK soll dem CLK entsprechen


von M. K. (marc1234)


Lesenswert?

Hallo,
ich brauche eigentlich nur ein simplen schnellen SPI Master der an einen 
Slave übermittelt. Ich habe den von Lothar Miller aus 
http://www.lothar-miller.de/s9y/archives/51-Konfigurierbarer-SPI-Master.html

genommen jedoch ist die Übertragungsrate bis die Bits übertragen sind zu 
langsam. Ich habe ein 16 bit SPI Slave und würde gerne diesem in max. in 
20 Takten die Daten übergeben.
Zum SPI:
CPHA ist 0
CPOL ist 1.

Ich würde gerne das die SPI-Taktfrequenz bzw. SCLK gleich dem CLK ist. 
Das ist jedoch bei dem Code nicht möglich.
Habe es schon versucht zuändern, aber dann macht es nur mist :-(

Wäre um jeden rat dankbar oder kennt jemand einen anderen SPI Master?

von Falk B. (falk)


Lesenswert?

@  Marc K. (marc1234)

>http://www.lothar-miller.de/s9y/archives/51-Konfig...

Die Schaltung kann nur CLK/2, ist halt sehr flexibel konfigurierbar.
mit CLK = SCLKm gibt es so einige Probleme, wenn man es zu lax angeht.

>genommen jedoch ist die Übertragungsrate bis die Bits übertragen sind zu
>langsam. Ich habe ein 16 bit SPI Slave und würde gerne diesem in max. in
>20 Takten die Daten übergeben.

Geht schon. Muss man halt entweder alles selber stricken oder den 
Taktteiler rauswerfen, das ist aber eher komplex in der Schaltung. 
Vorschlag: Selber komplett neu machen, ohne Konfiguration etc. Macht die 
Sache deutlich einfacher.

>Wäre um jeden rat dankbar oder kennt jemand einen anderen SPI Master?

ISt ein einfaches Schiebegrgister, Zähler und bissel Logik. Siehe oben.

von Uwe (Gast)


Lesenswert?

Dann verdopple doch die Clock am SPI Master

von PittyJ (Gast)


Lesenswert?

So wie ich SPI kennengelernt habe, sollten an der Datenleitung MOSI die 
Daten schon anliegen haben, wenn SCLK auf high geht. Anders hat es bei 
mir nicht sehr sauber funktioniert. Deshalb habe ich das SPI-Protokoll 
auf 4 Takte verteilt. Das läuft sehr stabil.
Wie das in einem Takt gehen soll, dass weiss ich nicht.
Ich würde es auch einmal mit einer PLL versuchen.

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


Lesenswert?

PittyJ schrieb:
> Anders hat es bei mir nicht sehr sauber funktioniert.
Dann hast du den falschen SPI-Mode verwendet.

> Wie das in einem Takt gehen soll, dass weiss ich nicht.
Sieh dir dort das Bild mit den Schieberegistern an: da ist nur 1 Takt. 
http://www.lothar-miller.de/s9y/categories/17-SPI
Und das geht garantiert,denn genau so hat Motorola das SPI-Protokoll 
aufgebaut und spezifiziert: KISS = Keep it Simple and Stupid

Es gibt theoretisch 2 Vorgänge beim SPI:
1. Daten auf den Bus geben zur einen Flanke des SPI-Clocks
2. Daten übernehmen mit der anderen Flanke des SCLKs

Aaaaaber! Letzlich sind das nur Flipflops, und Flipflops können 
bedenkenlos zum Schieberegister hintereinander geschaltet werden 
(74hc595 und Co.), wenn es zu keiner Race-Condition kommt. Wenn also der 
Takt nicht langsamer durch die Schaltung wandert als die Daten.
Und aus diesem Grund gibt es "normalerweise" nur 1 Flanke, bei der was 
passiert, und einfach die Daten vom Vorgänger übernommen werden. Wenn 
das alle Flipflops gleichzeitig machen, dann ist eine Aufteilung in 2 
oder gar mehr Phasen nicht nötig.

Dass dadurch das Design insgesamt (insbesondere zusammen mit dem SS#) 
nicht schöner und einfacher wird, das bleibt hier mal aussen vor...

von Klaus (Gast)


Lesenswert?

Lothar Miller schrieb:
> Und aus diesem Grund gibt es "normalerweise" nur 1 Flanke, bei der was
> passiert, und einfach die Daten vom Vorgänger übernommen werden

Kann man damit Setup und Holdzeiten unter allen Umständen einhalten? 
Und klappt das auch weiter hinten in der Flipflop Kette?

MfG Klaus

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


Lesenswert?

Klaus schrieb:
> Kann man damit Setup und Holdzeiten unter allen Umständen einhalten?
Aus diesem Grund war das "normalerweise" in Anführungszeichen gesetzt. 
Was ist schon normal?
Oft ist zwar genau die Hold-Zeit 0ns oder kann auch gern mal 
undokumentiert 0ns sein. Und genau das ist der Knackpunkt, warum ich 
den SPI in 2 Phasen aufteile: es steht nicht unbedingt explizit im 
Datenblatt, und wenn der Layouter den Takt mal ungünstig verlegt, dann 
krachts...

Die Setupzeit ist beim "Eine-aktive-Flanke"-SPI komplett unkritisch, 
weil ja schon mit der jetzigen aktiven Taktflanke (z.B. steigend) die 
Daten für die nächste aktive Flanke (wieder steigend) ausgegeben werden, 
und damit ein ganzer Taktzyklus Setupzeit zur Verfügung steht.

> Und klappt das auch weiter hinten in der Flipflop Kette?
Die Position an sich ist egal. Interessant sind immer nur 2 Flipflops:
das ausgebende und das empfangende.

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.