Использование кода, написанного для последовательного порта на USB-порту - PullRequest
0 голосов
/ 10 июля 2009

У меня есть USB карт-ридер, к которому мне нужен доступ из Lazarus / Delphi.

SDK написан на VB6 и взаимодействует с serial , поэтому в Windows он устанавливает драйвер для сопоставления USB-порта с последовательным портом.

Я бы хотел пропустить этот шаг (например, чтобы тот же код работал в Linux), но я не очень знаком с протоколом USB, поэтому не знаю, как он сопоставляется с последовательным протоколом.

Код VB6 отправляет каждый символ индивидуально (так сказать, последовательный), а интерфейс USB позволяет отправлять потоки данных.

Должен ли я отправлять байты за байтом или просто объединять команды и отправлять их за один раз? Или концепция в любом случае совершенно другая?

Ответы [ 2 ]

1 голос
/ 24 октября 2012

Если USB-устройством является CDC , то Linux автоматически обнаружит его как устройство последовательной связи.

В этом случае вы можете просто открыть / dev / ttyACM0 (или что-то еще) и читать / писать в него.

В любом случае: если устройство USB обнаружено в Linux как устройство последовательной связи, просто откройте его (через / dev /) и относитесь к нему так же, как к последовательным устройствам (за исключением того, что вам не нужно беспокоиться о настройке скорости передачи данных) ставки).

И нет никаких причин, по которым ваш код Delphi должен посылать данные на ваше последовательное устройство «символ за раз» - вы также должны иметь возможность писать целые пакеты в Delphi. Это то, что я делал, когда управлял купольными камерами PTZ (Pan-tilt-zoom) через последовательные порты.

Если устройство не определено как последовательный порт в Linux, вам, возможно, удастся просто открыть установленное / dev / устройство и получить к нему доступ с помощью стандартного файлового ввода-вывода (read () / write ()) , Снова, напишите целые команды за один раз.

1 голос
/ 10 июля 2009

Протокол USB полностью отличается от последовательного порта. Похоже, самый простой подход для вас - установить подходящий драйвер USB-последовательного интерфейса в Linux и использовать тот же последовательный протокол. Скорее всего, уже существует такой драйвер, который работает с вашим устройством.

...