USB — неизвестная последовательная шина

В Интернете обычно USB обозначается как неизвестная последовательная шина. Разобраться в деталях с USB, протеканием процессов при протоколе USB-передачи, дескрипторами, кодированием и декодированием данных, синхронизацией, скоростями передачи данных, необходимыми (а также и не­обязательными) драйверами на уровне операционной системы, со специфи­кациями ОНО, UHCI, EHCI или идентификатором производителя — не оче­видно для электронщика-любителя.

В противоположность приложениям для последовательного или параллель­ного интерфейса, USB-приложения не могут просто писать данные на раз­личные адреса ввода и вывода или читать с них. Для того чтобы приняться за USB-устройство, приложения должны сообщаться с драйвером (класса или устройства), который, в свою очередь, на более низком уровне сообщается с USB-драйверами управления сообщениями по линиям передачи данных USB. В устройстве должны быть реализованы протоколы, с помощью кото­рых компьютер может распознать и идентифицировать устройство, а также сообщаться с ним.

К счастью, многие производители USB-контроллеров уже сталкивались с этой проблемой. Поэтому в этой книге FTDI-контроллер можно увидеть да­лее с разводкой контактов последовательных сигнальных линий, как на рис. 2.3, или параллельным выводом данных (Bit Bang Mode), как на рис. 2.4.

clip_image002

Чтобы программировать управление USB, необходимо вставить штекер, установить FTDI-драйвер и запустить программы, например, в Visual Basic или Pascal (для профессионалов подойдет и С).

Интересно, что сами сигналы последовательного интерфейса FTDI-контрол-лера можно использовать также и для 8-битовой параллельной передачи дан­ных. Для этого должны быть смоделированы другие последовательные ин­терфейсы, такие как SPI или I2C.

Используемый в иллюстрациях USB-контроллер FTDI микросхемы FT232R рассчитан на USB 2.0.

Передача данных по USB происходит в пределах кадров размером в 1мс. Это легко представить как периодическое временное окно. Миллисекундный временной такт генерируется USB-хост-контроллером.

Внутри временного окна сообщения передаются пакетами данных.

Передача данных внутри миллисекундных кадров различна. При Low Speed скорость передачи данных составляет 1,5 Мбит/с, при Full Speed— до 12 Мбит/с, при High Speed (только USB 2.0)— до 480 Мбит/с. При High Speed для достижения высокой скорости передачи данных USB каждый кадр подразделяется на 8 кадров размером 125 мкс.

Типы передачи USB

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

Управляющая передача (Control-Transfer)

Управляющие передачи отсылаются обычно в оба направления, так что и от­правитель и получатель всегда могут быть уверены, что данные прибыли. Каждое USB-устройство должно поддерживать тип передачи Control-Transfer.

Управляющие передачи очень важны для обмена первыми сообщениями. Они служат для конфигурации USB-устройства и, помимо прочего, для того, чтобы осведомиться (проинформироваться) о совместимости USB-уст­ройства.

Передача с прерыванием (Interrupt-Transfer)

Передачи типа Interrupt-Transfer работают с проверкой ошибок и задуманы для маленьких наборов данных. Не гарантируется точно установленная ско­рость передачи данных. Происходит периодический опрос (считывание дан­ных) подключенного USB-устройства. Такт опроса при Low Speed лежит в границах между 10 и 255 мс, при Full Speed— между 1 и 255 мс, а при High Speed — при 125 мкс.

При Low Speed за один опрос (считывание данных) передается до 8 байтов, при Full Speed— до 64 байтов, а при High Speed— до 1024 байтов. Отсю­да следует максимальная скорость передачи данных при Low Speed — 800 байт/с, при Full Speed — 64 Кбайт/с и при High Speed — до 24 Мбайт/с. Несмотря на схожесть в названии, Interrupt-Transfer (передача с прерывани­ем) не имеет ничего общего с Prozessor-Interrupts (Прерывания процессора).

Массовая передача (Bulk-Transfer)

