1. Общая информация 		3. Передача данных 			4. Протокол
2. Обзор архитектуры 		3.1 Конечные точки 			4.1 Поля пакетов
2.1 Структура USB 		3.2 Каналы 					4.2 Форматы пакетов
2.2 Устройства USB 		3.3 Типы передачи данных 		4.3 Типы транзакций 
2.3 Интерфейс

#1. Общая информация
USB (Universal Serial Bus - универсальная последовательная шина) -новый стандарт последовательного соединения, предложенный фирмой Intel совместно с фирмами Compaq Computer, Digital Equipment, IBM PC Company, Microsoft, NEC и Northern Telecom. Шина была впервые анонсированна фирмой Intel на конференции WinHEC (Windows Hardware Engineering Conferencwe). Первая версия спецификации на шину появилась 11 ноября 1994 г., последняя датирована 23 сентября 1998 г. С середины 1996 года выпускаются PC со встроенным контроллером USB, реализуемым чипсетом. 
Необходимость создания USB было продиктовано тремя находящимися во взаимосвязи соображениями: 
·	Интеграция PC и телефонии
Хорошо известно , что слияние вычислительной техники и связи - основа следующего поколение приложений. Передача машинно-ориентированных и ориентированных на пользователя типов данных от одного устройства к другому зависит от дешевого, обладающего хорошими свойствами масштабируемости и качественного канала передачи данных. USB обеспечивает связь, которая может использоваться в широком диапазоне коммуникации PC и телефонной связи. 
·	Лёгкость использования
Недостаток гибкости конфигурирования PC был подтвержден в процессе дальнейшего развития вычислительной техники. Комбинация дружественных графических интерфейсов и аппаратных средств ЭВМ с механизмами программной настройки шин нового поколения сделали компьютеры более простыми и понятными в вопросе конфигурирования. Однако, с точки зрения пользователя, устройства ввода/вывода, типа последовательных/параллельных портов, клавиатур/мышей/джойстиков и т.д., не имеют атрибутов Plug-and-Play. 
·	Увеличение количества портов
Число внешних периферийных устройств PC ограничивается количеством свободных портов. Недостаток двунаправленных дешевых среднескоростных внешних шин сдерживает увеличение количества устройств типа телефон/факс/модем, автоответчиков, сканеров, клавиатур и т.д. Существующие типы подключений оптимизированы для одного или двух изделий одного пункта. Новый интерфейс был разработан, чтобы увеличить число портов PC. 
Архитектура USB определяется следующими критериями: 
·	Легко реализуемое расширение периферии PC 
·	Дешевое решение, поддерживающее скорость передачи до 12 Мбит/с 
·	Полная поддержка в реальном времени передачи аудио- и (сжатых) видеоданных 
·	Гибкость протокола смешанной передачи изохронных данных и асинхронных сообщений 
·	Интеграция с выпускаемыми устройствами 
·	Доступность в PC всех конфигураций и размеров 
·	Обеспечение стандартного интерфейса, способного быстро завоевать рынок 
·	Создание новых классов устройств, расширяющих PC 
С точки зрения конечного пользователя, привлекательны следующие черты USB: 
n	Простота кабельной системы и подключений 
n	Скрытие подробностей электрического подключения то конечного пользователя 
n	Самоидентифицирующиеся ПУ, автоматическая связь устройств с драйверами и конфигурирование 
n	Возможность динамического подключения и конфигурирования ПУ
Широкий диапазон рабочих нагрузок и прикладных программ: 
n	Соответствующая конкретному устройству скорость обмена данными в пределах от нескольких кбит/c до 12 Мб/сек 
n	Поддержка работы многих устройств в параллельном режиме 
n	Поддержка до 127 устройств 
n	Работает с многофункциональными устройствами (то есть, периферийное оборудование, выполняющее несколько функций) 

#2. Обзор архитектуры
Этот раздел представляет собой краткий обзор архитектуры USB и ключевые концепции, реализованные в шине. USB обеспечивает одновременный обмен данными между хост-компьютером (главный компьютер или компьютер, в котором установлен USB-контроллер) и множеством периферийных устройств (ПУ). Распределение пропускной способности шины между ПУ планируется хостом и реализуется им с помощь посылки маркеров. Шина позволяет подключать, конфигуровать, использовать и отключать устройства во время работы хоста и самих устройств.

