Скачиваний:
180
Добавлен:
13.06.2014
Размер:
6.55 Mб
Скачать

35.5. Функциональное описание

35.5.1 Общие сведения о стандарте полноскоростной USB-связи версии 2.0

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

Рисунок 35.3. Пример управления полноскоросостной USB-связью версии 2.0

35.5.1.1 Тип полноскоростной USB-связи версии 2.0

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

Таблица 35.2. Коммуникационный поток USB

35.5.1.2 Транзакции шины USB

Передача

Направление

Пропускная способность

Размер конечной точки

Детекция ошибок

Повторение

Управление

Двунаправленное

Не гарантирована

8, 16, 32, 64

Есть

Автоматич.

Изохронная

Однонаправленное

Гарантирована

1-1023

Есть

Нет

Прерывание

Однонаправленное

Не гарантирована

меньше или равно 64

Есть

Есть

Поток

Однонаправленное

Не гарантирована

8, 16, 32, 64

Есть

Есть

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

  1. Транзакция "Установка".

  2. Транзакция "Ввод данных".

  3. Транзакция "Вывод данных".

  4. Транзакция "Ввод статуса".

  5. Транзакция "Вывод данных".

35.5.1.3 Определения событий USB-передачи

Как будет показано ниже, передачи - последовательность событий, происходящие на шине USB.

Таблица 35.3. События USB-передачи

Передачи "Управление" (прим. 1, 3)

 Транзакция "Установка" > транзакция "Ввод данных" > транзакция "Вывод статуса".

 Транзакция "Установка" > транзакция "Вывод данных" > транзакция "Ввод статуса".

 Транзакция "Установка" > транзакция "Ввод статуса".

Передача "Ввод прерывания" (в направлении устройство-хост)

 Транзакция "Ввод данных" > транзакция "Ввод данных"

Передача "Вывод прерывания" (в направлении хост-устройство)

 Транзакция "Вывод данных" > транзакция "Вывод данных"

Передача "Изохронный ввод" (прим. 2) (в направление устройство-хост)

 Транзакция "Ввод данных" > транзакция "Ввод данных"

Передача "Изохронный вывод" (прим. 2) (в направлении хост-устройство)

 Транзакция "Вывод данных" > транзакция "Вывод данных"

Передача "Ввод потока" (в направлении устройство-хост)

 Транзакция "Ввод данных" > транзакция "Ввод данных"

Передача "Вывод потока" (в направлении хост-устройство)

 Транзакция "Вывод данных" > транзакция "Вывод данных"

Прим.:

  1. Передача "Управления" должна использовать конечные точки без переключающихся банков памяти.

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

  3. Передачи "Управление" могут быть отменены с помощью процедуры квитирования останова.

35.5.2 Управление транзакциями периферийного модуля USB-устройства версии 2.0

35.5.2.1 Транзакция "Установка"

Установка - специальный тип транзакции в направлении хост-устройство, используемый в ходе передач "Управление". Передачи "Управление" должны выполняться с помощью конечных точек, которые не используют переключающихся банков памяти. Обработка транзакции "Установка" выполняется программно, как можно быстрее. Она используется для передачи запросов от хосту к устройству. После передачи, запросы обрабатываются USB-устройством и могут потребовать большего числа аргументов. Аргументы передаются в устройство с помощью транзакции "Вывод данных", которая следует за транзакцией "Установка". Данные запросы могут также возвращать данные. Данные передаются хосту транзакцией "Ввод данных", которая следует за транзакцией "Установка". Транзакция "Статус" завершает передачу управления.

После приема конечной точкой передачи "Установка":

  • USB-устройство автоматически подтверждает пакет "Установка"

  • устанавливается бит RXSETUP в регистре UDP_ CSRx

  • генерируется прерывание конечной точки до тех пор, пока не сбросится бит RXSETUP. Если для данной конечной точки активировано прерывание, то оно поступает в микроконтроллер.

Таким образом, программа должна следить за состоянием бита RXSETUP путем опроса регистра UDP_ CSRx или ожидать прерывание, а затем считать пакет "Установка" из буфера FIFO и сбросить бит RXSETUP. RXSETUP не возможно сбросить до тех пор, пока пакет "Установка" не будет считан из буфера FIFO. В противном случае, USB-устройство должно принять следующую передачу "Вывод данных" и перезаписать его в буфер FIFO поверх пакета "Установка".

Рисунок 35.4. Транзакция "Установка", следующая за транзакцией "Вывод данных"

35.5.2.2 Транзакция "Ввод данных"

