Этот апноут (перевод [1]) описывает дополнительные настройки драйвера FTDI CDM Windows. Информация здесь предназначена как справочное руководство для квалифицированных инженеров, разрабатывающих изделия и драйверы с применением микросхем FTDI. Если Вы не уверены в понимании функций, описываемых в этом документе, то не изменяйте файлы драйвера или настройки реестра, и обратитесь за помощью к службе поддержки FTDI.
[Страница свойств CDM USB Serial Converter]
Драйвер CDM предоставляет страницу свойств устройства USB Serial Converter. Она находится на том же уровне, что и у оригинального драйвера D2XX.
Рис. 2.1. Свойства USB Serial Converter.
Загрузка драйвера COM-порта. В случае устройств FT232R, FT245R и FT2232 тип драйвера определяется данными установок, записанных в EEPROM. Закладка Advanced (Дополнительно) позволяет пользователю изменить любые настройки EEPROM для выбора типа драйвера. Установки EEPROM можно отменить, установив галочку "Load VCP", что укажет загружать виртуальный драйвер COM-порта (VCP расшифровывается как "Virtual COM Port").
Эта опция также может быть сконфигурирована как значение по умолчанию в помощью файла FTDIBUS.INF перед установкой драйвера (см. далее раздел "Опции FTDIBUS.INF", секция "Отмена установок EEPROM для драйвера"). Если это установлено, то настройки EEPROM для драйвера будут игнорироваться.
USB Selective Suspend. Драйвер USB Serial Converter поддерживает функцию выборочной приостановки (USB Selective Suspend). Это означает, что система может приостановить устройства, которые не используются, уменьшая тем самым общее потребление энергии. Эта опция разрешается галочкой "Enable Selective Suspend" (см. рис. 2.1). Период отсутствия активности, по которому срабатывает функция, выбирается в диапазоне от 1 секунды до 1 часа (выпадающий список "Selective Suspend Idle Timeout"). Значение по умолчанию 5 секунд.
Обратите внимание, что галочка "Load VCP" должна быть снята, чтобы можно было разрешить функцию Selective Suspend.
[Страница дополнительных свойств CDM COM-порта]
Для устройств, использующих драйверы VCP, доступна страница для редактирования дополнительных свойств (advanced properties). Чтобы получить доступ к этой странице в Windows 2000 или Windows XP, перейдите в Панель Управления и зайдите в раздел "Система" (Control Panel -> System), после чего выберите закладку "Оборудование" (Hardware) и кликните на раздел "Диспетчер устройств" (Device Manager), или в Windows Vista выберите Панель Управления -> Диспетчер устройств (Control Panel -> Device Manager). Найдите нужный виртуальный последовательный порт USB (USB COMx serial port), у которого Вы хотите изменить свойства, правым кликом на нем откройте контекстное меню и выберите в нем "Свойства" (Properties). Откроется окно диалога, на котором выберите закладку "Параметры порта" (Port Settings), см. рис. 3.1.
Рис. 3.1. Свойства USB Serial (COM68).
Эта страничка позволяет изменять базовые параметры виртуального USB COM порта: скорость (Baud rate, "Bits per second:", количество бит данных кадра "Data bits:", наличие контроля бита четности "Parity:", количество стоп-битов "Stop bits:" и наличие аппаратного управления потоком данных "Flow control:"). Для получения доступа к дополнительным настройкам кликните на кнопку "Дополнительно..." (Advanced...), откроется соответствующее окно диалога (см. скриншот ниже).
Рис. 3.1. Дополнительные свойства USB Serial (COM68).
Здесь можно поменять следующие параметры:
• Номер COM-порта (COM Port Number:). • Размеры буферов USB для передачи и приема (USB Transfer Sizes). • Значение таймера времени ожидания (Latency timer). • Значения таймаута чтения и записи (Timeouts). • Дополнительные опции (Miscellaneous options). • USB Selective Suspend.
Эти опции также можно конфигурировать как значения по умолчанию через файл FTDIPORT.INF перед установкой драйвера, что описано далее в разделе "FTDIPORT.INF Options". Другие опции описаны в разделе "Miscellaneous Options".
[Редактирование INF-файла для изменения значений VID и PID]
Чтобы использовались драйверы FTDI с устройствами, у которых отличаются комбинация VID и PID от значений FTDI VID и значения PID по умолчанию, INF-файлы драйвера должны быть изменены для соответствия желаемой комбинации VID и PID.
Примечание: некоторую дополнительную полезную информацию по редактированию INF-файлов для установки пользовательских значений VID и PID можно получить в руководстве пользователя утилиты MProg, доступной в базе знаний компании FTDI [2].
Файл настроек драйвера шины FTDIBUS.INF. Чтобы операционная система Windows успешно нашла нужный драйвер для устройства, значения VID и PID, запрограммированные в устройстве, должны быть перечислены в INF-файле. Секции файла FTDIBUS.INF, показанные ниже жирным текстом, должны быть исправлены для соответствия желаемым значениям VID и PID:
Если нужно поменять отображаемое в Менеджере Устройств имя устройства, то следует поменять следующий текст:
[Strings]
Ftdi="FTDI"
USB\VID_0403&PID_6001.DeviceDesc="USB Serial Converter"
и для устройств FT2232:
[Strings]
Ftdi="FTDI"
USB\VID_0403&PID_6010&MI_00.DeviceDesc="USB Serial Converter A"
USB\VID_0403&PID_6010&MI_01.DeviceDesc="USB Serial Converter B"
Примечание: значения, приведенные здесь, являются значениями по умолчанию, и они сертифицированы компанией FTDI. Когда изменяется FTDIBUS.INF для соответствия новой комбинации VID и PID, все ссылки на значения по умолчанию должны быть из файла удалены. Для дополнительной информации см. TN_102 [3] и AN_101 [4].
USB\VID_0403&PID_6001.DeviceDesc="USB Serial Converter"
USB\VID_0403&PID_6010&MI_00.DeviceDesc="USB Serial Converter A"
USB\VID_0403&PID_6010&MI_01.DeviceDesc="USB Serial Converter B"
USB\VID_0403&PID_6011&MI_00.DeviceDesc="USB Serial Converter A"
USB\VID_0403&PID_6011&MI_01.DeviceDesc="USB Serial Converter B"
USB\VID_0403&PID_6011&MI_02.DeviceDesc="USB Serial Converter C"
USB\VID_0403&PID_6011&MI_03.DeviceDesc="USB Serial Converter D"
SvcDesc="USB Serial Converter Driver"
ClassName="USB"
Файл настроек порта FTPORT.INF. В дополнение к модификациям, которые вносятся в файл FTDIBUS.INF, также делаются показанные ниже жирным шрифтом модификации файла FTDIPORT.INF для соответствия комбинации VID и PID микросхемы FTDI:
Для файла FTPORT.INF не нужно поддерживать отдельные записи для каждого интерфейса микросхем FT2232 и FT4232, поскольку каждый порт обслуживается одной и той же записью:
Может быть изменена строка описания устройства, чтобы показывать пользовательское имя порта в Менеджере Устройств:
[Strings]
Ftdi="FTDI"
VID_0403&PID_6001.DeviceDesc="USB Serial Port"
Примечание: значения, показанные здесь, соответствуют значениям по умолчанию, которые уже сертифицированы компанией FTDI. Когда изменяется файл FTDIBUS.INF, чтобы добиться совпадения с новой комбинацией VID и PID, то все ссылки на эти значения по умолчанию должны быть из файла удалены. Для дополнительной информации см. технические указания TN_102 [3] и апноут AN_101 [4].
Некоторые опции конфигурации по умолчанию конфигурируются файлом FTDIBUS.INF. Эта секция описывает доступные опции и как их реализовывать.
Reset Pipe Retry Count. В некоторых редких случаях может понадобиться увеличить количество попыток сброса канала (USB pipe), после которых произойдет ошибка. Например, когда устройство USB эксплуатируется в условиях повышенного шума.
Значение по умолчанию счетчика запросов сброса (reset pipe request retry count) равно 50. Это значение по умолчанию может быть изменено путем редактирования следующего фрагмента файла FTDIBUS.INF:
[FtdiBus.NT.AddService]
AddReg=FtdiBus.NT.AddService.AddReg
[FtdiBus.NT.AddService.AddReg]
HKR,Parameters,"RetryResetCount",0x00010001,100
В этом примере значение reset pipe request установлено на 100. Оно сохраняется в следующей ветке реестра:
Использование Location ID. В некоторых приложениях может потребоваться устанавливать устройства (присваивать номер COM-порта) не по серийному номеру, а по месту его подключения (т. е. в какой порт USB устройство подключено). Это может быть реализовано записью LocIds в INF-файле драйвера.
Драйвер использует LocIds, чтобы определить набор поддерживаемых портов USB. Это может использоваться в системах, где требуется доступность только определенных портов USB, возможно в объединении с MaxDevs (см. далее). Поведение по умолчанию обеспечивает поддержку всех портов USB. Это умолчание можно отменить путем подключения в ключе сервиса FTDIBUS.INF.
В этом примере фрагмента INF-файла поддерживаются три порта USB. Location ID 0x00000021 представляет host controller 1 port 1. Location ID 0x00000032 представляет host controller 2 port 2. Location ID 0x00000011 представляет host controller 0 port 1.
Важное замечание: подобная установка LocIds радикально изменит поведение драйвера; свяжитесь с FTDI, если Вы думаете изменить LocIds.
Значения Location ID могут быть получены с помощью последней версии утилиты USBView, доступной в разделе Utilities сайта FTDI [5], также см. апноут AN232B-07 [6].
Утилита USBView может показать идентификаторы Location ID выбором в меню Options -> Location IDs. Скриншот ниже показывает компьютер PC с хабом, который подключен к Location ID 0x0000002A, и устройства, подключенные к Location ID 0x00000019 и 0x00002A3.
Рис. 5.1. USBView, отображение Location ID.
Записи INF для устройств, подключенных к этим портам:
Имейте в виду, что строка INF должна заканчиваться на запись 00, чтобы правильно завершался список Location ID.
Если попытаться установить новое устройство в порт, Location ID которого не поддерживается, будет сгенерирована ошибка Code 10 ("This device cannot start", это устройство не может быть запущено).
Обратите внимание, что значения Location ID, представленные в поле LocIds, указаны как 4 байта в HEX-формате, которые следуют друг за другом в обратном порядке (младший байт идет первым). Также имейте в виду, что хотя контроллеры хоста USB индексируются начиная с 0, и порты начиная с 1, значения Location ID вычисляются подстройкой номера контроллера хоста так, чтобы они индексировались начиная с 1.
Ограничение количества COM-портов. Количество виртуальных COM-портов FTDI, которое может быть установлено в системе, может быть ограничено параметром MaxDevs. По умолчанию MaxDevs задано в 0, что означает ограничения, и драйвер всегда попытается создать COM-порт. Это может быть отменено путем указания ненулевого значения MaxDevs в секции службы файла FTDIBUS.INF.
[FtdiBus.NT.AddService]
AddReg=FtdiBus.NT.AddService.AddReg
[FtdiBus.NT.AddService.AddReg]
HKR,Parameters,"MaxDevs",0x00010001,3
Показанный выше пример фрагмента INF-файла задает максимальное количество устройств 3. Это значение хранится в следующей ветви реестра:
Если сделана попытка установить большее количество устройств, чем задано в MaxDevs, то будет сгенерирована ошибка Code 10 ("This device cannot start").
Важное замечание: установка MaxDevs в ненулевое значение радикально изменит поведение драйвера; свяжитесь с FTDI, если Вы думаете изменить MaxDevs.
Отмена установок EEPROM для драйвера. В случае устройств FT232R, FT245R и FT2232, драйвер прочитает EEPROM устройства, чтобы определить, будет ли показан COM-порт, или нет. Ранние устройства серий B и AM не имели настроек EEPROM для типа драйвера, что по умолчанию означало установку COM-порта. Эту функцию можно выключить, и выбор загружаемого драйвера может быть задан через файл установки.
Для стандартной установки в файл FTDIBUS.INF могут быть добавлены следующие секции, чтобы отменить конфигурацию EEPROM и загрузить драйвер VCP:
[FtdiBus.NT.HW]
AddReg=FtdiBus.NT.HW.AddReg
[FtdiBus.NTamd64.HW]
AddReg=FtdiBus.NT.HW.AddReg
[FtdiBus.NT.HW.AddReg]
HKR,,"ConfigData",0x00010001,4
Бит 2 параметра ConfigData определяет загрузку драйвера: если этот бит установлен в 1, то драйвер VCP загрузится (как показано в предыдущем примере); иначе загрузится только драйвер D2XX. Таким образом, добавление показанных выше секций в файл установки, и в частности установка значения ConfigData в 4, приведет к загрузке драйвера VCP, независимо от установок EEPROM.
Показанный метод может быть расширен для двухканального устройства FT2232. В этом случае создаются новые секции для каждого канала, чтобы каждый канал можно было конфигурировать и устанавливать по отдельности. Следующие фрагменты показывают дополнительные изменения, которые должны быть сделаны с целью конфигурирования канала A для загрузки только драйвера D2XX, и канала B для загрузки драйвера VCP.
Здесь значение ConfigData установлено в 0 для канала channel A (загрузится драйвер D2XX) и значение ConfigData установлено в 4 для channel B (загрузится драйвер VCP). Конечно, если ConfigData не добавлен в файл установки, то тогда установки EEPROM будут определять, какой драйвер следует загрузить.
Параметр ConfigData хранится в следующем ключе реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\{VID, PID устройства
и интерфейс}\{серийный номер}\DeviceParameters\ConfigData
Загрузка драйвера COM-порта также может быть принудительно задана после установки через закладку Advanced свойств устройства USB Serial Converter, что делается в Менеджере Устройств (см. рис. 2.1).
Таймаут USB. Таймаут USB это максимальное время в миллисекундах, в течение которого запрос USB может находиться в ожидании обработки. В редких случаях может понадобиться изменить установленное значение таймаута 5000 мс.
Таймаут USB (в миллисекундах) конфигурируется через файл FTDIBUS.INF в следующих секциях:
[FtdiBus.NT.HW]
AddReg=FtdiBus.NT.HW.AddReg
[FtdiBus.NTamd64.HW]
AddReg=FtdiBus.NT.HW.AddReg
[FtdiBus.NT.HW.AddReg]
HKR,,"USBTimeout",0x00010001,5000
Соответствующий ключ реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\{VID, PID устройства
и интерфейс}\{серийный номер}\DeviceParameters\USBTimeout
Запрет записи в EEPROM. Иногда может понадобиться запретить возможность записи в EEPROM устройства. Это можно реализовать через бит 0 параметра ConfigData в файле FTDIBUS.INF. Драйвер может игнорировать запросы записи в EEPROM если установлен бит 0 в ConfigData, как показано в следующем фрагменте INF-файла:
[FtdiBus.NT.HW]
AddReg=FtdiBus.NT.HW.AddReg
[FtdiBus.NTamd64.HW]
AddReg=FtdiBus.NT.HW.AddReg
[FtdiBus.NT.HW.AddReg]
HKR,,"ConfigData",0x00010001,1
Соответствующий ключ реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\USB\{VID, PID устройства
и интерфейс}\{серийный номер}\DeviceParameters\ConfigData
USB Selective Suspend. Драйвер CDM поддерживает функцию выборочной приостановки USB Selective Suspend, что позволяет системе приостанавливать устройства, которые не используются, снижая тем самым общее потребление энергии. Функция USB Selective Suspend управляется битом 5 параметра ConfigData и значением SSIdleTimeout (в миллисекундах) файла FTDIBUS.INF.
Чтобы разрешить Selective Suspend, для стандартной установки в FTDIBUS.INF могут быть добавлены следующие секции:
[FtdiBus.NT.HW]
AddReg=FtdiBus.NT.HW.AddReg
[FtdiBus.NTamd64.HW]
AddReg=FtdiBus.NT.HW.AddReg
[FtdiBus.NT.HW.AddReg]
HKR,,"ConfigData",0x00010001,0x20
HKR,,"SSIdleTimeout",0x00010001,10000
Показанный фрагмент разрешает функцию Selective Suspend, и устанавливает значение таймаута ожидания (Idle Timeout) на 10 секунд.
Соответствующий ключ реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters
Примечание: если функция Selective Suspend для драйвера установлена на слое шины (bus layer), то её не нужно устанавливать на слое порта (port layer) см. ниже описание USB Selective Suspend для порта в разделе "Опции FTDIPORT.INF".
[Опции FTDIPORT.INF]
Многие опции конфигурации порта доступны для изменения через файл FTDIPORT.INF. В последующих секциях описываются эти опции и методы их настройки.
Псевдонимы для скоростей. Устройства FTDI могут поддерживать нестандартные скорости. Необязательно для этого устанавливать псевдонимы скоростей (функция Aliasing Baud Rates), однако в случаях, когда программа приложения попытается установить стандартную скорость, и нужна скорость нестандартная, это можно организовать псевдонимами нестандартных скоростей.
Скорости вычисляются с помощью коэффициента деления скорости (Baud rate divisor). Файл FTDIPORT.INF содержит записи, которые используются в качестве делителей для стандартных скоростей. Путем изменения этих значения можно задать псевдонимы (alias) стандартных скоростей с нестандартными значениями - например, путем замены 115 килобод на 512 килобод. Пользователи тогда должны установить устройство на работу со скоростью 512k Baud путем установки последовательного USB COM-порта на скорость 115k Baud.
Процедура вычисления коэффициентов деления для микросхем FT232R, FT2232 и FT232B описана в апноуте AN232B-05 [7]. Микросхема FT8U232AM поддерживает только следующие коэффициенты: 0, 0.5, 0.25 и 0.125. Эти значения можно конфигурировать по таблице, где скорость задается двумя элементами настройки.
Ниже приведен кусок файла FTDIPORT.INF, где дан пример таблицы Baud rate для стандартных скоростей микросхемы FT8U232AM. Обратите внимание, что таблица Baud rate представлена в INF-файле одной строкой.
В случае устройств FT232R, FT2232 и FT232B поддерживаются коэффициенты 0, 0.5, 0.25, 0.125, 0.375, 0.625, 0.75 и 0.875. Это потребует расширения таблицы Baud rate, где каждая скорость настраивается 4 элементами. В примере ниже показана таблица Baud rate для стандартных скоростей. Важно помнить, что здесь таблица скоростей занимает в INF-файле также одну строку.
Таблица скоростей, используемая каждым устройством, находится в реестре в разделе:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
Имейте в виду, что таблицу из 4 элементов на скорость нельзя использовать для коэффициентов деления устройств FT8U232AM. Таблица из двух элементов будет работать со всеми устройствами.
Полное объяснение принципа вычисления коэффициентов для нестандартных скоростей, и как их размещать в таблице Baud rate, см. в апноуте AN232B-05 [7].
Изменение Default USB Transfer Size. Размер пакета по умолчанию (default USB transfer size) может быть установлен через элемент ConfigData файла FTDIPORT.INF. Это тот же элемент, который содержит таблицу Baud rate.
Эти опции могут быть установлены в первом слове (DWORD) таблицы, ниже это показано жирным шрифтом.
В этом элементе байты расположены в обратном порядке, когда младший байт идет первым. В примере выше параметр DWORD имеет значение 0x3F3F0001. Биты в слове имеют следующее значение:
Биты 16..23: Receive transfer size (размер буфера приема) Биты 24..31: Transmit transfer size (размер буфера передачи)
Этот пример разрешает для каждого параметра значение 3F, что является стандартным значением по умолчанию. Размер пакета по умолчанию в байтах можно вычислить по формуле:
Transfer size (в байтах) = (значение Transfer size + 1) * 0x40
Размеры USB transfer, используемые устройством, находятся в следующей ветке реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
Custom Default Latency Timer Value. Таймер латентности (Latency Timer) это форма механизма таймаута для чтения буфера устройств FTDI. Когда в устройство посылается инструкция FT_Read, данные не посылаются обратно хосту PC, пока не будет прочитано запрошенное количество байт. Если запрошенное количество байт не поступило, устройство не передает данные обратно.
Таймер латентности отсчитывает задержку от момента, когда последние данные были отправлены хосту PC. Если задержка таймера латентности истекла, устройство отправит хосту PC доступное количество байт, даже если это количество меньше запрошенного. После этого таймер латентности сбрасывается и отсчет начинается заново.
Значение по умолчанию для Latency Timer составляет 16 мс. Это значение можно настроить добавлением или изменением следующих элементов FTDIPORT.INF, что нужно сделать перед установкой драйвера для устройства.
[FtdiPort.NT.HW.AddReg]
HKR,,"LatencyTimer",0x00010001,50
В этом примере значение по умолчанию для таймера латентности устанавливается на 50 мс. Допустимый диапазон 1 .. 255 мс, однако 1 мс использовать не рекомендуется, потому что эта длительность совпадает с длительностью фрейма USB.
Таймер латентности хранится в следующей ветке реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\LatencyTimer
Подробнее про таймер латентности см. апноут AN232B-04 [8].
Разрешение режима эмуляции модема. Режим эмуляции модема позволяет передавать двоичные данные через два (или большее количество) проводных интерфейса с полным рукопожатием (handshaking) и сигнализацией управления модемом, что дает возможность реализовать соединения PPP. Возможные приложения - кабели данных мобильных телефонов, линки с радиочастотными устройствами.
Добавление следующих записей в файл FTDIPORT.INF перед установкой драйвера VCP разрешает режим эмуляции модема:
[FtdiPort.NT.HW.AddReg]
HKR,,"EmulationMode",0x00010001,0x0000nnnn
Это создаст следующий ключ реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\EmulationMode
Подробнее про режим эмуляции модема драйвера VCP см. апноут AN232B-09 [9].
Буферизированные записи. Бывает, что разработчик аппаратуры не может полностью управлять поведением программного обеспечения. Это может привести к проблемам при миграции с RS232 на USB, поскольку приложения, записывающие данные в RS232, обычно делают это по одному байту, что негативно влияет на производительность USB. Из-за пакетной природы USB было бы намного эффективнее передавать данные большими кусками. Этого можно достичь буферизацией данных в приложении.
Если разработчик не управляет приложением, чтобы разрешить в нем буферизацию данных, драйвер FTDI предоставляет опцию буферизации данных для приложения в драйвере, перед тем как данные будут отправлены через USB в устройство.
Опция буферизации записи (Buffered Writes) разрешается битом 10 первого DWORD записи ConfigData в файле FTDIPORT.INF. Это та же самая запись, которая содержит таблицу скоростей Baud rate.
В следующем примере фрагмента INF-файла первое DWORD показано жирным шрифтом:
Обратите внимание, что в записи ConfigData порядок следования байт обратный, таким образом здесь показано значение DWORD 0x3F3F00 01. С запрещенной функцией Buffered Writes значение DWORD будет 0x3F3F0001. С разрешенной функцией Buffered Writes значение DWORD будет 0x3F3F0401.
В дополнение к разрешению буферизации записи в ConfigData, в файле FTDIPORT.INF должны быть настроены некоторые параметры для управления поведением драйвера:
[FtdiPort.NT.HW.AddReg]
HKR,,"WriteBufferSize",0x00010001,4096
HKR,,"WriteBufferThreshold",0x00010001,20
HKR,,"WriteLatency",0x00010001,6
Эти значения хранятся в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters
Miscellaneous Options. На странице дополнительных свойств COM-порта можно настроить различные опции, что также доступно редактированием секций INF-файла:
Функция Serial Enumerator предназначена для детектирования устройств с поддержкой Plug-and-Play (таких как мышь с последовательным интерфейсом или модем), которые подключены к порту USB.
Опция Serial Enumerator управляется следующей записью в файле FTDIPORT.INF:
Если это разрешено, то опция serial printer запретит таймауты, связанные с большой задержкой, связанной с загрузкой бумаги в принтер. Опция Serial управляется битом 7 байта 0 первого слова DWORD записи ConfigData файла FTDIPORT.INF. Это та же самая запись, которая содержит таблицу скоростей Baud rate.
Ниже показан фрагмент INF-файла, где жирным шрифтом показано соответствующее слово DWORD.
DWORD задается последовательностью байт, указанных в обратном порядке (младший байт идет первым). Когда опция Serial Printer запрещена, значение DWORD будет 0x3F3F0001, а когда разрешена, то 0x3F3F0081.
Соответствующие значения хранятся в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
Эта опция может использоваться, чтобы помочь в решении проблем при переходе в режим гибернации (hibernate) или приостановки (suspend). Любые запросы, полученные драйвером, будут отменяться, когда осуществляется переход в hibernate или suspend.
Опция Cancel If Power Off управляется битом 6 байта 0 первого слова DWORD записи ConfigData файла FTDIPORT.INF. Это та же самая запись, которая содержит таблицу скоростей Baud rate.
Ниже показан фрагмент INF-файла, где жирным шрифтом показано соответствующее слово DWORD.
DWORD задается последовательностью байт, указанных в обратном порядке (младший байт идет первым). Когда опция запрещена, значение DWORD будет 0x3F3F0001, а когда разрешена, то 0x3F3F0041.
Соответствующие значения хранятся в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
Опция Event On Surprise Removal обычно остается не выбранной. Если приложение установит SERIAL_EV_EVENT2 (см. NTDDSER.H) в битовой маске событий, и эта функция разрешена, то драйвер будет сигнализировать о событии извлечении устройства (surprise removal).
Опция Event On Surprise Removal управляется битом 5 байта 0 первого слова DWORD записи ConfigData файла FTDIPORT.INF. Это та же самая запись, которая содержит таблицу скоростей Baud rate.
Ниже показан фрагмент INF-файла, где жирным шрифтом показано соответствующее слово DWORD.
DWORD задается последовательностью байт, указанных в обратном порядке (младший байт идет первым). Когда опция запрещена, значение DWORD будет 0x3F3F0001, а когда разрешена, то 0x3F3F0021.
Соответствующие значения хранятся в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
Выбор установленной опции Set RTS On Close установит сигнал RTS при закрытии порта. Опция Set RTS On Close управляется битом 3 байта 0 первого слова DWORD записи ConfigData файла FTDIPORT.INF. Это та же самая запись, которая содержит таблицу скоростей Baud rate.
Ниже показан фрагмент INF-файла, где жирным шрифтом показано соответствующее слово DWORD.
DWORD задается последовательностью байт, указанных в обратном порядке (младший байт идет первым). Когда опция запрещена, значение DWORD будет 0x3F3F0001, а когда разрешена, то 0x3F3F0009.
Соответствующие значения хранятся в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
Эта опция используется для установки состояния сигналов управления модемом DTR и RTS в момент запуска (startup). При нормальном функционировании сигналы управления модемом в момент запуска соответствуют поведению традиционного (legacy) порта. Однако из-за отличия интервалов времени между традиционным COM-портом и виртуальным COM-портом, может появиться выброс на одном из этих сигналов традиционного порта при установке сигнала виртуального COM-порта. Устройства (например модемы), которые мониторят эти сигналы, могут перейти в неправильное состояние, когда происходит разъединение и повторное соединение USB.
Обратите внимание, что если выбрана опция "Serial Enumerator" на странице свойств, то последовательность энумерации приведет к тому, что сигналы управления модемом будут изменять свое состояние в момент запуска. Таким образом, если необходимо выбрать опцию "Disable Modem Ctrl At Startup", то скорее всего опция "Serial Enumerator" также должна быть не выбранной.
Опция Disable Modem Ctrl At Startup управляется битом 1 байта 1 первого слова DWORD записи ConfigData файла FTDIPORT.INF. Это та же самая запись, которая содержит таблицу скоростей Baud rate.
Ниже показан фрагмент INF-файла, где жирным шрифтом показано соответствующее слово DWORD.
DWORD задается последовательностью байт, указанных в обратном порядке (младший байт идет первым). Когда опция запрещена, значение DWORD будет 0x3F3F0001, а когда разрешена, то 0x3F3F0201.
Альтернативно настройка по умолчанию может быть отменена прямым редактированием ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
Обратите внимание, что если DisableModemControlSignalsAtStartup установлено в TRUE путем редактирования файла установки или редактированием реестра, то следует учитывать те же замечания, которые действуют для параметра "Serial Enumerator" (см. выше). Таким образом, может понадобиться удалить ссылки на "serenum" в "UpperFilters" секций AddReg файла установки, и ключ UpperFilters в записи реестра виртуального COM-порта.
Изменение приоритета драйвера. Для некоторых приложений (например для передачи звуковых данных), можно поменять уровень приоритета драйвера, чтобы улучшить производительность обмена данными. Значения InPriorityLevel и OutPriorityLevel можно установить в пределах от 1 до 31, значение по умолчанию для обоих параметров равно 16.
Опция установки пользовательского приоритета драйвера разрешается битом 11 первого слова DWORD записи ConfigData в файле FTDIPORT.INF. Это та же самая записи, которая содержит таблицу Baud.
Ниже показан фрагмент INF-файла, где жирным шрифтом показано соответствующее слово DWORD.
DWORD задается последовательностью байт, указанных в обратном порядке (младший байт идет первым). Когда опция запрещена, значение DWORD будет 0x3F3F0001, а когда разрешена, то 0x3F3F0801.
Соответствующие значения хранятся в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
В дополнение к разрешению опции приоритета драйвера в записи ConfigData, также для необходимого поведения драйвера должны быть установлены параметры приоритетов в файле FTDIPORT.INF:
[FtdiPort.NT.HW.AddReg]
HKR,,"InPriorityLevel",0x00010001,16
HKR,,"OutPriorityLevel",0x00010001,16
[FtdiPort.NTamd64.HW.AddReg]
HKR,,"InPriorityLevel",0x00010001,16
HKR,,"OutPriorityLevel",0x00010001,16
Эти значения хранятся в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters
Имейте в виду, что редко требуется менять приоритет драйвера, и слишком высокий установленный приоритет может привести к зависанию компьютера. Если Вы встретились с проблемами при изменении приоритета драйвера, обратитесь к службе поддержки FTDI.
Указание начальной точки выделения номеров COM-порта. Начиная с версии драйвера CDM 2.08.02 применяется одинаковая процедура установки для всех устройств FTDI, и она может принимать опциональный параметр для начального индекса выделение номеров для виртуальных COM-портов. Поведение по умолчанию для драйвера CDM такое, что номера портов начинают выделяться от COM3. Если номер COM-порта уже используется, то будет выделен следующий доступный номер COM-порта. Начальный индекс задается для определенной комбинации идентификаторов VID и PID, и эта настройка может быть добавлена в файл FTDIPORT.INF следующей записью:
Также в секцию [FtdiPort.NT.AddService] должна быть добавлена следующая строка:
AddReg=FtdiPort.NT.AddService.AddReg
В этом примере задано, что устройства с VID 0x0403 и PID 0x6001 будут выделять номера COM-портов начиная с COM14. В примере идентификаторы VID и PID, а также начальный номер порта 14 показаны жирным шрифтом. Имейте в виду, что если подключаемое устройство FTDI настроено на использование других идентификаторов VID и PID, то в записи должны использоваться реальные идентификаторы устройства.
USB Selective Suspend. Эта опция (её назначение было описано выше) управляется битом 4 байта 1 первого DWORD записи ConfigData файла FTDIPORT.INF. то та же самая запись, которая содержит таблицу скоростей Baud rate.
Ниже показан фрагмент INF-файла, где жирным шрифтом показано соответствующее слово DWORD.
DWORD задается последовательностью байт, указанных в обратном порядке (младший байт идет первым). Когда опция запрещена, значение DWORD будет 0x3F3F0001, а когда разрешена, то 0x3F3F1001.
Соответствующие значения хранятся в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters\ConfigData
Значение таймаута может быть установлено следующей записью файла FTDIPORT.INF:
[FtdiPort.NT.HW.AddReg]
HKR,,"SSIdleTimeout",0x00010001,10000
В этом фрагменте INF-файла установлено значение Idle Timeout на 10 секунд (10000 мс). Значение хранится в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\FTDIBUS\{VID, PID устройства
и серийный номер}\0000\Device Parameters
Примечание: если устанавливается Selective Suspend на слое порта (в фале FTDIPORT.INF), то на слое шины этот параметр устанавливать не надо (в файле FTDIBUS.INF).
[Системные опции]
Игнорирование аппаратного серийного номера. Если устройства имеют одинаковые VID (vendor ID, идентификатор производителя) и PID (product ID, идентификатор изделия), но имеют разные серийные номера, то система нормально будет различать их как различные устройства. Тогда при установке для каждого устройства будут создаваться в реестре отдельные записи.
Можно отменить это поведение системы, чтобы серийный номер устройства игнорировался, тогда все устройства с одинаковым VID и PID, подключенные к одному и тому же порту USB, будут определяться как одинаковые устройства. В этом случае номера COM-портов будут назначаться на основе номера порта USB, к которому подключено устройство. Игнорирование серийного номера достигается добавлением в реестр параметра типа REG_BINARY с именем IgnoreHWSerNum, и установкой его значения в 01.
Это значение хранится в следующей ветви реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags\IgnoreHWSerNum{VID,
PID устройства и интерфейс}
Для идентификаторов устройства FTDI по умолчанию (VID 0x0403, PID 0x6001) добавьте значение 01 типа REG_BINARY в ветвь реестра:
Поскольку устройство FT2232 также использует драйвер композитного устройства Windows (composite device driver), требуется добавить дополнительную запись IgnoreHWSerNum, чтобы Windows не создавала дополнительные записи реестра для драйвера композитного устройства:
Теперь система может обрабатывать подключение устройств с одинаковыми VID и PID, но разными серийными номерами, как одинаковые устройства, и драйверы будут установлены только для первого подключенного устройства. Таким образом, в реестре будет создана только одна соответствующая запись. Если это устройство будет подключено в другой порт USB, то для этого порта драйвер будет установлен заново и в реестр будет добавлена еще одна запись.
Обратите внимание, что IgnoreHWSerNum нельзя настроить в FTDIBUS.INF или FTDIPORT.INF, это должно быть сделано путем редактирования реестра вручную, или с помощью утилиты инсталляции ПЕРЕД установкой драйвера (т. е. до первого физического подключения устройства USB к компьютеру).
Фантомные устройства. Устройства, которые когда-то ранее были установлены в системе, но в настоящий момент недоступные, называются "фантомными" (phantom devices). Эти устройства обычно не отображаются в Менеджере Устройств операционной системы Windows, но они будут видны после того, как подключатся. Это позволяет изменять свойства устройства или деинсталлировать его через Менеджер Устройств даже когда устройство физически не подключено к компьютеру PC.
Чтобы фантомные устройства отображались в Менеджере Устройств, нужно установить новую системную переменную. Откройте Панель Управления (Control Panel) -> Система (System), и выберите закладку Дополнительно (Advanced, дополнительные параметры системы) и кликните на кнопку "Переменные среды..." (Environment Variables). В секции "Системные переменные" (System Variables; ВНИМАНИЕ: не в секции переменных среды пользователя!), кликните кнопку "Создать..." (New...)", чтобы отобразилось окно редактирования новой системной переменной окружения. Введите имя новой переменной DevMgr_Show_NonPresent_Devices и установите её значение 1:
Откройте Менеджер Устройств (Панель Управления -> Система), выберите закладку "Оборудование" (Hardware), и кликните на кнопку "Диспетчер Устройств" (Device Manager) и выберите в меню Вид -> Показать скрытые устройства (View -> Show Hidden Devices). После этого Менеджер Устройств покажет все скрытые и фантомные устройства, зарегистрированные на этом компьютере PC.
Рис. 7.2. Диспетчер Устройств показывает "фантомные" устройства USB.
[Поддержка других языков]
Foreign Language Support - эта функция реализована в DLL, чтобы свойства VCP COM-порта корректно отображались на языках, отличающихся от English. Чтобы добавить в DLL поддержку нового языка, обратитесь в службу поддержки FTDI.
[Co-Installer]
Устройства FT2232 и FT4232 являются композитными устройствами USB, т. е. они могут предоставить два или большее количество COM-портов для операционной системы. Чтобы гарантировать, что номера COM-портов этих устройств выделялись операционной системой Windows в правильном порядке (например, port A выделялся перед port B), используется co-installer. Это указывается в следующих секциях файла FTDIPORT.INF:
Дополнительно начиная с версии CDM 2.08.02 драйвера co-installer может задавать начальный номер выделения COM-портов для всех устройств FTDI (как это делается, см. выше секцию "Указание начальной точки выделения номеров COM-порта").
[Переименование файлов драйвера]
Есть возможность переименовать файлы драйвера, чтобы создать уникальный пакет драйверов, однако это не рекомендуется. Чтобы переименование в пакете драйверов работало корректно, в INF-файлах должны быть соответствующим образом изменены на новые все ссылки на имена файлов. FTDI не поддерживает пользователей, которые переименовывают файлы драйверов.
Любые изменения в сертифицированном WHQL пакете драйверов, включая модификации имен файлов, приведут к потере сертификации.
[Подготовка к установке драйвера]
Традиционно на компьютере с операционной системой Windows для установки драйверов новых устройств используется Мастер установки нового оборудования (Found New Hardware Wizard). Microsoft постаралась организовать процесс установки таким образом, чтобы конечному пользователю требовались минимальные знания, чтобы установить драйвер. Дополнительно многие производители требуют, чтобы перед первым подключением нового устройства к компьютеру сначала на него устанавливался пакет драйвера.
Microsoft решает эту проблему с помощью инструментов создания установочного пакета драйверов (driver installation tools), так называемых Driver Install Frameworks (DIFx). Простейший инструмент для установки драйвера называется Driver Package Installer (DPInst). Пакеты драйверов FTDI для VCP версии 1.00.2176 и более свежих совместимы с DPInst.
Для совместимости с DPInst пакет драйвера должен быть сертифицирован Microsoft WHQL и удовлетворять определенным требованиям, обозначенным в документации Microsoft. Стандартный пакет драйвера FTDI CDM удовлетворяет этим требованиям, если он сертифицирован, как например CDM 2.02.04. Будучи собранным с DPInst, пакет драйвера обычно содержит следующие файлы:
Здесь директория i386 содержит файлы 32-битного драйвера:
И директория amd64 содержит файлы 64-битного драйвера:
Чтобы использовать DPInst для установки драйвера, нужно запустить DPInst.exe. Есть две версии DPInst, 32-битная версия для установки 32-битного драйвера, и 64-битная версия для установки 64-битного драйвера. Автоматизированный установщик определит, какая версия DPInst требуется, чтобы успешно установить пакет драйвера.
Если требуется пользовательская (не от FTDI) комбинация идентификаторов VID и PID устройства, FTDI может предоставить реселлеру права для пользователей с учетной записью WinQual. Подробности по получению прав / обновлению сертификации WHQL драйвера можно найти в апноуте [4]. Microsoft берет небольшую плату за услугу сертификации. Чтобы узнать больше по использованию DPInst вместе с драйверами FTDI, см. апноут AN232R-03 [10].
Примечание: на момент перевода [1] (190416) драйвер для всех видов операционных систем Windows поставлялся как единый ZIP-архив CDM v2.12.28 WHQL Certified.zip, в нем находятся драйверы VCP и D2XX, 32-битная и 64-битная версии.
[Удаление/деинсталляция драйверов]
С выходом релиза Microsoft Windows Vista деинсталлятор FTDI стал бесполезным из-за технологии Windows Resource Protection, которая не дает исполняемому коду деинсталлятора удалить файлы драйвера и связанные с драйвером записи в реестре. Vista позволяет это делать только самой системе, только ей разрешено модифицировать файлы и значения в реестре мест, которые использует драйвер.
Соответственно должен использоваться новый метод деинсталляции. Устройства могут быть удалены с использованием Менеджера Устройств путем правого клика на устройстве и выбора в контекстном меню "Удалить" (Uninstall). Это действие удалит связанные записи в реестре только для этого устройства. Vista предоставляет автоматический метод удаления файлов драйвера установкой галочки "Delete the driver software for this device" диалога деинсталляции.
Рис. 12.1. Подтверждение удаления устройства.
Некоторые моменты, касающиеся нового метода деинсталляции:
• В случае устройств FT2232 также устанавливается композитное устройство. Оно также может быть удалено правым кликом и выбором "Uninstall". Однако здесь нет опции удаления файлов драйвера, потому что композитное устройство это стандартный драйвер Windows. • Если был установлен драйвер VCP, то драйвер COM-порта должен быть удален перед драйвером шины. Если сначала удалить драйвер шины, то COM-порт больше не появится в Менеджере Устройств. • Если файлы драйвера были удалены, когда другие установленные устройства все еще нуждаются в них, то эти устройства не будут корректно работать. Подобную ситуацию ошибочного удаления можно исправить путем правого клика на устройстве и выбора "Переустановить драйвер" (Reinstall Driver), это заменит недостающие файлы. • Если деинсталлируемое устройство не подключено к компьютеру PC, то оно все еще может быть уделено, если настроить Менеджер Устройств на отображение фантомных устройств (как это делается, см. выше в секции "Фантомные устройства"). Это также позволит деинсталлировать виртуальный COM-порт, если предварительно был удален слой драйвера шины.
У операционных систем Windows 2000, Windows XP и Windows Server 2003 нет галочки для удаления файлов драйвера, поэтому файлы драйвера и OEM INF-файлы и PNF-файлы должны быть удалены вручную, или с помощью специально написанного приложения. На этих операционных системах все еще может использоваться утилита деинсталляции FTClean [11] (FTDI Uninstall Utility).
Примечание переводчика: на современных операционных системах Windows 7 и Windows 10 нет необходимости в специальной установке и удалении драйвера FTDI, потому что драйвер встроен в операционную систему изначально. Это может понадобиться только в случае появления важного обновления драйвера FTDI, или когда необходимо обеспечить наличие драйвера для пользовательского устройства со своими собственными идентификаторами VID и PID, отличающимися от VID и PID по умолчанию.
[Ссылки]
1. AN_107 Advanced Driver Options site:ftdichip.com. 2. MProg user manual FTDI Knowledgebase site:ftdichip.com. 3. TN_102 OEM Technical Support Requirements For FTDI Products site:ftdichip.com. 4. AN_101 Submitting Modified FTDI Drivers for Windows Hardware Certification site:ftdichip.com. 5. FTDI Utilities site:ftdichip.com. 6. AN232B-07 Configuring FTDI's VCP Drivers to use Location IDs site:ftdichip.com. 7. Конфигурирование скорости микросхем FTDI. 8. AN232B-04 Data Throughput, Latency and Handshaking site:ftdichip.com. 9. AN232B-09 Using the Modem Emulation Mode in FTDI's VCP Driver site:ftdichip.com. 10. AN232R-03 FTDI Windows Driver Pre-Installation site:ftdichip.com. 11. FTClean site:ftdichip.com.