#2.1 Структура системы USB
Шина USB может быть описана с помощью трёх составляющих : 
·	USB коммутация (interconnect) 
·	USB устройства (devices) 
·	USB хост (host) 
Коммутация USB - способ, которым USB устройства связаны с хостом. Под этим понятием подразумевается следующее: 
o	Топология шины : способ организации физических связей между USB устройствами и хостом; 
o	Межуровневые зависимости : USB задачи, которые выполняет каждый уровень в системе; 
o	Модели потока данных: способ, которым данные перемещаются в системе посредством USB между источником и приёмником информации; 
o	Планирование: USB предоставляет коммуникации (каналы связи), совместно используемые устройствами. Доступ к каналам планируется так, чтобы поддерживать изохронную передачу данных и снизить затраты на арбитраж. 
USB устройства и USB хост подробно описаны в следующих разделах.

2.1.1 Топология шины 
Физическое соединение устройств осуществляется по топологии многоярусной звезды (см рис 2.1). Центром каждой звезды является хаб, каждый кабельный сегмент соединяет две точки — хаб с другим хабом или с функцией. В системе имеется один (и только один) хост-контроллер, расположенный в вершине пирамиды устройств и хабов. Хост-контроллер интегрируется с корневым хабом (Root Hub), обеспечивающим одну или несколько точек подключения — портов. Контроллер USB, входящий в состав чипсетов, обычно имеет встроенный двухпортовый хаб. Логически устройство, подключенное к любому хабу USB и сконфигурированное, может рассматриваться как непосредственно подключенное к хост-контроллеру.

#2.2 Устройства USB 
Устройства (Device) USB могут являться хабами, функциями или их комбинацией. Хаб (Hub) обеспечивает дополнительные точки подключения устройств к шине. Функции (Function) USB предоставляют системе дополнительные можности, например подключение к ISDN, цифровой джойстик, акустические колонки с цифровым интерфейсом и т.п. Устройство USB должно иметь интерфейс USB, обеспечивающий полную поддержку протокола USB, выполнение стандартных операций (конфигурирование и сброс) и предоставление информации, описывающей устройство. 
2.2.1 Хаб 
Хаб (концентратор) — ключевой элемент системы Р-n-Р в архитектуре USB. Хаб является кабельным концентратором, поэтому в русскоязычной литературе часто для обозначения хаба используется именно термин концентратор. На рис. 2-2 представлен хаб типичной архитектуры. Точки подключения называются портами хаба.
 Хаб преобразует одну точку подключения в их множество. Архитектура допускает соединение нескольких хабов. У каждого хаба имеется один восходящий порт (Upstream Port), предназначенный для подключения к хосту или хабу верхнего уровня. Остальные порты являются нисходящими (Downstream Ports), предназначенными для подключения функций или хабов нижнего уровня. Хаб может распознать подключение устройств к портам или отключение от них и управлять подачей питания на их сегменты. Каждый из портов может быть разрешен или запрещен и сконфигурирован на полную или ограниченную скорость обмена. Хаб обеспечивает изоляцию сегментов с низкой скоростью от высокоскоростных. Хабы могут управлять подачей питания на нисходящие порты; предусматривается установка ограничения на ток, требляемый каждым портом.
Рисунок 2-3 показывает как хабы обеспечивают связность различных устройств в компьютерной системе.
 
2.2.2 Функция 
Функции представляют собой устройства, способные передавать или принимать данные или управляющую информацию по шине. Типично функции представляют собой отдельные ПУ с кабелем, подключаемым к порту хаба. Физически в одном корпусе может быть несколько функций со встроенным хабом, обеспечивающим их подключение к одному порту. Эти комбинированные устройства для хоста являются хабами с постоянно подключенными устройствами. Каждая функция предоставляет конфигурационную информацию, описывающую возможности ПУ и требования к ресурсам. Перед использованием функция должна быть сконфигурирована хостом — ей должна быть выделена полоса в канале и выбраны опции конфигурации. 
Примерами функций являются : 
o	Указатели — мышь, планшет, световое перо. 
o	Устройства ввода — клавиатура или сканер. 
o	Устройство вывода — принтер, звуковые колонки (цифровые). 
o	Телефонный адаптер ISDN. 