Транзакции "Ввод данных" используются в передачах "Управление", "Изохронная", "Поток" и "Прерывание" и выполняют передачу данных в направлении от устройства к хосту. В изохронных передачах транзакции "Ввод данных" должны выполняться с помощью конечных точек, которые поддерживают переключающиеся банки памяти.

35.5.2.3 Использование конечных точек без переключающихся банков памяти

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

  1. Микроконтроллер проверяет возможность записи в FIFO путем опроса TXPKTRDY в регистре конечной точки UDP_ CSRx (TXPKTRDY должен быть равен нулю).

  2. Микроконтроллер записывает передаваемые данные в FIFO конечной точки (регистр UDP_ FDRx).

  3. Микроконтроллер уведомляет периферийный модуль USB о завершении записи данных путем установки TXPK-TRDY в регистре конечной точки UDP_ CSRx.

  4. USB-устройство уведомляет микроконтроллер об освобождении FIFO конечной точки после установки TXCOMP в регистре UDP_ CSRx конечной точки. После этого генерируется прерывание соответствующей конечной точки до тех пор, пока будет установлен бит TXCOMP.

TXCOMP устанавливается USB-устройством после приема сигнала подтверждения пакета ввода данных "ACK PID". Прерывание будет генерироваться до тех пор, пока будет установлен бит TXCOMP.

Прим: более детальную информацию по протокольному слою "Ввод данных" см. в разделе 8 "Universal Serial Bus Specification, Rev 2.0".

Рисунок 35.5. Передача "Ввод данных" для конечной точки без переключающихся банков памяти

35.5.2.4 Использование конечных точек с переключающимися банками памяти

Использование конечной точки с переключающимися банками памяти необходимо в ходе изохронной передачи. Для гарантирования постоянства пропускной способности шины микроконтроллер должен подготовить следующие данные во время передачи текущих данных USB-устройством. Таким образом, необходимо использовать два банка памяти. Когда один из банков памяти назначен микроконтроллеру, другой используется USB-устройством.

Рисунок 35.6. Переключение банков памяти в ходе передачи "Ввод данных"

При выполнении транзакций "Ввод данных" при использовании конечной точки с переключающимися банками памяти необходимо придерживаться следующей последовательности действий:

  1. Микроконтроллер оценивает возможность записи в FIFO путем опроса бита TXPKTRDY регистра UDP_ CSRx, который должен быть равен нулю.

  2. Микроконтроллер записывает первые передаваемые данные в FIFO (банк 0), помещая их в регистр конечной точки FDRx.

  3. Микроконтроллер уведомляет модуль USB о завершении записи данных в банк 0 FIFO путем установки бита TXPKTRDY в регистре конечной точки UDP_ CSRx.

  4. Микроконтроллер записывает вторую часть передаваемых данных FIFO (банк 1), не ожидая сброса TXPKTRDY, помещая их в регистр конечной точки UDP_ FDRx.

  5. Микроконтроллер уведомляется со стороны USB-устройства об освобождении первого банка после установки TXCOMP в регистре конечной точки UDP_ CSRx. До тех пор, пока установлен бит TXCOMP, будет генерироваться прерывание.

  6. Сразу после получения этого уведомления микроконтроллер сообщает USB-устройству, что подготовлена вторая часть данных для передачи, для чего устанавливает бит TXPKTRDY в регистре конечной точки UDP_ CSRx.

  7. На данном этапе банк 0 свободен и микроконтроллер может подготавливать третью часть данных для оправки.

Рисунок 35.7. Передача "Ввод данных" для конечной точки с переключающимися банками памяти

Предупреждение: существует одна программная критическая ситуация, вызывная тем фактом, что сразу после заполнения второго банка памяти драйвер должен ожидать TX_COMP для установки TX_PKTRDY. Если задержка между установлением TX_COMP и установлением TX_PKTRDY будет достаточно долгой, то некоторые пакеты "Ввод данных" могут оказаться без подтверждения, что снизит пропускную способность шины.

35.5.2.5 Транзакция "Вывод данных"

Транзакции "Вывод данных" используются в передачах "Управление", "Изохронная", "Поток" и "Прерывание" и выполняют передачу данных в направлении хост-устройство. Транзакции "Вывод данных" в изохронных передачах должны выполняться с помощью конечных точек, поддерживающих переключение банков памяти.

35.5.2.6 Транзакция "Вывод данных" без переключающихся банков памяти

