Организация обмена данными по шине USB в операционной системе Windows XP с применением электронных компонентов фирмы FTDI

ОРГАНИЗАЦИЯ ОБМЕНА ДАННЫМИ ПО ШИНЕ USB В ОПЕРАЦИОННОЙ СИСТЕМЕ WINDOWS XP С ПРИМЕНЕНИЕМ ЭЛЕКТРОННЫХ КОМПОНЕНТОВ ФИРМЫ FTDI А.Ю. Гришенцев, Е.Н. Петрова Научный руководитель - д.т.н., профессор К.Г. Коротков

Данная статья посвящена организации обмена данными между персональным компьютером и внешним устройством по шине USB на базе электронных компонентов фирмы FTDI. Рассмотрена схема установки драйверов и концепция реализации программной поддержки.

Введение

Применение аппаратно-программных комплексов в современных условиях подразумевает использование новых стандартных протоколов обмена между ПК (персональным компьютером) и внешним ЭУ (электронным устройством). Такими протоколами на сегодняшний день является FireWire, называемый также 1394, и USB. В данной статье рассмотрен вопрос программной реализации обмена данными между ПК и ЭУ с применением электронных компонентов фирмы FTDI (Future Technology Devices International Ltd.), поддерживающими стандарт USB2.0.

Выбор протокола обмена

Последовательные шины позволяют объединять множество устройств, используя всего 1-2 пары проводов [1]. Функциональные возможности этих шин гораздо шире, чем у традиционных интерфейсов локальных сетей, - USB и FireWire способны передавать изохронный трафик аудио- и видеоданных. Последовательные шины по своей организации сильно отличаются от параллельных. В последовательных шинах нет отдельных линий для данных, адреса и управления - все протокольные функции приходится выполнять, пользуясь одной или двумя (в FireWire) парами сигнальных проводов. Это накладывает отпечаток на построение шинного протокола, который в последовательных шинах строится на основе пересылок пакетов - определенным образом организованных цепочек бит.

Наибольшую популярность имеют шины USB и FireWire, хотя последняя пока что в PC-совместимых компьютерах используется не повсеместно. Последовательные шины FireWire и USB, имея общие черты, являются, тем не менее, различными технологиями. Обе шины обеспечивают простое подключение большого числа ЭУ (127 для USB и 63 для FireWire), допуская коммутации и включение/выключение устройств при работающей системе. По структуре топология обеих шин достаточно близка, но FireWire допускает большую свободу и пространственную протяженность. Хабы USB входят в состав многих устройств, и для пользователя их присутствие зачастую незаметно. Обе шины имеют линии питания устройств, но допустимая мощность для FireWire значительно выше. Обе шины поддерживают технологию РпР (автоматическое конфигурирование при включении/выключении) и снимают проблему дефицита адресов, каналов DMA и прерываний.

Шина USB ориентирована на периферийные устройства, подключаемые к PC. Изохронные передачи USB позволяют передавать цифровые аудиосигналы, а шина USB 2.0 способна нести и видеоданные. Все передачи управляются централизованно, и PC является необходимым управляющим узлом, находящимся в корне древовидной структуры шины. Адаптер USB входит в состав всех современных чипсетов системных плат.

Шина FireWire ориентирована на устройства бытовой электроники, которые с ее помощью могут быть объединены в единую домашнюю сеть. К этой сети может быть

подключен компьютер, и даже не один. Принципиальным преимуществом шины 1394 является отсутствие необходимости в специальном контроллере шины (компьютере). Любое передающее устройство может получить полосу изохронного трафика и начинать передачу по сигналу автономного или дистанционного управления - приемники «услышат» эту информацию. При наличии контроллера соответствующее ПО может управлять работой устройств, реализуя, например, цифровую студию нелинейного видеомонтажа или снабжая требуемыми мультимедийными данными всех заинтересованных потребителей информации.

Для связи ПК и ЭУ эффективнее использовать шину USB, так как практически все ПК, поступающие в продажу, оборудованы шиной USB, в то время как шина FireWire на территории России является редкостью в стандартной комплектации ПК.

Шина USB

