2009-07-10 4 views
0

Ich habe einen USB Kartenleser, den ich von Lazarus/Delphi zugreifen muss.Mit Code geschrieben für den seriellen Port auf einem USB-Port

Das SDK ist in VB6 geschrieben und spricht mit dem seriellen Port, so in Windows installiert es einen Treiber, um den USB-Anschluss an eine serielle Schnittstelle zuzuordnen.

Ich möchte diesen Schritt überspringen (z. B. damit der gleiche Code unter Linux funktioniert), aber ich bin nicht sehr vertraut mit dem USB-Protokoll, also weiß ich nicht, wie es dem seriellen entspricht.

Der VB6-Code sendet jedes Zeichen einzeln (sozusagen seriell), während die USB-Schnittstelle Datenströme senden kann.

Sollte ich noch byteweise senden, oder einfach die Befehle concat und es in einem Rutsch senden? Oder ist das Konzept überhaupt anders?

Antwort

1

Wenn das USB-Gerät ein CDC ist, erkennt Linux es automatisch als serielles Kommunikationsgerät.

In diesem Fall können Sie einfach die/dev/ttyACM0 (oder was auch immer) öffnen und lesen/schreiben.

In jedem Fall: Wenn das USB-Gerät von Linux als serielles Kommunikationsgerät erkannt wird, öffnen Sie es einfach (über/dev /) und behandeln es wie Ihre seriellen Geräte (außer Sie müssen sich nicht um die Konfiguration kümmern Baudraten).

Und es gibt keinen Grund, warum Ihr Delphi-Code Daten "zu einem Zeitpunkt" an Ihr serielles Gerät senden sollte - Sie sollten in Delphi auch ganze Pakete schreiben können. Das habe ich gemacht, als ich PTZ (Pan-tilt-zoom) dome cameras über serielle Ports gesteuert habe.

Wenn das Gerät unter Linux nicht als serieller Port erkannt wird, kann es passieren, dass Sie einfach das installierte/dev/device öffnen und mit Standard-Datei-I/O (read()/write() darauf zugreifen).). Schreiben Sie wiederum ganze Befehle gleichzeitig.

1

Das USB-Protokoll unterscheidet sich vollständig von einer seriellen Schnittstelle. Es klingt wie der einfachste Ansatz für Sie, einen geeigneten USB-seriellen Treiber unter Linux zu installieren und dasselbe serielle Protokoll zu verwenden. Wahrscheinlich gibt es bereits einen solchen Treiber, der mit deinem Gerät funktioniert.

+0

Ich vermute, das Protokoll wäre völlig anders, aber da es Hardware-Adapter sind, dachte ich, dass es nicht zu unterschiedlich sein kann. Ich werde nach einem Linux-Treiber suchen, aber dann müsste ich noch einen anderen Treiber in Windows schreiben, also ist das keine optimale Lösung. Wie auch immer, Danke für die Antwort bereits, obwohl es noch nicht die Antwort ist, die ich erhoffte. :) – lyle