PLX Technology

 

Карточка производителя

Компания PLX Technology - это ведущий производитель решений для интерфейсов ввода\вывода, включая PCI Express® (PCIe®), USB и др. для рынков серверных устройств, устройств хранения информации, промышленного контроля и бытовой электроники www.plxtech.com

Универсальная последовательная шина USB

     Шина USB появилась в 1995 году (версия спецификации 1.0). Шина разрабатывалась как способная заменить собой устаревшие интерфейсы компьютера, такие как COM, LPT, PS/2 и обеспечить простоту и гибкость подключения устройств.
   В начальном варианте были заявлены две скорости работы приемопередатчиков - 1.5Мбит/с и 12Мбит/с (низкая и полная скорости соответственно), что сравнимо с пропускной способностью интерфейса LPT в режиме EPP или ECP. Низкая скорость предназначена для устройств, имеющих непостоянный характер передач – например устройства ввода, такие как клавиатура или мышь. Полная скорость предназначена для подсоединения устройств, которым требуется передача больших объемов данных – аудиокарты, карты флэш-памяти, принтеры, сканеры и т.п. Появившаяся в 2000 году спецификация USB версии 2.0 добавляет третью скорость работы приемопередатчиков - 480Мбит/с. Такая полоса пропускания позволяет передавать несжатую видеоинформацию в реальном времени.
    USB поддерживает три режима передачи информации – прерывания, передача массивов (асинхронная передача) и изохронная передача. Под передачей прерываний подразумевается периодический опрос устройства на предмет готовности передачи данных. Асинхронные передачи используются для передачи массивов информации с контролем доставки. Изохронная передача – передача потоковых данных без гарантии целостности при доставке.
    Шина USB является хост-центрической – в системе  может быть лишь один хост-контроллер (обычно он встраивается в материнскую плату ПК), который и является инициатором всех транзакций. Это позволяет использовать в периферийных устройствах простые с точки зрения реализуемой логики приемопередатчики, что удешевляет всю систему в целом. Физическая топология  шины – звезда, так как для подключения к одному хост-контроллеру нескольких устройств необходимо использовать разветвители (хабы). С помощью хабов к одному хосту допускается подключение до 127 устройств.
    Сравнительно недавно появилось расширение спецификации USB – USB OTG (USB On-The-Go – USB “на ходу”), в котором описываются возможности соединения устройств между собой без участия компьютера. Устройства, поддерживающие эту спецификацию должны иметь Embedded Host – контроллер, т.е. контроллер который может работать как просто контролер USB в случае соединения с компьютером, либо как хост-контроллер в случае, если компьютер отсутствует. Такие контроллеры, например, встраиваются в наладонные компьютеры PDA или, например, в принтеры для подключения цифровых фотоаппаратов.
    Устройства подключаются экранированным кабелем, содержащим 4 провода – одна витая пара для передачи сигналов приемопередатчиков и два провода для подачи питания (земля и 5В). Кабели имеют миниатюрные разъемы двух типов (A и В). Тип A используется для соединения с нисходящим портом хаба, тип B – для соединения с устройством или входным портом хаба. Таким способом исключается возникновение “петель” при подключении устройств.
    Шина поддерживает протокол PnP и допускает подключение и отключение устройств в “горячем” режиме, т.е. без выключения компьютера.