#2.3 Физический интерфейс 
Стандарт USB определяет электрические и механические спецификации шины. 
2.3.1 Электрические характеристики 
Информационные сигналы и питающее напряжение 5 В передаются по четырехпроводному кабелю (рис. 2-4). Используется дифференциальный способ передачи сигналов D+ и D- по двум проводам. Кабель также имеет линии VBus и GND для передачи питающего напряжения 5В к устройствам. 
Шина имеет два режима передачи: 
·	полная скорость передачи сигналов USB составляет 12 Мбит/с 
·	низкая - 1,5 Мбит/с
Для полной скорости используется экранированная витая пара с волновым сопротивлением 90 Ом и длиной сегмента до 5 м, для низкой - невитой неэкранированный кабель до 3м. Низкоскоростные кабели и устройства дешевле высокоскоростных. Одна и та же система может одновременно использовать оба режима; переключение для устройств осуществляется прозрачно. Низкая скорость предназначена для работы с небольшим количеством ПУ, не требующих высокой скорости. Скорость, используемая устройством, подключенным к конкретному порту, определяется хабом по уровням сигналов на линиях D+ и D-. 
Питание устройств USB возможно от кабеля (Bus-Powered Devices) или от собственного блока питания (Self-Powered Devices). Хост обеспечивает питанием непосредственно подключенные к нему ПУ. Каждый хаб, в свою очередь, обеспечивает питание устройств, подключенных к его нисходящим портам. При некоторых ограничениях топологии допускается применение хабов, питающихся от шины. На рис. 2-3 приведен пример схемы соединения устройств USB. Здесь клавиатура, перо и мышь могут питаться от шины. 
2.3.2 Механические характеристики 
В системе USB используются два типа разъёмов кабелей.Разъемы типа "А" (см рис 2-5) применяются для подключения к xaбам (Upstream Connector). Вилки устанавливаются на кабелях, отсоединяемых от устройств (например, клавиатура, мышь и т. п.). Гнезда устанавливаются на нисходящих портах (Downstream Port) хабов. Разъемы типа "В" (Downstream Connector) (см рис 2-5) устанавливают на устройствах, от которых соединительный кабель может отсоединяться (принтеры и сканеры). Ответная часть (вилка) устанавливается на соединительном кабеле, противоположный конец которого имеет вилку чипа "А".
Разъемы типов "А" и "В" различаются механически, что исключает недопустимые петлевые соединения портов хабов. Четырехконтактные разъемы имеют ключи, исключающие неправильное присоединение. Конструкция разъемов обеспечивает позднее соединение и раннее отсоединение сигнальных цепей по сравнению с питающими. Для распознавания разьемов USB на корпусе устройства ставится стандартное символическое обозначение.

#3. Модель передачи данных
USB обеспечивает связь между хост-контроллером и USB устройствами. Однако, с точки зрения конечного пользователя, подключение одного или более устройств к хосту, показанное на рис. 3-1, является более сложной задачей.

Система USB представлена многослойным способом с целью облегчить понимание функционирования шины и позволить более глубоокое изучение частей USB системы. Рисунок 3-2 представляет более полный обзор USB, идентифицирующий различные уровни системы. Система USB разделяется на три уровня с определенными правилами взаимодействия. Устройство USB содержит интерфейсную часть, часть устройства и функциональную часть. Хост также делится на три части — интерфейсную, системную и ПО устройства. Каждая часть отвечает только за определенный круг задач, логическое и реальное взаимодействие между ними иллюстрирует рисунок.

