Forum: PC-Programmierung SPI am Parallel-Port simulieren


von Daniel (Gast)


Lesenswert?

Hallo,
ich habe ein Gerät, mit dem ich mit dem PC mittels SPI kommunizieren 
möchte.
Nun bin ich soweit, dass ich gelesen habe, dass es scheinbar unmöglich 
ist, über die Gerätetreiber eine saubere und relativ hohe Frequenz 
(bspw. für das CLK-Signal) hinzubekommen. Stichwörter: Betriebssystem, 
Prozesse, Microsekunden-Delay.
Nun gibt es doch aber Parallel-Programmer, ich erinnere mich da für den 
MSP (von Olimex: http://elmicro.com/de/msp430jtag.html). Dieser wird 
auch an den Parallel-Port angeschlossen.
Laut Schaltplan sind dort nur Pegelwandler drin. Also muss die 
SPI-Freqeunz irgendwie von der Entwicklungsumgebung erzeugt werden.
Gibt es für sowas nicht schon fertige Treiber?

von Εrnst B. (ernst)


Lesenswert?

Bei SPI (Master!) ist das Timing unkritisch, das kann man gut per 
Software machen.
Auch wenn mal ein CLK-Puls zehnmal so lang wie der vorhergehende ist, 
das Empfangs-Schieberegister stört das nicht.

Fertige Treiber findest du unter "SPI-Bitbanging-Adaptors" in der 
Kernel-Config.

von df311 (Gast)


Lesenswert?

RTLinux + kernelmodul
damit bekommt man schon ziemlich enge zeit-toleranzen, allerdings wird 
im rt-modus JEDER "normale" prozess vom rt-prozess unterbrochen

von Daniel (Gast)


Lesenswert?

Erstmal Danke für eure Antworten.

 -Ich benutze jedoch kein Linux, sondern muss es unter Windows 
realisieren.

@ernst
Das habe ich vergessen zu erwähnen:
 -Es handelt sich leider um einen Slave, sonst hättest du natürlich 
recht.

@df311
 -Realtime ist doof. Der SPI-Traffic muss nebenläufig ablaufen.

Gibt es denn noch andere Möglichkeiten?

von Feadi F. (feadi)


Lesenswert?

Dann musst Du einen µC benutzen, der den SPI Slave darstellt und dann 
timing-in-sensitive an den PC weiterleitet.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Selbst ein µC hat es übrigens schwer, SPI-Slave zu spielen.  SPI ist
von der Natur her ein Schieberegister und ist optimal dafür, in
purer Hardware realisiert zu werden.  Es gibt (anders als bspw. bei
I²C) keine Möglichkeit für den Slave, dem Master zuzurufen: ,,Halt
mal, ich bin noch gar nicht so weit!''  Wenn der Master seine erste
Taktflanke raustaktet, muss der Slave das erste Datenbit bereit
gestellt haben, ohne wenn und aber.

von Daniel (Gast)


Lesenswert?

Mit anderen Worten kann ich es vergessen unter den gegebenen Umständen 
einen Slave zu realisieren?

wie sieht es aus mit USB. hab mal gelesen, dass es damit besser aussehen 
könnte. einen FTxxx-Chip, der über RS232-Treiber läuft?

von Santiago (Gast)


Lesenswert?

> Das habe ich vergessen zu erwähnen:
>  -Es handelt sich leider um einen Slave, sonst hättest du natürlich
> recht.

Heißt das nicht, dass das Gerät, welches Du besitzt, ein Slave ist?!?
Damit ist doch alles in Butter, denn das Gegenstück sollte dann ein 
Master sein.
Wenn das Timing wirklich kritisch wird, könntest Du auch parallel zum µC 
und von dort per SPI weiter...

von Matthias (Gast)


Lesenswert?

Das ginge auch mit den klassischen USB-UART ICs von FTDI, FT232R.
Kannst damit selber die 4 Pins CB0 bis CB3 verwenden (als normale 
I/O-Pins) Stichwort "CBUS Bit Bang Mode" und den SPI Handling selber 
erzeugen. Diese Pins lassen sich einzeln setzen und abfragen, können 
alle als Eingang und Ausgang verwendet werden.

http://www.ftdichip.com/Products/FT232R.htm
http://www.ftdichip.com/Documents/AppNotes/AN232R-01_FT232RBitBangModes.pdf
http://www.ftdichip.com/Projects/CodeExamples/VC++/vc_CBUS_bitbang.zip

Es gibt dazu bei FTDI weitere Dokumente.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Es geht um einen SPI-Slave, und der ist im Bit-Bang-Verfahren mit egal 
welcher Schnittstelle nur äußerst kompliziert zu realisieren, selbst auf 
einem schnellen Microcontroller.

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.