Главная » Ассемблер, Железо » Порядок выполнения транзакций USB

0

Все транзакции на шине USB выполняются под управлением хост-

контроллера. Передача данных возможна только по запросам хоста:

периферийные устройства не могут выдать на шину какую-либо информацию по собственной инициативе, не могут самостоятельно посылать запросы прерываний.

Разные способы передачи отличаются друг от друга своими характеристиками, к которым относятся:

•     формат данных;

•     направление передачи данных;

•     ограничения на размер пакета;

•     ограничения на доступ к шине,

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

•     требуемая последовательность передачи данных;

•     способ обработки ошибок. Различают следующие типы транзакций:

•     передача команды, хост передает заданной конечной точке код команды;

•     изохронная передача данных, хост передает заданной конечной точке блок данных, не ожидая подтверждения (при сбоях операция не повторяется);

•     передача данных с подтверждением’, хост передает заданной конечной точке блок данных и ожидает подтверждение приема (при сбоях операция повторяется, время выполнения не ограничено);

•     изохронный прием данных, заданная конечная точка передает хосту блок данных, не ожидая подтверждения (при сбоях операция не повторяется);

•     прием данных с подтверждением-, заданная конечная точка передает хосту блок данных и ожидает подтверждения приема (при сбоях операция повторяется, время выполнения не ограничено).

Транзакция передачи команды включает в себя следующие операции:

•     хост посылает маркер SETUP, содержащий номер функции и номер конечной точки, для которой предназначена команда;

•     хост посылает выбранной конечной точке пакет данных со сброшенным битом синхронизации (DATA0), содержащий 8-байтный код команды;

•     функция посылает хосту пакет подтверждения.

Транзакция передачи данных с подтверждением включает следующие операции:

•     хост посылает маркер OUT, содержащий номер функции и номер конечной точки, для которой предназначены данные;

•     хост посылает выбранной конечной точке пакет данных;

•     функция посылает хосту пакет подтверждения. Транзакция приема данных с подтверждением включает следующие операции:

•     хост посылает маркер IN, содержащий номер функции и номер конечной точки, от которой запрашиваются данные;

•     выбранная конечная точка передает хосту пакет данных или пакет подтверждения (NAK — данные не готовы, STALL — сбой)

•     если хост получил пакет данных, он посылает пакет подтверждения (АСК).

Транзакция изохронной передачи данных включает следующие операции:

•     хост посылает маркер OUT, содержащий номер функции и номер конечной точки, для которой предназначены данные;

•     хост посылает выбранной конечной точке пакет данных со сброшенным битом синхронизации (ОАТАО).

Транзакция изохронного приема данных включает следующие операции:

•     хост посылает маркер IN, содержащий номер функции и номер конечной точки, от которой запрашиваются данные;

•     выбранная конечная точка передает хосту пакет данных со сброшенным битом синхронизации (DATA0).

При выполнении транзакций используется три типа пакетов подтверждения:

•     АСК — информация принята получателем без ошибок, операция успешно завершена;

•     NAK — функция занята (не готова к приему или передаче данных);

•     STALL — произошел сбой при выполнении операции, функция не может принять или передать данные.

Если при выполнении транзакции передачи данных с подтверждением в пакете данных обнаружена ошибка по контрольному коду CRC, получатель пакета данных не высылает пакет подтверждения. Отправитель при отсутствии подтверждения от получателя должен зафиксировать ошибку передачи данных и повторить транзакцию.

Типы ПОСЫЛОК

Архитектура USB предусматривает четыре типа посылок.

•       Управляющие посылки (Control Transfers) используются хост- контроллером конфигурирования устройства. Процесс конфигурирования предусматривает опрос устройства (с целью получения информации о типе и свойствах устройства) и настройку параметров устройства на заданный режим работы.

•       Передачи массивов данных (Bulk Data Transfers) применяются, когда требуется обеспечить гарантированную доставку данных от хоста к функции или от функции к хосту, но время доставки не ограничено. Передачи массивов данных характерны для принтеров и сканеров.

•       Передачи по прерываниям (Interrupt Transfers) используются ‘ в том случае, когда требуется передавать одиночные пакеты данных небольшого размера, каждый пакет требуется гарантированно передать за ограниченное время, а операции передачи носят спонтанный (случайный) характер. Передача по прерываниям характерна для клавиатуры и координатных устройств: джойстика, мыши и т. п.

•       Изохронные передачи (Isochronous Transfers) применяются для обмена данными в «реальном времени», когда на каждом временном интервале требуется передавать строго определенное количество данных, но доставка информации не гарантирована (передача данных ведется без повторения при сбоях, допускается потеря пакетов). Изохронные передачи обычно применяются мультимедийными устройствах для передачи аудио- и видеоданных.