В частности, взаимодействие между хостом и физическим устройством можно разделить на четыре центральных области реализации функций взаимодействия (implementation area): 
o	физическое устройство USB; 
Устройство на шине , подключаемое стандартным USB кабелем и выполняющее некоторые необходимые пользователю функции. 
o	клиентское программное обеспечение (ПО)(Client Software);
Программное обеспечение, которое выполняется на хост-компьютере и соответствует некоторому USB устройству. Это клиентское приложение обычно поставляется с операционной системой или с конкретным USB устройством. 
o	системное ПО USB (USB System SW);
Программное обеспечение, которое предоставляет возможность работы с USB в конкретной операционной системе. Системное программное обеспечение USB обычно поставляется с операционной системой и не зависит от какого-либо конкретного USB устройства или клиентского ПО. 
o	хост-контроллер USB (USB Host Controller);
Аппаратные и программные средства , которые позволяют USB устройствам взаимодействовать с хостом. 
Как показано на рисунке 3-2 взаимодействие между хостом и функциональным устройством требует взаимодействия между уровнями и областями реализации ( другими словами необходимо использование вертикальных и горизонтальных связей , показанных на рисунке).Например , уровень интерфейса шины USB обеспечивает совместимость между хостом и устройством по физическим параметрам ( разъёмы кабелей , волновое сопротивление кабелей и т. п.) и передаче сигналов ( уровни сигналов , кодирование информации и т. д.). 
#3.1 Конечные точки устройств USB
Каждое устройство USB представляет собой набор независимых конечных точек (Endpoinf), с которыми хост-контроллер обменивается информацией. Каждое логическое устройство имеет уникальный адрес , который назначается системой. Каждое устройство обязательно имеет конечную точку с номером 0, используемую для инициализации, общего управления и опроса его состояния. Эта точка всегда сконфигурирована при включении питания и подключении устройства к шине. Она поддерживает передачи типа "управление". Кроме нулевой точки, устройства-функции могут иметь дополнительные точки, реализующие полезный обмен данными. Низкоскоростные устройства могут иметь до двух дополнительных точек, полноскоростные — до 16 точек ввода и 16 точек вывода (протокольное ограничение). Точки не могут быть использованы до их конфигурирования (установления согласованного с ними капала). Конечные точки описывается следующими параметрами: 
·	требуемой частотой доступа к шине и допустимыми задержками обслуживания; 
·	требуемой полосой пропускания канала; 
·	номером точки; 
·	требованиями к обработке ошибок; 
·	максимальными размерами передаваемых и принимаемых пакетов; 
·	типом обмена; 
·	направлением обмена (для сплошного и изохронного обменов). 

#3.2 Каналы
Каналом (Pipe) в USВ называется модель передачи данных между хост-контроллером и конечной точкой (Endpoint) устройства. Каналы предоставляют возможность обмениваться данными между программным обеспечением на хост-контроллере и конечной точкой на устройстве.
Имеются два типа каналов: 
n	потоки (Stream): данные потока неструктурированы; 
n	сообщения (Message): данные, передаваемые посредством канала, имеют строго определённый формат (структуру). 
Каналы организуются при конфигурировании устройств USB. Для каждого включенного устройства существует канал сообщений (Default Control Pipe ), свяывающий нулевую конечную точку и хост-контроллер, по которому передаётся информация конфигурирования, управления и состояния (см рис 3-3).

Необходимо помнить, что потоки и сообщения являются взаимно исключающимися понятиями. Канал может быть организован либо типа поток, либо типа сообщения.

3.2.1 Потоки 
Поток доставляет данные в виде пакетов без определённой структуры от одного конца канала к другому. Поток всегда однонаправленный. Один и тот же номер конечной точки может использоваться для двух поточных каналов — ввода и вывода. Поток может реализовывать следующие типы обмена: сплошной, изохронный и прерывания. Доставка всегда идет в порядке "первым вошел — первым вышел" (FIFO). Данные потока всегда НЕСТРУКТУРИРОВАНЫ. 
3.2.2 Сообщения 
Сообщения имеют формат, определенный спецификацией USB. Хост посылает запрос к конечной точке, после которого передаётся (принимается) пакет сообщения, за которым следует пакет с информацией состояния конечной точки. Последующее сообщение нормально не может быть послано до обработки предыдущего, но при обработке ошибок возможен сброс обслуженных сообщений. Двухсторонний обмен сообщениями адресуется к одной и той же конечной точке. Для доставки сообщений используется только обмен типа "управление". С каналами связаны характеристики, соответствующие конечной точке (полоса пропускания, тип сервиса, размер буфера и т.п.) 

#3.3 Типы передачи данных
USB поддерживает как однонаправленные, так и двунаправленные режимы связи. Передача данных производится между ПО хоста и конечной точкой устройства. Устройство может иметь несколько конечных точек, связь с каждой из них (канал) устанавливается независимо.
Архитектура USB допускает четыре базовых типа передачи данных: 
o	Управляющие посылки (Control Transfers);
Используются для конфигурирования во время подключения и в процессе работы, для управления устройствами. Протокол обеспечивает гарантированную доставку данных. Длина поля данных управляющей посылки не превышает 64 байт на полной скорости и 8 байт на низкой. 
o	Сплошные передачи (Bulk Data Transfers);
Передача сравнительно больших пакетов без жестких требований ко времени доставки. Передачи занимают всю свободную полосу пропускания шины. Пакеты имеют поле данных размером 8, 16, 32 или 64 байт. Приоритет этих передач самый низкий, они могут приостанавливаться при большой загрузке шины. Допускаются только на полной скорости передачи. 
o	Прерывания (Interrupt); 
Короткие (до 64 байт на полной скорости, до 8 байт на низкой) передачи типа вводимых символов или координат. Прерывания имеют спонтанный характер и должны обслуживаться не медленнее, чем того требует устройство. Предел времени обслуживания устанавливается в диапазоне 1-255 мс для полной скорости и 10-255 мс — для низкой. 
o	Изохронные передачи (Isochronous Tranters);
Непрерывные передачи в реальном времени, занимающие предварительно согласованную часть пропускной способности шины и имеющие заданную задержку доставки. 
В случае обнаружения ошибки изохронные данные передаются без повтора — недействительные пакеты игнорируются. Пример — цифровая передача голоса. Пропускная способность определяется требованиями к качеству передачи, а задержка доставки может быть критичной, например, при реализации телеконференций. 
Архитектура USB предусматривает внутреннюю буферизацию всех устройств, причем чем большей полосы пропускания требует устройство, тем больше должен быть его буфер. USB должна обеспечивать обмен с такой скоростью, чтобы задержка данных в устройстве, вызванная буферизацией, не превышала нескольких миллисекунд. 
Изохронные передачи классифицируются по способу синхронизации конечных точек — источников или получателей данных — с системой: различают асинхронный, синхронный и адаптивный классы устройств, каждому из которых соответствует свой тип канала USB.

#4. Протокол
Все обмены данными (транзакции) по USB состоят из трех пакетов. Каждая транзакция планируется и начинается по инициативе контроллера, который посылает пакет-маркер (Тоken Packet). Он описывает тип и направление передачи, адрес устройства USB и номер конечной точки. 
В каждой транзакции возможен обмен только между адресуемым устройством (его конечной точкой) и хостом. Адресуемое маркером устройство распознает свой адрес и готовится к обмену. Источник данных (определенный маркером) передает пакет данных (или уведомление об отсутствии данных, предназначенных для передачи). После успешного приема пакета приемник данных посылает пакет подтверждения (Handshake Packet). 
Планирование транзакций обеспечивает управление поточными каналами. На аппаратном уровне использование отказа от транзакции (NAK) при недопустимой интенсивности передачи предохраняет буферы от переполнения сверху и снизу. Маркеры отвергнутых транзакций повторно передаются в свободное для шины время. Управление потоками позволяет гибко планировать обслуживание одновременных разнородных потоков данных.
Устойчивость к ошибкам обеспечивают следующие свойства USB: 
n	Высокое качество сигналов, достигаемое благодаря дифференциальным приемникам/передатчикам и экранированным кабелям. 
n	Защита полей управления и данных CRC-кодами. 
n	Обнаружение подключения и отключения устройств и конфигурирование ресурсов на системном уровне. 
n	Самовосстановление протокола с тайм-аутом при потере пакетов. 
n	Управление потоком для обеспечения изохронности и управления аппаратными буферами. 
n	Независимость функций от неудачных обменов с другими функциями. 
Байты передаются по шине последовательно, начиная с младшего бита. На следующих диаграммах биты и поля пакетов представлены в том виде, в каком они передаются по шине (т.е. слева направо, начиная с младшего бита).

#4.1Форматы полей пакетов
4.1.1 Поле синхронизации 
Все посылки организованы в пакеты. Каждый пакет имеет маркер начала пакета SOP (Start-of-Packet) и маркер конца пакета EOP (End-of-Packet). Маркером конца пакета (ЕОР) служит одновременное нахождение в течение двух временных интервалов сигналов D+ и D- ниже уровня 0,8 В. Каждый пакет начинается с поля синхронизации Sync, которое представляется последовательностью состояний 10101011 (кодированную по NRZI), следующую после состояния Idle. Это поле используется для синхронизации по частоте источника и приемника данных. Последние два бита (11) являются маркером начала пакета SOP, используемым для идентификации первого бита идентификатора пакета PID. 

4.1.2 Поле идентификатора пакета 
Идентификатор пакета (PID) является 4-битным полем PID[3:0], идентифицирующим тип пакета, за которым в качестве контрольных следуют те же 4 бита, но инвертированные.(см рис 4.1)

В следующей таблице приведены типы PID, их кодировка и описание.

4.1.3 Адресные поля 
В пакетах-маркерах IN, SETUP и OUT адресными полями являются следующие: 7-битный адрес функции и 4-битный адрес конечной точки. 
4.1.3.1 Поле адреса фунции 
Поле адреса функции (ADDR), определяет функцию по ее адресу. Как показано на рис. 4-2, с помощью поля адреса фкнкции возможно адресовать до 127 функций USB (нулевой адрес используется для конфигурирования ).

После выключения питания или сброса, адреса функций устанавливаются в ноль, а затем программируются в процессе пересчёта (конфигурирования) хост-контроллером. 
4.1.3.2 Поле номера конечной точки

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

Каждая функция должна поддерживать канал управления в нулевой конечной точке. 
4.1.4 Поле данных 
Поле данных может иметь размер от 0 до 1023 целых байт. Размер поля зависит от типа передачи и согласуется при установке канала (см рис 4-4).

4.1.5 Поле CRC
Циклический избыточный контроль (Cyclic Redundancy Checks) основан на рассмотрении исходных данных в виде многоразрядного двоичного числа. В качестве контрольной информации рассматривается остаток от деления этого числа на некоторый известный делитель. 
Поле СRС-кода присутствует во всех маркерах и пакетах данных, оно защищает все поля пакета, исключая PID (который имеет собственную защиту). CRC для маркеров (5 бит) и данных (11 бит) подсчитываются по разным формулам.

4.1.6 Поле номера кадра

В пакете SOF имеется 11-битное поле номера кадра (Frame Number Field), последовательно (циклически) увеличиваемое для очередного кадра.

#4.2 Форматы пакетов
Обмен данными - транзакции шины USB включают в себя передачу трёх типов пакетов данных: маркерного пакета (token), пакета данных (data) и пакета подтверждения (handshake). 
4.2.1 Маркерный пакет

На рис. 4-5 показана структура маркерного пакета. Пакет состоит из поля PID, имеющего IN, OUT либо SETUP тип поля, а также полей ADDR и ENDP. Для типов транзакций IN и OUT в поле ADDR и ENDP указывается та конечная точка, которая должна принять следующий за маркерным пакетом пакет данных. Для транзакций типа IN в этих полях определена точка, которая должна передать информацию. Генерировать маркерные пакеты может только хост-компьютер. Пакеты типа IN определяют передачу данных от функции к хосту, а пакеты OUT и SETUP - от хоста к функции.

Поле CRC защищает от ошибок поля ADDR и ENDP. 
4.2.2 Маркер начала кадра (SOF)
Хост-контроллер организует обмены с устройствами согласно своему плану распределения ресурсов. Контроллер циклически (с периодом 1 мс) формирует кадры (Frames), в которые укладываются все запланированные транзакции. Каждый кадр начинается с посылки маркера SOF (Start Of Frame), который является синхронизирующим сигналом для всех устройств, включая хабы. В конце каждого кадра выделяется интервал времени EOF (End Of Frame), на время которого хабы запрещают передачу по направлению к контроллеру (см рис 4-6).