Передачи типа Bulk-Transfer задуманы для больших по размеру наборов дан­ных, которые нуждаются в проверке ошибок, но не являются злободневными. Эти передачи обладают меньшим приоритетом. Они проводятся контролле­ром, когда другие изохронные передачи и передачи с прерываниями отклю­чены. Используемый FTDI-чип микросхемы FT232R поддерживает этот тип передачи.

Изохронная передача (Isochron Transfer)

Изохронные передачи являются важными для USB-устройств, которые обра­батывают большие наборы данных (файлы). Они имеют гарантированную скорость передачи данных. При Isochron Transfer не происходит корректиро­вание ошибок. Изохронная передача не имеется в распоряжении при Low Speed.

USB-драйвер

Вообще, драйвер — это связующее звено между аппаратным и программным обеспечением. Для того чтобы добраться до USB-устройства, программа должна сообщаться с драйвером, который в свою очередь на более низком уровне сообщается с USB-драйверами, которые управляют сообщениями по линиям передачи данных USB. Принципиально было бы также возможно об­ратиться к более низкому уровню непосредственно при помощи собственной программы, но в этом случае пришлось бы более детально разбираться со свойствами USB-устройства, специфичными для того или иного изготовите­ля. У новых операционных систем Windows драйверы на сегодняшний день имеют лишь необходимые права доступа, для того чтобы можно было обра­титься к аппаратному обеспечению компьютера.

Компания FTDI выпускает для двух, используемых USB-контроллеров мик­росхемы FT232R для Windows два различных драйвера. Первый драйвер — это так называемый VCP-драйвер (Virtueller Com Port — виртуальный Corn-порт). Этот драйвер заботится о том, чтобы операционная система интегри­ровала последовательный СОМ-порт, когда FTDI-USB-контроллер связыва­ется с компьютером через USB. Благодаря этому обычно эмулируется после­довательный интерфейс, прикидываясь перед операционной системой другим СОМ-портом. Так удается как можно быстрее дооборудовать более новые компьютеры виртуальным последовательным интерфейсом и добиться высо­кой совместимости с существующими прикладными программами.

Второй драйвер— D2XX. Здесь речь идет о драйвере FTDI2XX.SYS для WIN32 Driver Model (WDM — тип драйвера Win32). Собственное прикладное программное обеспечение сообщается по этому USB-драйверу Windows со стеком (стековой памятью), который, в свою очередь, пытается добраться до USB-устройства.

Для двух драйверов FTDI в Интернете на сайте www.ftdichip.com имеется соответствующая программная документация.

Сначала при установке драйвера все еще нужно было выбирать один из двух драйверов. Если кто-то хотел использовать второй драйвер, то первый драй­вер обязательно нужно было деинсталлировать. С выходом версии драйвера 2.0 с 2007 г. деинсталляция больше не требуется: драйвер для двух вариантов (D2XX и VCP) избавляет от надоедливых установок и удалений, так что можно продолжать экспериментировать.

Компания FTDI поддерживает не только драйверы для всех распространен­ных вариантов Windows, но также и для операционных систем Linux, Mac OS и др.

Идентификация оферента USB

Чтобы USB-устройство могло быть выставлено на рынок, ему нужен так на­зываемый VID (Vendor-ID, ID продавца) и PID, код продукта. ID вендора FTDI-контроллера FTDI предоставляется бесплатно. Если FTDI-контроллер используется для других целей, то от FTDI может быть получен другой номер кода продукта PID (рис. 2.5).

Номера VID и PID сохраняются внутри FTDI-контроллера в EEPROM (элек­тронно стираемом программируемом ПЗУ). Они даже могут быть изменены, но в этом случае должны быть согласованы и программы установки драйвера. После внесения изменений обычно требуется новая установка.

В книге были использованы ID вендора FTDI-VID и код продукта FTDI-PID, в то время как сам новый драйвер в любое время может быть получен с сайта www.ftdichip.com.

clip_image004

Литература:


USB в электронике: Пер. с нем. — СПб.: БХВ-Петербург, 2009. — 224 с: ил. + CD-ROM — (Электроника)

Предлагаю ознакомиться с аналогичными статьями: