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?
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.
RTLinux + kernelmodul damit bekommt man schon ziemlich enge zeit-toleranzen, allerdings wird im rt-modus JEDER "normale" prozess vom rt-prozess unterbrochen
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?
Dann musst Du einen µC benutzen, der den SPI Slave darstellt und dann timing-in-sensitive an den PC weiterleitet.
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.
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?
> 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...
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.