Каждый кадр имеет свой номер. Хост-контроллер оперирует 32-битным счетчиком, но в маркере SOF передает только младшие 11 бит. Номер кадра увеличивается (циклически) во время EOF. Хост планирует загрузку кадров так, чтобы в них всегда находилось место для транзакций управления и прерывания. Свободное время кадров может заполняться сплошными передачами (Bulk Transfers). 
4.2.3 Пакет данных 

Пакет данных состоит из поля PID, поля данных (от 0 до 1023 байтов) и поля CRC. В USB определены два типа пакетов (DATA0 и DATA1), необходимых для синхронизации. Данные передаются всегда целым числом байтов (см рис 4.7).

4.2.4 Пакет подтверждения

Пакет подтверждения (Handshake рacket) состоит только из одного 8-битного поля PID. Handshake-пакеты используются, чтобы отобразить состояние передачи данных (транзакции) и может возвращать значения, указывающие на успешный приём данных, команды приема или отбраковки, осуществлять управление потоком данных, и оповещать о состоянии останова (см рис 4-8).

Handshake-пакеты могут передаваться как в фазе подтверждения (наиболее часто), так и в фазе данных. Существует три типа пакетов подтверждения : 
·	ACK подтверждает, что пакет данных и PID приняты без ошибок. Подтверждение ACK соответствует лишь тем транзакциям, которые передают данные и в которых подтверждения ожидаются. ACK может быть возвращён хост-контроллером в случае транзакта типа IN и устройством - для транзактов OUT и SETUP. 
·	NAK сообщает о том, что устройство не приняло данные от хоста (транзакт типа OUT) или устройство не имеет данных для передачи хост-контроллеру. NAK может быть возвращен устройством только во время фазы данных для транзакций IN или в фазу подтверждения транзакции OUT. Хост-контроллер не может генерировать пакет подтверждения NAK. NAK служит для управления потоком данных с целью сообщать о том, что устройство временно не способно принимать или отправлять данные, но в конечном счёте будет в состоянии это делать без вмешательства хост-контроллера. 
·	STALL возвращается функцией в ответ на транзакцию типа IN или после фазы данных тразакции OUT. STALL сообщает о том, что устройство не может принять или передать данные, либо о том, что канал управления не отвечает на запросы. Хост-контроллер не может вернуть STALL ни при каких условиях. 

#4.3 Типы транзакций
Формат транзакции зависит от типа конечной точки, с которой идет обмен. Существует всего четыре типа транзакций: сплошные передачи (Bulk Data Transfers), управляющие посылки (Control Transfers), прерывания (Interrupt) и изохронные передачи (Isochronous Tranters). 
4.3.1 Сплошные передачи

Сплошные передачи (Bulk Data Transfer) характеризуются безошибочной передачей данных между хостом и устройством, достигаемую за счёт обнаружения ошибок и повторных передач. Сплошные транзакции имеют три фазы: маркерную, фазу данных и фазу подтверждения (см рис 4-9). В некоторых ситуациях фаза данных может быть заменена фазой подтверждения, что приведет к двухфазной структуре транзакции без передачи данных.

Когда хост-контроллер готов к приёму информации, он посылает маркерный пакет IN. В ответ конечная точка функции передаёт либо пакет данных, либо (если передача данных невозможна) пакет подтверждения NAK или STALL. Пакет NAK указывает на то, что функция временно не способна передавать данные, STALL информитует хост о том, что работа конечной точки приостановлена и требуется вмешательство системного ПО USB. Если хост получил данные без ошибки, то он отправляет пакет подтверждения ACK. Если же хост обнаружил ошибку в принятых данных, то он не отправляет функции никакого подтверждения. 
В момент готовности хост-контроллера передавать информацию, им посылается маркер OUT , за которым следует пакет данных. Если функция приняла данные без ошибки, то она генерирует один из следующих пакетов подтверждений : 
·	ACK сообщает о том, что пакет данных принят без ошибок и хост может отправлять следующий пакет. 
·	NAK информирует хост о том, что данные получены без ошибки, хост-контроллеру необходимо повторить передачу данных, т.к. функция была не в состоянии принять данные (например переполнение буфера). 
·	Если конечная точка находится в состоянии останова, то пакет STALL указывает на то, что нет необходимости повторной передачи данных хостом, поскольку функция находится в состоянии ошибки. 
Если же данные приняты с ошибкой, то никакого подтверждения не посылается.