Простота и дешевизна контроллеров USB, миниатюрные разъемы и простота подключения, полная поддержка PlugAndPlay сделали эту шину весьма популярной среди разработчиков электронной аппаратуры. На сегодняшний день выпускаются сотни наименований устройств, поддерживающих USB – от клавиатур, принтеров и сканеров до телефонов и цифровых фото- и видеокамер. 
Таблица 1 – Сравнительные характеристики интерфейсов
Интерфейс
Тип
Максимальная пропускная
способность
Кабель и разъемы
Plug-and-Play
PCI - 32
параллельный,
внутренний
132Мбайт/с
120-контактный слот
да
COM-порт
последовательный,
внешний
115Кбит/с
15-и или 25-и
контактные разъемы
если реализовано
в устройстве
IEEE1284 (LPT)
параллельный,
внешний
2Мбайт/с
25-контактный разъем
если реализовано
в устройстве
USB 1.1
последовательный,
внешний
12Мбит/с
экранированная витая пара,
4-х контактные разъемы
да
USB 2.0
последовательный,
внешний
480Мбит/с
экранированная витая пара,
4-х контактные разъемы
да
FireWire 400
последовательный,
внешний
400Мбит/с
экранированная витая пара,
6-и или 4-х контактные
разъемы; оптоволокно 
да
FireWire 800
последовательный,
внешний
800Мбит/с
экранированная витая пара,
9-и контактные разъемы;
оптоволокно 
да

Введение в интерфейс USB

    Поскольку дальнейшее изложение материала касается различных аспектов интерфейса USB, то необходимо дать краткое объяснение используемых ключевых терминов и понятий.
    Фундаментальной концепцией шины USB является присутствие на шине только одного ведущего устройства – хост-компьютера. Все подключенные к шине устройства отвечают на запросы хоста и не могут самостоятельно инициировать запросы, т.е. шина USB является хост-центрической (рисунок 1). В спецификации определяется два типа устройств, подключаемых к шине – концентраторы (хабы) для увеличения числа подключаемых устройств и функции (т.е. собственно устройства, обеспечивающие возможности системы). Топология шины – многоярусная звезда. Центром каждой звезды является концентратор. Допускается до семи уровней, включая корневой концентратор. При этом между хостом и функцией допускается присутствие не более 5 концентраторов, поэтому на седьмом уровне допускается работа только функций. Составное устройство (рисунок 1), будучи подключенным на седьмом уровне, функционировать не будет.


Рисунок 1 – Структура шины USB

    Устройство USB представляется в системе как набор конечных точек (endpoints) – буферов, через которые происходит передача данных. Каждое устройство содержит как минимум одну конечную точку (конечная точка с номером 0). Устройство может иметь несколько параллельно работающих интерфейсов. Это позволяет объединять в одном устройстве несколько подустройств с различным назначением. Интерфейс представляет собой объединение нескольких конечных точек за исключением нулевой, используемой для управления всем устройством в целом. Программное обеспечение, выполняющееся на хост-компьютере, осуществляет обмен с устройством на шине USB при помощи каналов (pipes) –  логических потоков информации, связывающих программное обеспечение хоста и конечные точки устройства. Канал, связанный с нулевой конечной точкой, создается подсистемой USB в составе OC при подключении устройства, остальные каналы создаются пользовательским ПО. Взаимодействие хоста и устройства на шине USB изображено на рисунке 2.


Рисунок 2 – Потоки информации в интерфейсе USB
    Существует два направления передачи информации:  OUT – из хоста в устройство и IN – из устройства в компьютер. Каждая транзакция происходит посредством передачи пакетов данных.  Каждый передаваемый пакет данных содержит идентификатор (PID), который отображает вид передаваемых данных (таблица 2).
Таблица 2 – Идентификаторы пакетов USB
Тип PID
Имя PID
Маркер (Token)
IN, OUT, SOF, SETUP
Данные (Data)
DATA0, DATA1, DATA2, MDATA
Подтверждение передачи (Handshake)
ACK, NAK, STALL, NYET
Специальный (Special)
PRE, ERR, SPLIT, PING
    На рисунке 3 показаны две OUT-транзакции.


