Протокол

Модель передачи данных

Каждое устройство на шине USB при подключении авто­матически получает свой уникальный адрес. Логически устройство представляет собой набор независимых конечных точек (endpoint, ЕР), с которыми хост-кон­троллер (и клиентское ПО) обменивается информацией. Каждая конечная точка имеет свой номер и описывается следующими параметрами:

♦ требуемая частота доступа к шине и допустимые задержки обслуживания;

♦ требуемая полоса пропускания канала;

♦ требования к обработке ошибок;

♦ максимальные размеры передаваемых и принимаемых пакетов;

♦ тип передачи;

♦ направление передачи (для передач массивов и изохронного обмена).

Каждое устройство обязательно имеет конечную точку с номером 0, используемую для инициализации, общего управления и опроса состояния устройства. Эта точ­ка всегда сконфигурирована при включении питания и подключении устройства к шине.

Низкоскоростные устройства могут иметь до двух дополнительных точек, полноскоростные — до 15 точек ввода и 15 точек вывода (протокольное ограничение).

Каналом (pipe) в USB называется модель передачи данных между хост-контрол­лером и конечной точкой устройства. Имеются два типа каналов: потоки и сооб­щения.

Поток (stream) доставляет данные от одного конца канала к другому, он всегда однонаправленный. Один и тот же номер конечной точки может использо­ваться для двух поточных каналов — ввода и вывода. Поток может реализовывать: передачу массивов, изрхронный и прерывания.

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

Каналы характеризуются: полосой пропускания, типом сервиса, размером буфера и т. п.).

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

 

 

Все обмены (транзакции) с устройствами USB состоят из двух-трех пакетов. Каж­дая транзакция планируется и начинается по инициативе контроллера, который посылает пакет-маркер (token packet). Он описывает тип и направление переда­чи, адрес устройства USB и номер конечной точки.

В каждой транзакции возмо­жен обмен только между адресуемым устройством (его конечной точкой) и хос­том. Адресуемое маркером устройство распознает свой адрес и готовится к обмену. Источник данных (определенный маркером) передает пакет данных (или уведом­ление об отсутствии данных, предназначенных для передачи). После "успешного" приема пакета приемник данных посылает пакет квитирования. Хост-контроллер организует обмены с устройствами согласно своему плану рас­пределения ресурсов. Контроллер циклически (с периодом 1,0±0,0005 мс) формирует кадры (frames), в которые укладываются все запланированные транзакции (рис. 4.5). Каждый кадр начинается с посылки маркера SOF (Start Of Frame). В конце каждого кадра выделяется интервал времени EOF (End Of Frame), на вре­мя которого хабы запрещают передачу по направлению к контроллеру.

Для обнаружения ошибок передачи каждый пакет имеет контрольные поля CRC-кодов (избыточный циклический контроль), позволяющие обнаруживать все одиночные и двойные битовые ошибки. Аппаратные средства обнаруживают ошибки передачи, а контроллер автоматиче­ски производит трехкратную попытку передачи. Если повторы безуспешны, со­общение об ошибке передается клиентскому ПО.