4.3.2 Управляющие посылки

Управляющие посылки (control transfers) содержат минимум две стадии : инициализацию (SETUP stage) и стадию определения состояния (Status). Управляющие посылки могут также содержать и стадию данных, выполняющуюся между стадиями SETUP stage и Status. Во время стадии инициализации в транзакции типа SETUP пакет данных используется для передачи информации управляющей точке функции. Транзакция SETUP подобна транзакции OUT и отличается лишь идентификатором (PID). На рис. 4-10 представлен формат транзакции SETUP.

Функция, получившая пакет SETUP, должна подтвердить правильность принятого пакета данных путем выдачи пакета подтверждения ACK. В случае ошибки в данных функция не генерирует пакет подтверждения. 
Если присутствует стадия данных, то она состоит из одной или более транзакций типа IN или OUT. Все транзакции стадии данных должны быть одного направления (либо IN, либо OUT). Количество байтов, передавемых во время стадии данных и направление транзакций определяется на стадии инициализации. 
Стадия состояния является последней в управляющей посылке. Стадию состояния характеризует направление передачи данных, противоположное предыдущей стадии. Если, например, стадия данных состояла из транзакций типа OUT, то стадия состояния включает в себя только транзакции IN. На рис. 4-11 представлен различные варианты управляющих посылок.

Стадия cостояния информирует хост-контроллер о результате выполнения предшествующих стадий установки и данных. Всего возможно три варианта стадии состояния : 
·	Последовательность команд выполнилась успешно. 
·	Последовательность команд не выполнена. 
·	Функция всё ещё находится в состоянии выполнения команд. 
Информация о состоянии функции всегда передаётся в направлении от функции к хосту. При контрольной посылке типа запись функция возвращает информацию о своём состоянии во время фазы данных стадии состояния. Контрольное чтение возвращает информацию о состоянии функции в пакете подтверждения транзакции стадии состояния, после того, как хост-контроллер генерирует пакет данных нулевой длины в предыдущей фазе данных (см табл. 1).
Для начала стадии состояния контрольной пересылки типа чтение хост-контроллер посылает маркерный пакет типа OUT и пакет данных нулевого размера по каналу управления. В ответ функция в пакете подтверждения посылает информацию о своём состоянии в соответстви с таблицей. 
Для инициации стадии состояния котрольной записи хост посылает маркер IN в управляющий канал. Информацию о своём состоянии функция формирует в соответствии с таблицей, причём существует ряд важных особенностей. NAK оповещает хост о том, что функция находится всё ещё в состоянии обработки команды и хосту необходимо продолжать выполнение стадии состояния (т.е. посылку маркеров IN). В случае нормального завершения команды функция ждет подтверждения ACK от хоста, а в процессе ожидания продолжает отправлять пакеты данных нулевой длины. 
Во время стадии данных управляющий канал (функция) может вернуть подтверждение STALL из-за каких-либо ошибок, в результате чего управляющая посылка завершается без выполнения стадии состояния. 
4.3.3 Прерывания

Прерывания могут состоять из получения или отправки данных функцией (см рис 4-9). В ответ на получение маркерного пакета IN функция должна вернуть пакет данных, подтверждение NAK либо STALL. Если функция не имеет информации для передачи хосту (нет ожидающих отправку прерываний), она возвращает подтверждение NAK во время фазы данных. Функция возвращает подтверждение STALL, если находится в состоянии останова. В случае существования ожидающего передачу прерывания, функция отправляет информацию прерывания в виде пакета данных. Если хост получил данные без ошибки, то он отправляет пакет подтверждения ACK. Если же хост обнаружил ошибку в принятых данных, то он не отправляет функции никакого подтверждения. 

4.3.4 Изохронные передачи

Изохронные транзакции состоят из маркерной фазы и фазы данных (см рис 4-9). Хост-контроллер генерирует маркер IN или OUT, за которым следует фаза данных, в которой конечная точка (для IN) или хост (для OUT) передаёт данные. Изохронные передачи не содержат фазу подтверждения.