Рисунок 3
    Пакет 1 – это пакет, сигнализирующий о том, что данные будут переданы из хоста в устройство (OUT). Этот пакет содержит адрес получателя и номер конечной точки, через которую будут переданы данные. Пакет 2 – собственно передача данных, о чем свидетельствует идентификатор DATA1. Пакет 3 – пакет подтверждения (ACKnowledge) устройством безошибочного приема данных (этот пакет передается от устройства к хосту). Следующая транзакция (пакеты 4, 5 и 6) отличается от предыдущей только идентификатором DATA0 в пакете данных. Идентификаторы DATA0 и DATA1 чередуются хостом при передаче пакетов данных и сравниваются с битом внутри устройства, который также переключается при приеме пакетов данных. Это является одним из средств обнаружения ошибок при передаче.
    Несколько транзакций объединяются внутри фрейма, начало которого определяется пакетом с идентификатором SOF (Start Of Frame). Этот пакет генерируется хостом с частотой 1кГц при полной скорости работы шины или 8кГц при высокой скорости.
Спецификация шины USB определяет четыре типа передач данных:
    1) Транзакции управления (Control) - рисунок 4.
    Транзакции этого типа используются для  передачи команд устройству. Транзакция управления содержит две или три стадии передачи данных. Первая стадия заключается собственно в передаче команды, для чего используется 8-байтный пакет данных. За этой стадией может следовать стадия передачи прочих данных. Завершающая стадия позволяет устройству сообщить хосту об успешном выполнении команды.


Рисунок 4 - Транзакция управления
    При подключении устройства к шине, транзакции управления используются для получения хостом информации об устройстве - специальных структур данных  (дескрипторов), описывающих устройство (количество и типы конечных  точек, количество интерфейсов и т.п.).  Стандартные типы запросов, которые должны поддерживаться каждым устройством, перечислены в 9-й части спецификации USB 2.0 (“USB Device Framework. Standart Device Requests”). Формат запроса (8 байт данных, передаваемых на первой стадии) представлен в таблице 3.   
Таблица 3 – Поля пакета управления
Байт
Поле
Назначение
0
bmRequestType
Характеристика запроса: тип, направление передачи, получатель
1
bRequest
Код запроса
2
wValueL
16-битное поле, зависящее от кода запроса
3
wValueH
4
wIndexL
16-битное поле, зависящее от кода запроса; обычно используется как индекс или смещение
5
wIndexH
6
wLengthL
Количество передаваемых байт данных, если есть стадия их передачи
7
wLengthH
Всего определено 13 стандартных запросов с номерами 0х00 – 0х0С, остальные номера запросов могут использоваться разработчиками аппаратуры по своему усмотрению для передачи специфичных  для устройства команд. Так, например, для загрузки внутреннего ОЗУ CY7C68013 используется значение поля bRequest = 0xA0
.   
     2) Передача массивов (Bulk) - рисунок 5.
    Передача массивов представляет собой передачу 8-, 16-, 32- или 64-байтных пакетов на полной скорости работы шины или 512-байтных пакетов на высокой скорости.  Эти пакеты  передаются в любое доступное на шине время.  Передачи этого типа гарантируют доставку информации, для чего поддерживается механизм повторов передачи при возникновении ошибок, а также управление потоком передачи с помощью пакетов подтверждения.

Рисунок 5 – Транзакции передачи массивов
   
    3) Передача прерываний (Interrupt) - рисунок 6.
    Транзакции этого типа происходят также как и передачи массивов, за исключением того, что конечная точка, отвечающая за передачу прерываний, имеет фиксированный период опроса, обеспечивающий передачу данных через строго заданные промежутки времени.  Эта обязанность накладывается на операционную систему хоста или пользовательское ПО. Например в USB-подистеме  ОС Windows нет различия между Bulk и Interrupt - транзакциями, т.е. периодический опрос конечной точки типа Interrupt должен осуществляться драйвером устройства, либо пользовательским ПО. Размеры пакетов могут быть от 1 до 64-х байт на полной и до 1Кбайт на высокой скорости.


Рисунок 6 – Передача перываний
    4) Передача изохронных данных (Isochronous) - рисунок 7.
    Изохронные данные представляют из себя поток какой-либо информации, критичный к времени передачи. Для передач такого типа в каждом фрейме шины зарезервирована определенная часть полосы пропускания. Для увеличения скорости передачи этого типа не гарантируют доставку информации, нет повторов при ошибочной передаче.