Порядок передачи управляющих посылок

Есть три типа управляющих посылок:

•       посылка записи данных (Control Write);

•       посылка чтения данных (Control Read);

•       посылка без данных (No-data Control).

Управляющая посылка записи данных включает следующие транзакции:

•       передача команды;

•       передача (с подтверждением) одного или нескольких пакетов данных;

•       прием (с подтверждением) пустого пакета данных, подтверждающего успешное завершение операции.

Управляющая посылка чтения данных включает следующие транзакции:

•           передача команды;

•       прием (с подтверждением) одного или нескольких пакетов данных;

•       передача (с подтверждением) пустого пакета данных, подтверждающего успешное завершение операции.

Управляющая посылка без данных включает следующие транзакции:

•           передача команды;

•       прием (с подтверждением) пустого пакета данных, подтверждающего успешное завершение операции.

При выполнении транзакции передачи команды признак синхронизации данных должен быть сброшен в ноль (блок данных, содержащий код команды, имеет PID DATA0).

Если команда предполагает приём или передачу данных, то после каждой транзакции признак синхронизации данных инвертируется: первый блок данных имеет идентификатор DATA1, второй — DATA0, третий — DATA1 и т. д.

Пустой пакет данных, подтверждающий завершение управляющей посылки, должен иметь идентификатор DATA1.

При передаче управляющей посылки максимальный размер пакета для Полноскоростного устройства может составлять 8, 16, 32 или 64 байта, а для низкоскоростного всегда равен 8 байтам.

ПРИМЕЧАНИЕ

На практике для передачи сообщений по Основному каналу сообщений всегда используется максимальный размер пакета, равный 8 байтам.

Порядок передачи массивов данных

Различают два вида передачи массивов:

•           передача массива данных от хоста к конечной точке (Bulk Write);

•           прием хостом массива данных от конечной точки (Bulk Read). Передача данных от хоста к конечной точке состоит из следующих друг за другом транзакций передачи данных с подтверждением, а передача данных от конечной точки к хосту — из следующих друг за другом транзакций приема данных с подтверждением. И в том, и в другом случае перед началом передачи массива триггер синхронизации данных должен быть сброшен в 0: при выполнении первой транзакции блок данных имеет идентификатор DAT АО, второй — DATA1, третий – DATA0 и т. д.

Прием и передачу массивов данных могут выполнять только полноскоростные устройства. Максимальный размер пакета при передаче массива может быть равен 8, 16,32 или 64 байтам (обычно используется значение 64 байта).

Порядок передачи данных по прерываниям

Различают два вида передачи по прерываниям:

•           передача данных от хоста к конечной точке по прерыванию;

•           прием данных хостом от конечной точки по прерыванию. Передача данных по прерыванию заключается в выполнении транзакции передачи пакета данных (с подтверждением) от хоста к конечной точке. Прием данных заключается в выполнении транзакции приема пакета данных (с подтверждением) от конечной точки. При приеме или передаче каждого блока данных происходит переключение триггера данных. Первый передаваемый (или принимаемый) блок имеет идентификатор DATA0, следующий — DATA1 и т. д. Максимальный размер пакета при передаче по прерываниям для низкоскоростного устройства не может быть более 8 байт, для полноскоростного — более 64 байт.

Порядок выполнения изохронной передачи

Различают два вида изохронной передачи:

•           изохронная передача данных от хоста к конечной точке;

•           изохронный прием данных хостом от конечной точки. Изохронная передача данных заключается в выполнении транзакции передачи пакета данных (без подтверждением) от хоста к конечной точке. Изохронный прием данных заключается в выполнении транзакции приема пакета данных (без подтверждения) от конечной точки. Состояние триггера данных при изохронной передаче игнорируется, но рекомендуется сбросить его в ноль перед началом передачи. Изохронную передачу могут выполнять только полноскоростные устройства. Максимальный размер пакета данных при изохронной передаче — 1023 байта.

Структура кадра USB

Длительность каждого кадра USB по времени равна одной миллисекунде. Хост-контроллер в начале каждого кадра генерирует маркер начала кадра, после чего начинает выполнять передачу данных. Передачи внутри кадра выполняются в следующем порядке:

•           изохронные передачи;

•           передачи по прерываниям;

•           передачи управляющих посылок;

•           передачи массивов данных.

Таким образом, изохронные передачи имеют высший приоритет, а передачи массивов данных — самый низкий.

Источник: Кулаков В. К90 Программирование на аппаратном уровне: специальный справочник (+дискета). 2-е издание. — СПб.: Питер, 2003. — 847 е.: ил.

По теме:

  • Комментарии