Главная » Delphi » Эмуляция СОМ-порта через шину USB

9

Еще не так давно считалось, что протокол обмена данными по USB настолько сложен, что его реализовать под силу только далеко не рядовым специалистам. Но спрос рождает предложение. Вероятно, самое удобное на сегодняшний день решение для эмуляции последовательного порта через USB предлагает английская (точнее шотландская) фирма Future Technology Devices International Ltd — FTDI. К ее устройствам (см. также приложение 4) прилагаются бесплатные и свободно распространяемые драйверы под все основные ОС, в том числе и под Windows семейств NT и 9л\ Разновидностей таких драйверов две — это VCP- и 02ХХ-драйверы.

VCP на самом деле означает Virtual Communication Port— этот драйвер просто-напросто транслирует все стандартные функции Win32 API, которые мы использовали ранее, в необходимые команды для USB и через микросхему FT232BM (или аналогичные ей, находящиеся в устройстве) опять преобразует их в битовые последовательности UART. При подключении устройства в системе возникает новый СОМ-порт, и все описанные ранее программы без переделок будут работать через него. Это касается и случая, когда используется фирменный "шнурок" USB/RS-232, и когда вы сами нечто подобное изобрели (см. приложение 4). Мало того, в Windows ХР подобный драйвер уже есть, и там ничего вообще устанавливать не надо — единственная разница в том, что виртуальный СОМ, в отличие от реального, не будет виден в системе, пока вы свое устройство не подключите к USB.

Единственный серьезный аопрос, который может возникнуть в случае использования VCP-драйверов, касается скорости передачи — если уж USB, то хочется использовать хоть малую долю возможностей этой шипы, между тем стандартно СОМ-порт через структуру dcb может устанавливать скорость в 256 ООО бод. Есть и приемы установки для СОМ-порта нестандартной скорости обмена, но вопрос о том, насколько это корректно для данного случая, лично для меня, ввиду новизны ситуации, пока открыт (официальная документация не слишком уверенно утверждает, что можно использовать только стандартные скорости). Второй— менее серьезный— недостаток VCP заключается в том, что вы не можете через него работать с встроенной в FT- устройство EEPROM, в которой записан идентификатор устройства и прочие необходимые для USB "прибамбасы".