Рисунок 7 – Транзакция передачи изохронных данных

Драйвер устройства
    Дни простых интерфейсов как RS-232 уже позади, так как не удовлетворяют потребностям и надежности обмена. USB требует огромного количества программного обеспечения: как со стороны устройства, так и с главного компьютера.
    Большинство конечных соединений, в худшей или лучшей степени осуществляется на ПК с операционной системой Microsoft. USB не полностью поддерживается в DOS, Windows 3.x и Windows NT. Windows 95 обеспечивает несколько USB драйверов, и то только в поздних версиях начиная с OEM Software Release 2.1. Все версии Windows 98 и 2000 включают полный комплект драйверов для частых задач.
    Многие даже самые блестящие инженеры, производители устройств, спасуют перед таким занятием, как написание драйверов, и для этого есть причины. К несчастью, USB драйвер это трудный "зверек". Хорошими новостями являются новости о том, что в большинстве случаев драйвера, поставляемые с Windows, смогут взять на себя работу даже с вашим нестандартным устройством.
    Реализация драйверов в Windows 98 основана на Win 32 Driver Model (WDM), которая распределяет различные части процесса передачи данных в стек драйверов. Приложение (с помощью API процедур) осуществляет связь с классовыми или дополнительными (собственными) драйверами в WDM. Внутри WDM стека данные передаются, используя низкоуровневые IRP (I/O request packets) взамен API.
    Низкоуровневый драйвер шины USB (USB Bus Driver) управляет питанием устройства, определением и различными USB транзакциями. Ниже, драйвер контроллера (Host Controller Driver) "общается" непосредственно с аппаратурой. Оба эти драйвера включены в поставке с Windows.
    Windows, как и USB спецификация, подразделяет драйвера в "классы", где периферия, принадлежащая одному классу, поддерживает одинаковые интерфейсы. Определения классов основываются на документации из спецификации для данного набора характеристик; все устройства одного класса требуют подходящее программное обеспечение.
    Примером является HID класс (устройства, взаимодействующие с пользователем), он поддерживает мышки, джойстики, клавиатуры. Еще
есть Monitor класс, который управляет позицией, размером и выравниванием изображения на видео дисплеях. В Windows включен полноценный драйвер HID-класса. Если ваше оборудование нуждается в HID-образной поддержке, вы можете использовать встроенный драйвер без необходимости написания своего кода на PC.
    Спецификации для HID драйверов можно найти на официальном сайте USB www.usb.org.
    Собственные драйверы являются альтернативой драйверам классов. Индивидуальный драйвер использует свойства отдельный частей оборудования, расположенных по ту сторону USB кабеля. Если вы сделали накопительное устройство, то драйверы класса вам не подойдут, придется писать собственные. Аналогично, если устройство имеет отличные от стандартного класса функции, придется писать драйвер для их поддержки. Компилировать драйвер можно в Visual C++, в любом случае необходимо скачать DDK, свободно доступное от Microsoft.
    Если устройство отличается по функциональности от мышки, наверняка придется написать приложение, которое будет обмениваться данными с USB устройством и взаимодействовать с пользователем. Для обмена данными с USB устройством, приложение использует стандартные файл-подобные API вызовы, используя контекст (Handle), как идентификатор устройства.