Для выполнения транзакции "Вывод данных", использующей конечную точку без переключающихся банков, необходимо придерживаться следующей последовательности:

  1. Хост генерирует пакет "Вывод данных".

  2. Данный пакет принимается конечной точкой USB-устройства. До тех пор, пока микроконтроллер используется FIFO, связанный с данной конечной точкой, хосту возвращается идентификатор пакета "Нет подтв.". Как только FIFO станет доступным, данные в него будут записаны USB-устройством и подтверждение "Подтв." будет автоматически передано хосту.

  3. USB-устройство уведомляет микроконтроллер о завершении приема данных через бит RX_DATA_BK0 в регистре UDP_ CSRx. До тех пор, пока установлен бит RX_DATA_BK0, будет генерироваться прерывание.

  4. Количество записанных байт в FIFO можно определить по значению поля RXBYTECNT в регистре конечной точки UDP_ CSRx.

  5. Микроконтроллер копирует данные из памяти конечной точки в собственную память. Считывание данных из FIFO выполняется путем чтения регистра конечной точки UDP_ FDRx.

  6. Микроконтроллер уведомляет USB-устройство о завершении копирования путем сброса бита RX_DATA_BK0 в регистре конечной точки UDP_ CSRx.

  7. Новый пакет "Вывод данных" может приниматься USB-устройством.

Рисунок 35.8. Передача "Вывод данных" для конечных точек без переключающихся банков памяти

П

рерывание генерируется до тех пор, пока установлен бит RX_DATA_BK0. После сброса RX_DATA_BK0 нельзя выполнять обмен содержимым памяти между USB-устройством, FIFO и памятью микроконтроллера. В противном случае, USB-устройство вынуждено будет принимать очередную передачу "Вывод данных" и перезаписывать текущий пакет "Вывод данных" в FIFO.

35.5.2.7 Использование конечных точек с переключающимися банками памяти

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

Рисунок 35.9. Передача "Вывод данных" с использованием конечных точек с переключающимися банками памяти

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

  1. Хост генерирует пакет "Вывод данных".

  2. Данный пакет принимается конечной точкой USB-устройства. Он помещается в банк 0 FIFO конечной точки.

  3. USB-устройство отправляет хосту идентификатор пакета "Подтв.". Хост может незамедлительно отправить второй пакет "Вывод данных" Он принимается устройством и копируется в банк 1 FIFO.

  4. USB-устройство уведомляет микроконтроллер о завершении приема данных через бит RX_DATA_BK0 в регистре конечной точки UDP_ CSRx. Прерывание генерируется до тех пор, пока установлен бит RX_DATA_BK0.

  5. Количество принятых байт в буфер FIFO можно определить путем чтения RXBYTECNT в регистре конечной точки UDP_CSRx.

  6. Микроконтроллер копирует принятые конечной точкой данные в собственную память. Принятые данные становятся доступными путем чтения регистра конечной точки UDP_ FDRx.

  7. Микроконтроллер уведомляет USB-устройство о завершении копирования путем сброса бита RX_DATA_BK0 в регистре конечной точки UDP_ CSRx.

  8. Третий пакет "Вывод данных" может быть принят USB-устройством и скопирован в банк 0 FIFO.

  9. После приема второго пакета "Вывод данных" устанавливается флаг RX_DATA_BK1 в регистре конечной точки UDP_ CSRx для уведомления микроконтроллера о завершении приема. До тех пор пока установлен флаг RX_DATA_BK1, будет генерироваться прерывание.

  10. Микроконтроллер копирует принятые данные из памяти конечной точки в собственную память. Считывание принятых данных выполняется путем чтения регистра конечной точки UDP_FDRx.

  11. Микроконтроллер уведомляет USB-устройство о завершении копирования путем сброса RX_DATA_BK1 в регистре конечной точки UDP_ CSRx.

  12. Четвертый пакет "Вывод данных" может быть принят USB-устройством и скопирован в банк 0 FIFO.

Рисунок 35.10. Передача "Вывод данных" для конечной точки с переключающимися банками памяти

Прим.: прерывание генерируется до тех пор, пока установлен флаг RX_DATA_BK0 или RX_DATA_BK1.

Предупреждение:в случае, если окажутся установленными оба бита RX_DATA_BK0 и RX_DATA_BK1, то определить, какой из них был установлен первым, будет невозможно. Такая ситуация может возникнуть в случае, если во время выполнения микроконтроллером других задач USB-хост заполнил оба банка памяти USB-устройства. После возврата программы микроконтроллера к драйверу USB-связи оба флага будут установлены.

Соседние файлы в папке ПЦиПУ. материалы для Курсового проекта Тютякин А.В.