Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
АСВТ.docx
Скачиваний:
10
Добавлен:
16.09.2019
Размер:
790.1 Кб
Скачать
      1. Передача данных по протоколу

        1. Кодирование данных

Для передачи данных по шине используется дифференциальный способ передачи сигналов D+ и D- по двум проводам. Все данные кодируются с помощью метода, называемого NRZI with bit stuffing (NRZI - Non Return to Zero Invert, метод возврата к нулю с инвертированием единиц).

Вместо кодирования логических уровней как уровней напряжения USB определяет логический 0 как изменение напряжения, а логическую 1 как неизменение напряжения. Этот метод представляет собой модификацию обычного потенциального метода кодирования NRZ (Non Return to Zero, невозврат к нулю), когда для представления 1 и 0 используются потенциалы двух уровней, но в методе NRZI потенциал, используемый для кодирования текущего бита, зависит от потенциала, который использовался для кодирования предыдущего бита. Если текущий бит имеет значение 0, то текущий потенциал представляет собой инверсию потенциала предыдущего бита, независимо от его значения. Если же текущий бит имеет значение 1, то текущий потенциал повторяет предыдущий. Очевидно, что если данные содержат нули, то приемнику и передатчику достаточно легко поддерживать синхронизацию - уровень сигнала будет постоянно меняться. А вот если данные содержат длинную последовательность единиц, то уровень сигнала меняться не будет, и возможна рассинхронизация. Следовательно, для надежной передачи данных нужно исключить из кодов слишком длинные последовательности единиц. Это действие называется стаффинг (bit stuffing): после каждых шести единиц автоматически добавляется 0.

Рисунок 1

Метод кодирования NRZI со стаффингом

Существует только три возможных байта с шестью последовательными единицами: 00111111, 01111110, 111111100.

Стаффинг может увеличить число передаваемых бит до 17%, но на практике эта величина значительно меньше. Для устройств, подключаемых к шине USB, кодирование происходит прозрачно: USB-контроллеры производят кодирование и декодирование автоматически.

        1. Передача данных

Механизм передачи данных является асинхронным и блочным. Блок передаваемых данных называется USB-фреймом или USB-кадром и передается за фиксированный временной интервал. Оперирование командами и блоками данных реализуется при помощи логической абстракции, называемой каналом. Канал (pipe) — это модель взаимодействия конечной точки с программным обеспечением хоста. Внешнее устройство также делится на логические абстракции, называемые конечными точками. Конечная точка (endpoint) — это часть устройства USB, которая имеет уникальный идентификатор и является получателем или отправителем информации, передаваемой по шине USB. Таким образом, канал является логической связкой между хост-контроллером и конечной точкой внешнего устройства. Канал можно сравнить с открытым файлом.

Каждая конечная точка имеет свой номер и описывается следующими параметрами:

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

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

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

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

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

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

Любое USB-устройство имеет конечную точку с нулевым номером, которая в документации именуется Endpoint Zero или Endpoint 0. Нулевая точка позволяет хосту опрашивать устройство с целью определения его типа и параметров, выполнять инициализацию и конфигурирование устройства.

Рисунок 2

Передача кадров по протоколу USB

Имеется два типа каналов:

  • поток (stream) — это канал для передачи данных, структура которых определяется клиентским программным обеспечением. Потоки используются для передачи массивов данных, передачи данных по прерываниям и изохронной передачи данных.

  • канал сообщений (message pipe) — это канал для передачи данных, структура которых определяется спецификацией на шииу USB. Каналы сообщений применяются для передачи управляющих посылок.

Основными характеристиками каналов являются:

  • полоса пропускания канала;

  • используемый каналом тип передачи данных;

  • характеристики, соответствующие конечной точке: направление передачи данных и максимальный размер пакета.

Для передачи команд (и данных, входящих в состав команд) используется канал по умолчанию, а для передачи данных открываются либо потоковые каналы, либо каналы сообщений. Информация по каналу передается в виде пакетов (Packet). Каждый пакет начинается с поля синхронизации SYNC (SYNChronization), за которым следует идентификатор пакета PID (Packet IDentifier).

Систему USB следует разделить на три логических уровня с определенными правилами взаимодействия. Устройство USB содержит интерфейсную, логическую и функциональную части. Хост тоже делится на три части - интерфейсную, системную и программное обеспечение. Каждая часть отвечает только за определенный круг задач.

Операция обмена данными между прикладной программой и шиной USB выполняется путем передачи буферов памяти через следующие уровни:

  • Уровень клиентского ПО в хосте:

  • обычно представляется драйвером устройства USB;

  • обеспечивает взаимодействие пользователя с операционной системой с одной стороны и системным драйвером с другой.

  • Уровень системного обеспечения USB в хосте (USBD, Universal Serial Bus Driver):

  • управляет нумерацией устройств на шине;

  • управляет распределением пропускной способности шины и мощности питания;

  • обрабатывает запросы пользовательских драйверов.

  • Хост-контроллер интерфейса шины USB (HCD, Host Controller Driver):

  • преобразует запросы ввода/вывода в структуры данных, по которым хост-контроллер выполняет физические транзакции;

  • работает с регистрами хост-контроллера.

Уровень клиентского программного обеспечения определяет тип передачи данных, необходимый для выполнения затребованной прикладной программой операции. После определения типа передачи данных этот уровень передает системному уровню следующее:

  • буфер памяти, называемый клиентским буфером;

  • пакет запроса на в/в (IRP, Input/output Request Packet), указывающий тип необходимой операции. IRP содержит только сведения о запросе (адрес и длина буфера в оперативной памяти). Непосредственно обработкой запроса занимается системный драйвер USB.

Уровень системного драйвера USB необходим для управления ресурсами USB. Он отвечает за выполнение следующих действий:

  • распределение полосы пропускания шины USB;

  • назначение логических адресов устройств каждому физическому USB-устройству;

  • планирование транзакций.

Логически передача данных между конечной точкой и ПО производится с помощью выделения канала и обмена данными по этому каналу. Клиентское ПО посылает IPR-запросы уровню USBD. Драйвер USBD разбивает запросы на транзакции по следующим правилам:

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

  • все подробности отработки транзакций (такие как ожидание готовности, повтор транзакции при ошибке, неготовность приемника и т. д.) до клиентского ПО не доводятся;

  • ПО может только запустить запрос и ожидать или выполнения запроса или выхода по тайм-ауту;

  • устройство может сигнализировать о серьезных ошибках, что приводит к аварийному завершению запроса, о чем уведомляется источник запроса.

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

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

  • извлекает из списка очередную транзакцию и передает ее уровню хост‑контроллера интерфейса шины USB;

  • отслеживает состояние каждой транзакции вплоть до ее завершения.

Хост-контроллер интерфейса шины USB формирует кадры. Кадры передаются последовательной передачей бит по методу NRZI. Данные передаются в виде пакетов. В интерфейсе USB используется несколько разновидностей пакетов:

  • пакет-маркер (token paket) описывает тип и направление передачи данных, адрес устройства и порядковый номер конечной точки;

  • пакет с данными (data packet) содержит передаваемые данные;

  • пакет согласования (handshake packet) предназначен для сообщения о результатах пересылки данных.

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

Все передачи данных по интерфейсу инициируются хостом. Каждая транзакция состоит из трех фаз: фаза передачи пакета-признака, фаза передачи данных и фаза согласования.

Таким образом:

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

  • каждая передача состоит из одной или нескольких транзакций;

  • каждая транзакция состоит из пакетов;

  • каждый пакет состоит из идентификатора пакета, данных (если они есть) и контрольной суммы.

Рисунок 3

Структура кадров протокола USB