Шина USB (Universal Serial Bus - универсальная последовательная шина) появилась по компьютерным меркам довольно давно - версия первого утвержденного варианта стандарта USB1.0 датируется 15 января 1996 года. Разработка стандарта была инициирована весьма авторитетными фирмами - Intel, DEC, IBM, NEC, Northen Telecom и Compaq.

Основная цель стандарта, поставленная перед его разработчиками - создать реальную возможность пользователям работать в режиме Plug&Play с периферийными устройствами. Это означает, что должно быть предусмотрено подключение устройства к работающему компьютеру, автоматическое распознавание его немедленно после подключения и последующей установки соответствующих драйверов. Кроме этого, питание маломощных устройств желательно подавать с самой шины. Скорость шины должна быть достаточной для подавляющего большинства периферийных устройств. Попутно решается историческая проблема нехватки ресурсов на внутренних шинах IBM PC-совместимого компьютера - контроллер USB занимает только одно прерывание независимо от количества подключенных к шине устройств. Технические характеристики:

• низкая скорость LS (Low Speed USB1.0) - 1,5 Мбит/с;

• полная скорость FS (Full speed USB1.1) - 12 Мбит/с;

• высокая скорость HS (High Speed USB2.0) - 480 Мбит/с;

• максимальное количество подключенных устройств (включая хабы) - 127;

• напряжение питания для периферийных устройств - 5 В;

• максимальный ток потребления на одно устройство - 100 мА;

• допустимый ток потребления от ПК по шине USB - 500 мА;

• шина с использованием промежуточных хабов позволяет соединять устройства, удаленные от компьютера на расстояние до 25 м.

Кабели и разъемы:

Сигналы USB передаются по 4-х проводному кабелю. Сечение концевых разъемов кабеля приведены на рис. 1. Табл. 1 содержит пояснения к назначению использования контактов разъемов и проводов кабеля. Здесь GND - цепь «корпуса» для питания периферийных устройств, VBus - +5V также для цепей питания. Шина D+ предназначена для передачи данных по шине, а шина D - для приема данных.

Кабель для поддержки полной скорости шины (full-speed) выполняется как витая пара, защищается экраном и может также использоваться для работы в режиме минимальной скорости (low-speed). Кабель для работы только на минимальной скорости (например, для подключения мыши) может быть любым и неэкранированным.

A R

Рис. 1. Сечения разъемов ивВ кабеля. А - предназначены только для подключения к источнику, т.е. к компьютеру или хабу; В - предназначены только для подключения

к периферийному устройству

Номер контакта Назначение Цвет провода

1 V BUS Красный

2 D- Белый

3 D+ Зеленый

4 GND Черный

Оплетка Экран Оплетка

Таблица 1. Назначение контактов и проводов USB кабеля

Выбор микросхемы

Современный рынок микросхем, поддерживающих обмен данными по шине USB, достаточно обширен. На территории России доступны продукты производства фирм Atmel, FTDI, Cypress, Intel, National Semiconductor и др. Выбор в пользу микросхемы FT232R фирмы FTDI был сделан по следующим причинам:

• возможность перепрограммирования номеров PID и VID, что позволяет избежать конфликтов при использовании микросхемы в различных устройствах;

• полная поддержка протокола обмена по стандарту USB2.0;

• библиотека функций для программной реализации обмена данными со стороны ПК удобна и стабильна в своей работе;

• наличие готовых легко настраиваемых драйверов;

• полная информационная поддержка на сайте фирмы FTDI [4].

Установка драйверов FT232R

В операционной системе WindowsXP SP1 встроен драйвер VCP (Virtual COM Port) для FT232R, устанавливаемый по умолчанию автоматически, для значений VID 0403 и PID 6001, где VID-Vendor ID, PID-Product ID - код производителя и микросхемы соответственно. В случае автоматической установки драйвера VCP с ЭУ можно работать как с COM-портом, и в этом случае все преимущества скоростного обмена данными по протоколу USB2.0 не используются. Кроме того, наблюдается тенденция сокращения использования COM-портов в ПК, в большинстве современных ноутбуков COM-порт отсутствует. Такая ситуация на рынке говорит о возможном исключении в ближайшем будущем программной поддержки COM-портов. Поэтому целесообразно устанавливать драйвер Ftd2xx USB2.0 устройства, предоставляемый фирмой FTDI [4]. Для этого необходимо удалить драйвер VCP, используя специальную утилиту FTDIUNIN.EXE, ко-

торая входит в состав драйвера Ftd2xx. Делается это следующим образом: файл FTDIUNIN.EXE копируется в папку с драйвером VCP (обычно это C:\WINDOWS\system32) и запускается; далее необходимо выключить и включить кабель USB устройства для повторной инициализации, и в появившемся окне установки драйвера указать папку, в которой находиться драйвер Ftd2xx. В WindowsXP SP2 данная проблема устранена, и при первом включении устройства пользователь может сразу выбрать нужный драйвер.

При установке Ftd2xx выдается сообщение о том, что драйвер не имеет сертификата, это сообщение вызвано тем, что фирма Microsoft не включила в реестр WindowsXP драйвер Ftd2xx. Данное сообщение можно игнорировать, выбрав кнопку продолжения инсталляции.

Программирование FT232R

Для предотвращения конфликтных ситуаций между устройствами, использующими микросхемы FTDI, подключенными к одному ПК, и их драйверами необходимо перепрограммировать микросхему, точнее, специально выделенную память EEPROM, и редактировать драйвер.

Перепрограммирование микросхемы сводится к изменению кода PID со значения 6001 на любое другое, код VID менять не рекомендуется [4]. Также можно указать имя производителя ЭУ и название устройства. Каждой микросхеме FT232R присваивается уникальный серийный номер - автоматически или заданный пользователем. Наиболее удобно перепрограммировать микросхему с помощью специальной программы MProg с сайта производителя, там же можно найти исчерпывающую справку.

После перепрограммирования микросхемы необходимо редактировать драйвер, изменив код PID в файлах FTD2XXUN.INI и ftd2xx.inf на новый. Для корректной работы множественных FTDI устройств с одним ПК и исключения перезаписи драйверов поверх друг друга рекомендуется изменить имена следующих файлов: FTD2XX.sys, FTD2XX.inf, FTD2XX.dll, FTD2XXUN.ini. Все изменения имен необходимо отразить в файлах FTD2XXUN.INI и ftd2xx.inf, заменив соответствующие. После этих процедур микросхема готова к дальнейшей работе.

Программная реализация обмена по шине USB с помощью С++

Для работы с USB FTDI устройством можно использовать либо библиотеку функций API [5, 6], либо библиотеку, разработанную специалистами FTDI - второе предпочтительнее. Библиотека FTDI [4] имеет группу функций для чтения и программирования EEPROM, а также обширную группу функций для отслеживания состояния USB устройства, организации и обмена данными. Обмен данными можно производить в синхронном (удобно для одиночных коротких пакетов) и асинхронном (для больших объемов данных) режимах. Скорость обмена выбирается из стандартного ряда от 300 до 921600 бод (бит/сек) либо задается произвольно в соответствии с стандартом USB2.0.

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

Важно заметить, что файл FTD2XX.lib, входящий в состав драйвера Ftd2xx, совместим с Visual Studio C++ и требует перекомпиляции для BCB (Borland C++ Builder) с помощью утилиты IMPLIB, входящей в состав BCB.

Заключение

Рассмотренный в статье подход к организации обмена по шине USB - далеко не единственный, но его применение обеспечивает стабильную работу устройств в соответствии со всеми современными стандартами. Организация обмена данными на базе микросхемы FT232R применена в ГРВ- и ИПЧ-оборудовании.

Литература

1. Колесниченко О.В., Шишигин И.В. Аппаратные средства персональных компьютеров. СПб: БХВ-Петербург, 2005. 1024 с.

2. Тук М. Аппаратные средства IBM PC: Энциклопедия. 2-е изд. СПб: Питер, 2001. 655 с.

3. http://www.usb.org

4. http://www.ftdichip.com

5. Агуров П.В. Практика программирования USB. СПб.: БХВ-Петербург, 2006. 624 с.

6. MSDN for Visual Studio .NET; Copyright 1987-2002 Microsoft Corporation.