В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > AVR
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


22.11. Передача пакета STALL

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

  • STALLRQ (разрешение запроса STALL)
  • STALLRQC (отключение запроса STALL)
  • STALLEDI (флаг прерывания по отправке STALL)

Чтобы следующим запросом был отправлен пакет подтверждения STALL, необходимо установить бит STALLRQ. Все последующие запросы будут подтверждаться с помощью STALL до тех пор, пока установлен бит STALLRQC.

Установка STALLRQC приводит к автоматическому обнулению бита STALLRQ. Бит STALLRQC моментально обнуляется аппаратными средствами сразу после его программной установки. Таким образом, при опросе данного бита никогда не возвращается единичное значение.

При каждой отправке подтверждения типа STALL USB-контроллер устанавливает флаг STALLEDI, при этом, генерируется прерывание EPINTx (если оно было разрешено).

Входящие пакеты будут отклонены (RXOUTI и RWAL не будут установлены).

После этого, Host-сторона отправит команду для сброса функции STALL: все, что должна сделать программа в этом случае - это установить бит STALLRQC и сбросить конечную точку.

22.11.1. Особенности работы конечных точек типа CONTROL

Запрос SETUP всегда подтверждается пакетом ACK.

Если для конечной точки типа CONTROL задана передача пакета STALL и, при этом, появляется запрос SETUP, этот запрос подтверждается пакетом ACK, а флаги запроса (STALLRQ) и отправки (STALLEDI) автоматически сбрасываются (RXSETUPI=1, TXIN=0, STALLED=0, TXINI=0...).

Такой механизм упрощает управление процессом перечисления. Если команда не поддерживается или содержит ошибку, программа устанавливает флаг запроса STALL и возвращается к основной задаче, ожидая следующего запроса SETUP.

Данная функция совместима с тестом из раздела 8, в котором отправляется дополнительный статус для GET_DESCRIPTOR. Программа устанавливает запрос STALL только после приема статуса. Все дополнительные статусы будут автоматически подтверждаться пакетом STALL вплоть до следующего запроса SETUP.

22.11.2. Подтверждение типа STALL и механизм подтверждения

Механизм повтора (RETRY) имеет более высокий приоритет, чем подтверждение типа STALL. Подтверждение типа STALL отправляется, если установлен бит запроса STALLRQ и если нет необходимости в повторе.

22.12. Управление конечной точкой типа CONTROL

Запрос SETUP всегда подтверждается пактом ACK. После получения нового пакета SETUP запускается прерывание RXSTPI (если прерывание было разрешено). Прерывание RXOUTI не запускается.

Поля FIFOCON и RWAL не имеют отношения к конечным точкам CONTROL. В связи с этим, программа при работе с такими конечными точками не должна обращаться к этим полям. При их опросе всегда возвращаются нулевые значения.

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

  • RXSTPI становится равным единице после приема нового запроса SETUP. Его необходимо сбросить программно для подтверждения пакета и для сброса банка конечной точки.
  • RXOUTI становится равным единице при приеме данных типа OUT. Его необходимо сбросить программно для подтверждения пакета и сброса банка конечной точки.
  • TXINI становится равным единице, когда банк готов для приема нового пакета типа IN. Его необходимо сбросить программно для отправки пакта и сброса банка конечной точки.

22.12.1. Запись в конечную точку CONTROL

На следующем рисунке демонстрируется транзакция записи конечной точки CONTROL. На этапе передачи статуса, контроллеру нет необходимости отправлять NAK при передаче первого пакета TOKEN в направлении IN:

  • если программа знает точное количество подлежащих чтению байт дескриптора, он может учесть это на этапе СТАТУС, отправив ZLP в следующей передаче пакета TOKEN в направлении IN;
  • или он может прочитать байты и опросить бит NAKINI, который сигнализирует об отправке всех байт Host-стороной и о том, что транзакция сейчас находится на этапе СТАТУС.

22.12.2. Чтение конечной точки CONTROL

Следующий рисунок демонстрирует транзакцию чтения конечной точки CONTROL. USB-контроллер должен управлять одновременными запросами записи из ЦПУ и Host-стороны.

Подтверждение NAK всегда генерируется в привязке к первой команде этапа СТАТУС.

Когда контроллер обнаруживает этап СТАТУС, стираются все данные записанные ЦПУ, а сброс TXINI не оказывает никакого влияния.

Программа проверяет завершение приема или передачи.

Повтор OUT всегда подтверждается ACK. Данный прием:

  • устанавливает флаг RXOUTI (флаг приема данных OUT)
  • устанавливает флаг TXINI (флаг завершения передачи данных и готовности принимать новые данные)

Алгоритм программы:

установка готовности передачи
ожидание (завершения передачи или завершения приема)
если прием завершен, сброс флаг и возврат
если передача завершена, продолжаем

После приема OUT на этапе СТАТУС USB-контроллер ожидает запроса SETUP. Запрос SETUP имеет приоритет над любым другим запросом и должен быть подтвержден ACK. Это означает, что после приема SETUP любой другой флаг должен быть обнулен, а FIFO сброшен.

ПРЕДУПРЕЖДЕНИЕ: счетчик байт сбрасывается, когда принят пакет OUT нулевой длины (ZLP). Программа должна учитывать этот нюанс.

22.13. Управление конечной точкой OUT

Пакеты OUT отправляются Host-ом. Все данные могут быть считаны ЦПУ, который подтверждает или нет банк после его освобождения.

22.13.1. Обзор

Первой должна быть сконфигурирована конечная точка.

После каждого заполнения текущего банка устанавливаются биты RXOUTI и FIFOCON. Если установлен бит RXOUTE, это приводит к запуску прерывания. Программа может подтвердить USB-прерывание путем сброса бита RXOUTI. Для освобождения текущего банка программа выполняет чтение данных и сброс бита FIFOCON. Если конечная точка OUT состоит из нескольких банков, то вместе со сбросом бита FIFOCON произойдет смена банка. Обновление бит RXOUTI и FIFOCON осуществляется аппаратными средствами в соответствии со статусом нового банка.

Сброс RXOUTI всегда должен предшествовать сбросу FIFOCON.

Бит RWAL всегда отражает состояние текущего банка. Данный бит устанавливается, когда программа может выполнить чтение данных из банка, и сбрасывается, когда банк пуст.

22.13.2. Подробное описание

22.13.2.1

ЦПУ считывает данные в соответствии со следующей последовательностью:

  • По завершении заполнения банка Host-стороной инициируется запуск прерывания конечной точки (EPINTx), но только при условии, что оно разрешено (RXOUTE =1) и установлен бит RXOUTI. В зависимости от используемой архитектуры программы, ЦПУ может альтернативно выполнить опрос бита RXOUTI или FIFOCON;
  • ЦПУ подтверждает прерывание путем сброса RXOUTI;
  • ЦПУ может выполнить чтение количества байт (N) в текущем банке (N=BYCT);
  • ЦПУ может выполнить чтение данных из текущего банка (N чтений UEDATX);
  • ЦПУ может освободить банк путем сброса FIFOCON по завершении считывания всех данных, т.е.:
    • после N чтений UEDATX;
    • сразу после аппаратного сброса RWAL.

Если конечная точка использует 2 банка, то во время чтения ЦПУ одного банка Host-сторона может заполнять другой банк. Затем, когда ЦПУ сбрасывает FIFOCON, следующий банк может быть уже готов и RXOUTI устанавливается незамедлительно.



<--Предыдущая страница Оглавление Следующая страница -->