С чего начать освоение USB

    Если Вы разабатываете устройство, одной из особенностей которого является передача данных в компьютер, если у вас нет свободных последовательных (COM) или паралельных (LPT) портов, если Вы хотите использовать компьютерные +5 B, если Вы хотите подсоединять (отсоединять) устройство к компьютеру без отключения компьютера, то освоение USB интерфейса - Ваша главная задача.
    Первое что Вам необходимо - это Спецификация USB 2.0 (полное описание включающее в себя: - описание типов пердачи данных; - описание протокола передачи данных; - описание стандартных запросов от Хоста к устройству).
    Т.к. Вы только начинаете осваивать USB интерфейс, то Ваше устройство будет выглядеть как устройство HID класса. Примерами HID (Human interface device) устройства могут быть: клавиатура, мышь, джойстик, сканер штрих кодов, считыватель магнитных карт, LED или LCD индикаторы, телефонные номеронабиратели, медицинские приборы и т.д. Чем же так хорош HID stack?
    Во-первых Windows 98, 2000, XP имеют встроеный HID-class driver, поэтому разработчику уже не нужно писать драйвер, что сберегает и время и силы.
    Во-вторых с точки зрения firmware, то для того чтобы Windows заметил ваше устройство как HID, то необходимо написать несколько структур
данных, которые описывают HID интерфейс.
    Кроме положительной стороны HID устройства есть и отрицательная - это ограничение по скорости передачи данных. Оно составляет 64 kBit/c, что значительно меньше полноскоростной шины 12 MBit/c. Если вы разрабатываете full-speed HID устройство то скорость передачи данных 64000 байт в секунду (64 байта в один кадр 1 mс). Для low-speed устройств эта скорость составляет 800 байт в секунду (8 байт в каждые 10 mc).
Документация необходимая для того чтобы разобраться как написать HID устройство:
Вся информация о HID устройствах находится на сайте www.usb.org а именно:
HID information
Device Class Definition for HID ver 1.11
HID Usage Tables 1.11
HID descriptor Tool

Теперь у Вас есть полный набор документации для создания HID устройства.
На данный момент существует множество USB контроллеров. Они подразделяются на три типа:
- USB контроллер с внешним последовательным интерфейсом SPI или паралельным (мультиплексная или раздельная шина адреса и данных). Например: PDIUSB12, PDIUSB11, USBN9603/4, SL11, NET2890;
- USB контроллер совмещенный с микроконтроллером (чаще всего MCS51). Довольно привлекательное решение, тем более, что микроконтроллер имеет на борту аппаратную переферию (UART, SPI, I2S и т.д.). Например AN2131, TUSB3200, C540
- Готовая USB функция - контроллер сканера, Ethernet, клавиатуры, RS232 или LPT. Например FT8U232, FT8U245, NET1031, USB97C196
С моей точки зрения самым лучшим решением будет разработка своего устройства на базе второго варианта (USB контроллер совмещенный с микроконтроллером). Например на Cyprees контроллере AN2131.

Другие решения
Если по каким-либо соображениям (не устраивает скорость передачи данных, не нравится класс устройств ручного ввода) Вам не подходит HID устройство и у Вас нет времени на разработку своего собственного драйвера, то одним из решений может быть использование драйвера встроенного в ОС. В ОС Windows присутствуют драйвера для следующих классов устройств:
Audio Device Class(Устройство ввода аудио с поддержкой даже 24-бит)
Communication Device Class (CDC ACM - представляет собой драйвер Виртуального COM порта)
Imaging Class (Устройства ввода изображения: Цифровой фотоаппарат или Сканер)
Printer Class (В нем присутствует поддержка Bidirectional Data Transfer - IEE1284 с поддержкой запроса Device ID и c последующей энумерацией и инсталяцией нового устройства как в LPT_Enum)
Mass Storage (Если Вы хотите видеть устройство в системе как накопитель информации)
Все спецификации на перечисленные выше устройства Вы можете найти на странице описывающей возможные классы USB устройств Approved Class Specification Documents

196105, г. Санкт-Петербург, ул.Свеаборгская, дом 12
Тел.:  +7 (812) 370-6070

Все права защищены. ООО Макрогрупп © 2012.
Разработка сайта - Pyramid IT
Поиск электронных компонентов
Поиск электронных компонентов по складам поставщиков России и СНГ.
Рейтинг GPS Клуба. GPS навигаторы. GPS мониториг. GPS трекеры. ГЛОНАСС
Поиск электронных компонентов