В этих случаях следует использовать 1)2ХХ-драйвер. работа с которым не сложнее, чем с разобранным ранее компонентом TAf ComPort, но программы, конечно, придется переписывать. С установкой D2XX-,apaiinepa связана одна совершенно глупая трудность (так и хочется написать — "характерная для продуктов MS")— как указывалось ранее, в Windows ХР VCP-драйиер уже есть, и для установки 02ХХ-драйвера нужно устраиват ь некоторые "пляски с бубном", цитирую из русского переложения фирменных рекомендаций по этому поводу (http://www.efo.ru/doe/Ftdi/Ftdi.pI71046):

"Немного сложнее обстоит дело в случае использования операционной системы Windows ХР, которая уже имеет в своем составе сертифицированные VCP-драйверы FTD1. При попытках присоединить к компьютеру новое USB- устройство со стандартными идентификаторами FTDI (например, любой D LP-модуль) система по умолчанию, не спрашивая пользователя, самостоятельно установит VCP-драйверы. Пользователю, желающему работать с D2XX-dpaueepauu, необходимо в этот момент вспомнить, что очень полезно воспитывать в себе терпение и воспользоваться утилитой ftxprcvr.exe, входящей в состав дистрибутива D2XX-dpaueepoe для Windows ХР. Утилита ftxprcvr.exe, используя установившиеся по умолчанию VCP-драйверы, перепрограммирует внешнюю EEPROM. используемую в присоединенном устройстве, и задаст новые значения идентификаторов (VID=0403 и РЮ-6006). После этого необходимо повторить процедуру установки D2.XX-dpaimepoe сначала, т. е. отключить и снова присоединить устройство. Теперь система даст возможность пользователю указать директорию для установки D2XX- драйверов."

Перепрограммировать EEPROM в устройстве USB на основе микросхем FT232BM через свою программу не обязательно, для этого есть фирменная утилита EditEEPROM (http://www.efo.ru/doc/Ftdi/Ftdi.pl7798). Приводить примеры программ для работы с Э2ХХ-драйвером я не вижу никакого смысла — работающего устройства под рукой и у меня, и у вас нет, а просто переписывать фирменную документацию — только бумагу переводить, она уже не однажды переписана и переведена на русский, см., например, цитированную ранее статью или книгу [29]. На сайте екатеринбургской фирмы "Институт радиотехники" есть, в том числе, работающий пример проекта на Delphi (http://www.institute-rt.ru/ftdi/d2xxappl.zip) — а вот сами драйверы с данного сайта скачивать не следует, на момент написания этих строк там лежит устаревший вариант, лучше обратиться к первоисточнику (http:// www.ftdichip.com) или на упоминавшийся сайт компании "Эфо" (http:// www.efo.ru/doc/Ftdi/Ftdi.pl7784).

О некоторых особенностях обработки поступающих через последовательный порт данных мы поговорим в следующей главе.

Источник: Ревнч Ю. В.  Нестандартные приемы программирования на Delphi. — СПб.: БХВ-Петербург, 2005. — 560 е.: ил.

Похожие посты:

Комментариев 9

  1. alex пишет:

    Всё бы хорошо сделать с помощью ftdiChip, есть только 2 трудности.
    1. Драйвера не определяются без микросхемы
    2. Задача – после установки драйверов хочется получить в диспетчере устройств в разделах COM и USB соответствующие новые устройства, и возможность их настройки, например перенаправление данных с одного конкретного порта USB на виртуальный COM c настройкой режима передачи данных.

    • Vadik пишет:

      Делал программатор AVR на ftdiChip. После установки драйвера и подключения в диспетчере видно устройство USB (ftdiChip) и новый компорт на котором можно настраивать скорость.

  2. alex пишет:

    У меня есть программа AdvancedVirtualComPort (http://www.kernelpro.com/files/AdvancedVirtualComPort.zip). Она создаёт виртуальное устройство, но не даёт возможности его подключения через USB

    • Vadik пишет:

      Как я уже говорил раньше, в свое время я делал программатор на AVR с использованием FT232RL. Не поленился, достал устройство и подключил его к компьютеру. В диспетчере устройств появился новый порт (у меня Windows 7 x64):

      clip_image002

      На вкладке параметры порта нажал кнопку «Дополнительно»:

      clip_image004

      Вот тут можно поменять его настройки и номер порта в частности.

      Вот ссылка на схему: http://easyelectronics.ru/skorostnoj-avr-usb-programmator-na-ft232rl-bez-vspomogatelnogo-kontrollera.html

      Вот ссылка на страницу загрузки драйверов виртуального Com порта для данной микросхемы:

      http://www.ftdichip.com/Drivers/VCP.htm

  3. alex пишет:

    красиво..
    У меня Windows 2000 Professional SP 4, а задача состоит в том, чтобы безо всяких микросхем создать многоцелевое программное устройство – переходник с USВ на COM.
    У ftdi на каждую микросхему написан свой драйвер, у используемых мной устройств (таких как USB-модем) – тоже используется COM-интерфейс, однако мне не удаётся задействовать имеющиеся драйвера, потому что писать я их не умею. В Windows 2000 нет (как например в XP) стандартного драйвера для виртуального COM.

  4. alex пишет:

    номер порта, кстати, и в моей программе менять можно и назначать какой угодно, скорости тоже меняются, порты программно включаются/отключаются

    • Vadik пишет:

      Чтобы использовать виртуальный COM порт USB модема нужно найти его специализированный драйвер, после установки которого в системе появится виртуальный COM порт соответствующий данному модему. Однако если в модеме не предусмотрена эмуляция COM порта, ни каким драйвером даже самописным реализовать данную функцию не возможно.
      Интерфейс USB в корне отличается от интерфейса COM порта, поэтому для его эмуляции необходима поддержка на уровне аппаратного обеспечения модема и на уровне драйвера ОС.
      Указанная в Вашем комментарии программа лишь перенаправляет и создает виртуальные COM, заменить драйвер модема она не сможет так как должна работать с “готовыми” портами. А созданные её порты являются виртуальными (не связанными ни чем с аппаратной частью).
      При установке драйвера модема на Windows XP виртуальный COM порт появляется?

  5. alex пишет:

    > если в модеме не предусмотрена эмуляция COM порта, ни каким драйвером даже самописным реализовать данную функцию не возможно.

    Модем сам по себе так устроен, что он предусматривает подключение по интерфейсу COM.

    >нужно найти его специализированный драйвер, после установки которого в системе появится виртуальный COM порт соответствующий данному модему

    Найти нужно. После установки драйверов модема в диспетчере задач системы появляются устройства: 3G PC UI Interface (COM3) и 3G Application Interface (COM4)

    программа лишь перенаправляет и создает виртуальные COM, заменить драйвер модема она не сможет так как должна работать с “готовыми” портами. А созданные её порты являются виртуальными (не связанными ни чем с аппаратной частью).

    В принципе, программа могла бы их использовать.

    Большинство шнуров, подключаемых к USB, прямые и не имеют в своём составе микросхем, а аппаратная часть подключаемых устройств разная, не привязана к какому-то микроконтроллеру

    >При установке драйвера модема на Windows XP виртуальный COM порт появляется?

    Не испробовал, поэтому не знаю, ну по всей видимости он устанавливаться должен так же, как и в Win2k.

    Виртуальный COM в XP может появляться при подключении неизвестных устройств, чего нет в Win2k

Комментарии