Использование кода, написанного для последовательного порта на USB-порту

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

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

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

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

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


person lyle    schedule 10.07.2009    source источник


Ответы (2)


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

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

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

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

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

person KevinM    schedule 24.10.2012

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

person Greg Hewgill    schedule 10.07.2009
comment
Я предполагал, что протокол будет совершенно другим, но, поскольку есть аппаратные адаптеры, я подумал, что он не может быть слишком другим. Я буду искать драйвер для Linux, но тогда мне все равно нужно будет написать другой драйвер для Windows, так что это не оптимальное решение. В любом случае, спасибо за уже ответ, хотя это еще не тот ответ, на который я надеялся. :) - person lyle; 13.07.2009