AT90USB162: USB controller (контроллер интерфейса USB) |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||
Микроконтроллер AT90USB162 (AT90USB162MU) из семейства AVR USB компании Atmel имеет в своем составе аппаратный интерфейс USB, и поддерживает спецификацию USB 2.0 на скорости до Full-speed включительно. В этой статье приведен перевод раздела даташита Atmel, посвященный контроллеру USB этого чипа. Даташит Atmel на чип AT90USB162 (doc7707.pdf) написан довольно коряво, пестрит недочетами и опечатками. В переводе я как мог, постарался это исправить. [19.1 Возможности контроллера USB AT90USB162] 1. Поддерживается скорость full-speed (high-speed не поддерживается). На микроконтроллерах AT90USB162 удобно реализовывать несложные устройства USB (программаторы, устройства ввода и вывода данных, клавиатуры, мыши и т. п.). Поддерживается только режим устройства USB, режим хоста USB не поддерживается. [19.2 Блок-диаграмма] Контроллер USB предоставляет аппаратуру для интерфейса к соединению USB и к потоку данных, который попадает в ячейки DPRAM. Для тактирования контроллера USB необходима опорная тактовая частота 48 МГц ±0.25% (для совместимости с Full-speed), которая получается на выходе внутренней системы PLL. PLL генерирует внутреннюю высокую частоту (48 МГц) для интерфейса USB из внешней более низкой частоты (получаемой с помощью кварцевого резонатора или генератора, подключенного на вход тактов XTAL1). Возможны 2 варианта для частоты внешнего кварцевого резонатора (или генератора) - 8 МГц или 16 МГц (при этом в зависимости от выбора питающего напряжения возможны предпочтения, см. далее рис. 19.2). Для качественной работы USB необходима высокая стабильность частоты и низкий уровень дрожания фазы (малый джиттер). Тактовая частота 48 МГц используется при генерации частоты тактирования битов 12 МГц для Full-speed принимаемых по USB дифференциальных сигналов данных и для передачи данных на полной скорости устройства USB. Восстановление тактовой частоты осуществляется с помощью блока DPLL, который удовлетворяет спецификации шины USB по джиттеру. Чтобы обеспечить требуемые для USB электрические характеристики, ножки сигналов интерфейса USB (D+ и D-) должны получать питание в диапазоне от 3.0 до 3.6V. Микроконтроллер AT90USB82 (AT90USB162) может питаться от напряжения до 5.5V благодаря наличию встроенного в него внутреннего регулятора напряжения 3.3V (его выход выведен на ножку 27 UCAP). Рис. 19-1. Обзорная блок-схема контроллера USB. Пояснения по блок-схеме: D+, D- ножки микроконтроллера, на которые подключаются сигнальные линии интерфейса USB. [Общие указания по применению] В зависимости от напряжения питания целевой схемы (в которой применяется микроконтроллер AT90USB162) нужно использовать разную аппаратную реализацию. Рис. 19-2. Рабочие режимы в зависимости от тактовой частоты кварца и напряжения питания. 19.3.1 Bus Powered device (устройство USB, питаемое от шины USB). Рис. 19-3.Типичное питание от шины USB, включение микроконтроллера при 5V I/O. Рис. 19-4.Типичное питание от шины USB, включение микроконтроллера при 3V I/O. 19.3.2 Self Powered device (устройство USB, питаемое от отдельного источника питания, шина USB для питания не используется). Рис. 19-5.Типичное питание от отдельного источника, включение микроконтроллера при I/O в диапазоне 3.4V .. 5.5V. Рис. 19-6.Типичное питание от отдельного источника, включение микроконтроллера при I/O в диапазоне 3.0V .. 3.6V. 19.3.3 Указания по разработке • Резисторы, включаемые последовательно в цепи сигналов D+ и D-, должны иметь номинал 22 Ом (+/- 5%). [19.4 Основные рабочие режимы] 19.4.1 Введение Контроллер USB сбрасывается и его работа запрещается после аппаратного сброса, который генерируется при следующих событиях: - Power on reset (автоматический сброс при подаче питания на микроконтроллер). Также доступен по выбору дополнительный сброс: В случае сброса по шине контроллер USB сбрасывается, однако его работа не запрещается (так что для хоста устройство USB остается подключенным). 19.4.2 Power-on and reset (включение питания и сброс) На следующей диаграмме раскрываются основные состояния контроллера USB при включении питания. Рис. 19-7. USB controller states после reset Когда контроллер USB в состоянии сброса: • USBE не установлен, После установки USBE контроллер USB входит в режим устройства (Device state). Контроллер USB может быть в любое время "остановлен" путем очистки USBE. Фактически очистка USBE действует как аппаратный сброс на макроуровне USB. 19.4.3 Interrupts (прерывания) Контроллеру USB выделено два вектора прерывания. Рис. 19-8. Система прерываний USB Прерывания срабатывают при возникновении различных событий в работе контроллера USB. С помощью макросов можно отделить главные события (USB General events) от событий конечных точек (USB Endpoints events), которые относятся к передачам данных, связанных с каждой конечной точкой. Рис. 19-9. Источники для главного вектора прерывания USB Каждое из этих прерываний привязано по возникновению ко времени, так что они будут срабатывать только тогда, когда разрешены такты USB (очищен бит FRZCLK). Исключение из этого правила - только прерывание WAKEUP, которое будет срабатывать каждый раз, когда на сигналах данных будет детектировано изменение состояния (WAKEUP срабатывает асинхронно, и не привязано по времени к тактам). Прерывание WAKEUP позволяет разбудить устройство, находящееся в режиме power-down (экономии питания). Режим power-down обычно запускается при переходе устройства USB в состояние приостановки (Suspend state). Рис. 19-10. Источники прерывания от конечных точек USB Каждая конечная точка имеет 8 источников для срабатывания прерывания, которые связаны с флагами, и каждый источник может быть разрешен или нет для срабатывания прерывания на соответствующей конечной точке. Если на конечной точке разрешен как минимум один источник для срабатывания прерывания, то соответствующее событие (или события, если разрешено несколько источников) приведут к прекращению работы основной программы и переходу по вектору прерывания конечной точки (к вызову подпрограммы обработки прерывания конечной точки). Программист может определить источник события (какая конечная точка вызвала прерывание) путем чтения регистра UEINT, и далее обработать события путем опроса различных флагов (чтобы выяснить, какие события вызвали прерывание). [19.5 Power modes (режимы энергопотребления)] 19.5.1 Idle mode (режим ожидания) В этом режиме ядро CPU микроконтроллера остановлено (такты на CPU не подаются). Режим Idle может быть активен независимо от того, работает контроллер USB или не работает. CPU может проснуться (выйти из режима Idle и начать работу) по любому из прерываний USB. 19.5.2 Power down (питание выключено) В этом режиме работа тактового генератора остановлена, что останавливает все тактовые частоты (как CPU, так и периферии микроконтроллера). Контроллер USB проснется, когда сработает прерывание WAKEUPI (единственное асинхронное прерывание). 19.5.3 Freeze clock (останов тактов) Код firmware микроконтроллера может уменьшить энергопотребление путем установки бита FRZCLK, который "замораживает" генерацию тактов для контроллера USB. Когда бит FRZCLK установлен, то генерация тактов для контроллера USB прекращается, однако возможен доступ к следующим регистрам: • USBCON, Кроме того, когда FRZCLK установлен, то может сработать только асинхронное прерывание WAKEUPI. [19.6 Memory management (управление памятью)] Контроллер USB поддерживает только строго определенное выделение памяти, которое описано далее. Резервирование памяти для конечной точки может быть только в порядке увеличения (от endpoint 0 до последней endpoint 4). Так что firmware должно конфигурировать конечные точки только в таком порядке, от 0 до 4, и никак иначе. Резервирование конечной точки ki завершено, когда установлен бит ALLOC. Затем аппаратура выделяет память и вставляет её между конечной точкой ki-1 и ki+1. Память конечной точки сдвигается вверх (в сторону увеличения адресов) и данные теряются. Имейте в виду, что ki+2 и память конечных точек выше не смещается. Очистка бита разрешения конечной точки (Endpoint enable, EPEN) не очищает ни её бит ALLOC, ни её конфигурацию (EPSIZE/PSIZE, EPBK/PBK). Чтобы освободить память конечной точки, firmware должно очистить ALLOC. При этом выделение памяти конечной точки ki+1 смещается вниз (к младшим адресам). Имейте в виду, что ki+2 и память конечных точек выше не смещается. На следующей таблице показано выделение и реорганизация памяти USB на типичном примере: Таблица 19-1. Процесс выделения и реорганизации памяти USB для конечных точек • Сначала сконфигурированы все конечные точки от Endpoint 0 до Endpoint 4, в порядке возрастания. Память для каждой была зарезервирована в DPRAM. Обратите внимание на следующее: [19.7 PAD suspend (приостановка работы ножек)] Следующий рисунок показывает поведение ножек USB микроконтроллера: • В режиме "idle" (ожидание) ножки переводятся в режим низкого энергопотребления (low power consumption mode). Рис. 19-11. Поведение ножек Флаг SUSPI показывает, что на шине USB было детектировано состояние приостановки (suspend state). Этот флаг автоматически переводит ножки USB в режим Idle. Детектирование события выхода из ожидания (non-idle event) устанавливает флаг WAKEUPI и будит буферы ножек USB. Пояснения к рисунку: SUSPI, WAKEUPI - флаги прерываний по событиям Suspend, Resume. PAD status - состояние ножек USB микроконтроллера. Suspend detected = USB pad power down - выключение ножек, когда было детектировано событие приостановки работы (Suspend). Resume = USB pad wake-up - включение ножек, когда происходит событие возобновления работы (Resume). Active - активный режим (устройство USB работает). Power Down - устройство USB выключено и мало потребляет. Кроме того, ножки могут быть также переведены в режим ожидания (idle mode), если установлен бит DETACH. Ножки вернутся обратно в активный режим, когда бит DETACH очищается. [19.8 D+/D- Read/write (чтение/запись сигналов D+/D-)] Уровни D+ и D- могут быть прочитаны и записаны с использованием регистра UPOE. Чтобы можно было записать значение, контроллер USB должен быть запрещен. Для операции чтения контроллер USB может быть как запрещен, так и разрешен. [19.9 Описание регистров] 19.9.1 USB general registers (основные регистры USB) [USBCON] • 7 – USBE: USB macro Enable Bit (бит разрешения макро USB) • 6 – зарезервировано • 5 – FRZCLK: Freeze USB Clock Bit (бит "заморозки" тактов USB) • 4-0 – зарезервировано [UDPADDH] • 7 – DPACC: DPRAM Direct Access Bit (бит прямого доступа к DPRAM) • 6-0 – зарезервировано [UDPADDL] • 7-0 – DPADD7:0: DPRAM Address Low Byte (младший байт адреса DPRAM) 19.9.2 USB/PS2 Software Output Enable register – UPOE (регистр программного разрешения работы USB/PS2) [UPOE] • Bit 7:6 – UPOE[1:0]: USB/PS2 Output enable (разрешение выходов USB/PS2) [19.10 USB Software Operating modes (программные рабочие режимы USB)] В зависимости от рабочего режима USB, программное обеспечение (firmware) может выполнять следующие операции: Power On the USB interface (включение интерфейса USB) Power Off the USB interface (выключение интерфейса USB) Suspending the USB interface (приостановка интерфейса USB) Resuming the USB interface (возобновление работы интерфейса USB) [20. USB Device Operating modes (рабочие режимы устройства USB)] [20.1 Введение] Контроллер устройства USB поддерживает полноскоростную передачу данных (full speed, максимум 12 мегабит/сек). В дополнение к конечной точке по умолчанию (default control endpoint), контроллер предоставляет 4 другие конечные точки, которые могут быть сконфигурированы для режимов работы control, bulk, interrupt или isochronous: • Endpoint 0: имеет программируемый размер FIFO максимум до 64 байт, default control endpoint. Контроллер начинает работу в режиме "idle". В этом режиме энергопотребление буферов ножек находится на минимуме. [20.2 Power-on and reset (включение питания и сброс)] Следующая диаграмма показывает главные состояния контроллера USB при подаче питания: Рис. 20-1. Состояния контроллера USB device после reset В состоянии сброса (reset state) в контроллере устройства USB происходит следующее: • Такты macro clock останавливаются для минимизации энергопотребления (FRZCLK установлен). D+ pull-up будет активирован, как только будет очищен бит DETACH. Macro будет после сброса в состоянии "Idle", с минимальным потреблением энергии, и не нуждается в активированном PLL для входа в это состояние. Контроллер устройства USB может быть в любой момент времени сброшен путем очистки USBE. [20.3 Endpoint reset (сброс конечной точки)] Конечная точка может быть сброшена в любой момент времени путем установки соответствующего бита (EPRSTx) в регистре UERST. Это сбрасывает: Поле переключения данных (data toggle field) остается неизмененным. Другие регистры тоже остаются неизмененными. Конфигурация конечной точки остается активной и работа конечной точки все еще разрешена. Сброс конечной точки может быть связан очисткой команды переключения данных data toggle command (бит RSTDT) в ответ на USB-команду CLEAR_FEATURE. [20.4 USB reset (сброс по шине USB)] Когда детектируется событие сброса по шине USB (состояние SEO с минимальной длительностью 100 мкс), контроллером автоматически выполняются следующие операции: • Работа всех конечных точек запрещается. Если выбрана функция аппаратного сброса, то генерируется сброс ядра CPU AVR без запрета контроллера USB (который остается в том же состоянии после USB Reset). [20.5 Endpoint selection (выбор конечной точки)] Перед выполнением любой операции CPU с конечными точками должна быть выбрана сначала конечная точка. Это делается путем установки битов EPNUM2:0 (в регистре UENUM) в номер управляемой через CPU конечной точки. После этого CPU по программе firmware может получить доступ к различным регистрам и данным. [20.6 Endpoint activation (активация конечной точки)] Конечная точка может оставаться в состоянии reset, пока не будет установлен бит EPEN. Для активации конечной точки должна быть выполнена следующая последовательность действий, приведенная на рис. 20-2: Рис. 20-2. Endpoint activation flow Пока конечная точка не будет корректно сконфигурирована (пока бит CFGOK не очистится), аппаратура не будет подтверждать пакеты, которые отправлены хостом USB. CFGOK не будет установлена, если параметр размера конечной точки больше, чем размер DPRAM. Очистка EPEN работает как сброс конечной точки (см. секцию 20.3). При этом также происходит следующее: • Конфигурация конечной точки сохраняется (сохраняют значения EPSIZE, EPBK, ALLOC). См. секцию 19.6, для получения подробностей по поводу выделения и реорганизации памяти. [20.7 Address Setup (настройка адреса)] Адрес устройства USB устанавливается в соответствии с протоколом USB следующим образом: • После включения питания устройство USB отвечает по адресу 0. ADDEN и UADD не должны быть записаны одновременно. UADD содержит адрес по умолчанию 00h после включения питания или после сброса USB. ADDEN очищается аппаратно в следующих случаях: • После сброса при включении питания. когда этот бит очищен, используется адрес устройства по умолчанию 00h. [20.8 События Suspend, Wake-up и Resume (приостановка, пробуждение и возобновление работы)] После 3 мс неактивности на шине USB (состояние J state), контроллер устанавливает флаг SUSPI и при этом срабатывает соответствующее прерывание (если оно разрешено). Код firmware может затем установить бит FRZCLK. CPU так же может, в зависимости от архитектуры firmware, запретить PLL и/или войти в idle mode для уменьшения энергопотребления (это специально подходит для устройств USB, питаемых от шины, от провода VBUS). Есть два способа возврата из режима Suspend: • Первый метод состоит в очистке бита FRZCLK. Это возможно, если CPU не находится в Idle mode. Затем firmware должно очистить бит FRZCLK для перезапуска передач. Нет зависимости между прерыванием SUSPI и прерыванием WAKEUPI: WAKEUPI срабатывает, как только паттерн non-idle появляется на проводах данных (D+ и D-). Таким образом, прерывание WAKEUPI может произойти в любом случае, независимо от того, находится ли контроллер USB в режиме suspend или нет. Когда прерывание WAKEUPI срабатывает, то если бит прерывания SUSPI также установлен, то он очищается аппаратно. Когда срабатывает прерывание SUSPI, если бит прерывания WAKEUPI установлен, то он очищается аппаратно. [20.9 Detach (отключение)] Состояние бита DETACH после сброса 1. Можно заново сделать энумерацию устройства простой установкой и последующей очисткой бита DETACH (при этом должно учитываться время разряда линии USB). • Когда контроллер устройства USB находится в режиме full-speed, установка DETACH приведет к отключению резистора pull-up на сигнальной линии D+. Затем при очистке DETACH pull-up снова подключится к D+. Рис. 20-3. Detach (отключение) устройства USB в Full-speed: [20.10 Remote Wake-up (удаленное пробуждение)] Запрос "Remote Wake-up" (или как его называют "upstream resume", возобновление от апстрим) является единственной операцией, которая может быть отправлена устройством USB по собственной инициативе (все остальные управляются исключительно хостом). Но в любом случае, чтобы сделать это, устройство должно сначала принять от хоста запрос DEVICE_REMOTE_WAKEUP. Процедура Remote Wake-up: • Сначала контроллер USB должен детектировать состояние "suspend" на шине USB: remote wakeup может быть отправлен только если установлен бит SUSPI. [20.11 STALL request (запрос приостанова по ошибке)] Для каждой конечной точки управление STALL производится с использованием 3 битов: Чтобы отправить STALL handshake при следующем запросе хоста, устанавливается бит запроса STALLRQ. Все последующие запросы будут подтверждаться ответом STALL, пока не будет установлен бит STALLRQC. Установка бита STALLRQC автоматически очистит бит STALLRQ. Бит STALLRQ также немедленно очищается аппаратно после его установки из firmware. Таким образом, firmware никогда не может прочитать этот бит как установленный. Каждый раз, когда отправляется STALL handshake, контроллером USB устанавливается флаг STALLEDI, и сработает (если оно разрешено) прерывание EPINTx. Приходящие пакеты будут отброшены (не будут установлены RXOUTI и RWAL). Затем хост отправит команду сброса состояния STALL: firmware просто установит бит STALLRQC для сброса конечной точки. 20.11.1 Special consideration for Control Endpoints (специальные замечания для конечных точек управления) Запрос SETUP всегда подтверждается ACK. Если запрос STALL установлен для Control Endpoint, и произошел запрос SETUP, то запрос SETUP получит нормальное подтверждение ACK и флаги запроса STALLRQ и отправки STALLEDI будут автоматически сброшены (RXSETUPI установлен, TXIN очищен, STALLED очищен, TXINI очищен...). Такое поведение упрощает управление процессом энумерации. Если команда не поддерживается или содержит ошибку, то firmware установит флаг запроса STALL и может возвратиться к основной работе, ожидая следующего запроса SETUP. Это функционирование соответствует Части 8 теста, который отправляет дополнительный статус для GET_DESCRIPTOR. Код firmware устанавливает запрос STALL после приема статуса. Все дополнительные статусы будут автоматически переведены в STALL, пока не будет получен следующий запрос SETUP. 20.11.2 STALL handshake and Retry mechanism (механизм рукопожатия STALL и переотправки) Механизм переотправки (Retry) имеет приоритет выше STALL handshake. STALL handshake отправляется, если установлен бит STALLRQ, и если не требуется переотправка. [20.12 CONTROL endpoint management (обслуживание конечной точки управления)] Запрос SETUP всегда подтверждается ACK. Когда принят новый пакет настройки (setup packet), сработает прерывание RXSTPI (если оно разрешено). При этом прерывание RXOUTI не сработает. Поля FIFOCON и RWAL не относятся к конечным точкам управления (CONTROL endpoints). Таким образом, firmware никогда не будет их использовать для этих контрольных точек. При чтении значение этих бит всегда будет 0. CONTROL endpoints обслуживаются следующими битами: • RXSTPI устанавливается, когда принят новый запрос SETUP. Он должен быть очищен кодом firmware для подтверждения пакета и для очистки банка конечной точки. CONTROL endpoints не должны управляться (обслуживаться по прерываниям), это должно делаться только путем опроса битов статуса. 20.12.1 Control Write (запись пакета управления) На следующем рисунке показана транзакция записи управления (control write transaction). Во время стадии статуса, контроллеру необязательно отправлять NAK на первом токене IN: • Если firmware знает точное количество байт дескриптора, которое должно быть прочитано, то оно может опередить стадию статуса и отправить ZLP (Zero Length Packet, пакет нулевой длины) для следующего токена IN, Пояснения к диаграмме: SETUP, DATA, STATUS - различные стадии процесса Control Write (управляющая запись). SETUP, OUT, IN - типы пакетов, которыми обменивается устройство USB и хост. USB line - канал связи USB. RXSTPI, RXOUTI, TXINI - флаги прерываний. NAK - отрицательное подтверждение пакета. HW - аппаратная установка флага. SW - программный сброс флага (из кода firmware микроконтроллера). 20.12.2 Control Read (чтение пакета управления) На следующем рисунке показана транзакция чтения управления (control read transaction). Контроллер USB обслуживает одновременные запросы записи от CPU и от хоста USB: Пояснения к диаграмме: SETUP, DATA, STATUS - различные стадии процесса Control Read. SETUP, OUT, IN - типы пакетов, которыми обменивается устройство USB и хост. USB line - канал связи USB. RXSTPI, RXOUTI, TXINI - флаги прерываний. NAK - отрицательное подтверждение пакета. HW - аппаратная установка флага. SW - программный сброс флага (из кода firmware микроконтроллера). WrEnable HOST - запись, разрешенная для хоста. WrEnable CPU - запись, разрешенная для микроконтроллера устройства USB. На первую команду стадии статуса всегда генерируется отрицательное подтверждение NAK handshake. Когда контроллер детектирует состояние статуса (status stage), стираются все данные, записанные CPU, и очистка TXINI не дает никакого эффекта. Код firmware проверяет: завершена передача или завершен прием. The OUT retry всегда подтверждается положительно (ACK). Получается прием: Алгоритм программы: Установить готовность к передаче (transmit ready) Как только принято состояние статуса (status stage), контролер USB ожидает запроса SETUP. Запрос SETUP имеет приоритет над другими запросами, и он будет подтвержден положительно (ACK). Это означает, что любой другой флаг должен быть очищен, и FIFO будет сброшен, когда принят SETUP. ВНИМАНИЕ: счетчик байт сбрасывается, когда принят OUT Zero Length Packet. Код firmware должен позаботиться от этом. 20.13 OUT endpoint management (поддержка конечной точки OUT) Пакеты OUT отправляются от хоста к устройству USB. Все отправленные данные могут быть прочитаны CPU, который подтвердит или нет пакет, когда банк будет пуст. Чтобы это работало, предварительно конечная точка должна быть сконфигурирована. 20.13.1.1 “Manual” mode (ручной режим) Всякий раз, когда текущий банк заполняется, устанавливаются биты RXOUTI и FIFOCON. Это событие вызывает срабатывание прерывания, если оно разрешено (если установлен бит RXOUTE). Код firmware может подтвердить прерывание USB путем очистки бита RXOUTI. Код firmware читает данные и очищает бит FIFOCON для того, чтобы освободить текущий банк. Если конечная точка OUT составлена из нескольких банков (из двух), то очистка бита FIFOCON приведет к переключению на следующий банк. Биты RXOUTI и FIFOCON обновляются аппаратно в соответствии со статусом нового банка. RXOUTI должен быть всегда очищен перед очисткой FIFOCON. Бит RWAL всегда отражает состояние текущего банка. Этот бит устанавливается, если firmware может читать данные из банка, и очищается аппаратно, когда банк пуст. Пример с 1 банком данных OUT Пример с 2 банками данных OUT Пояснения к рисункам: OUT, DATA, ACK - стадии процесса передачи (данные от хоста, положительное подтверждение). RXOUTI - флаг прерывания окончания приема пакета. HW - аппаратная установка флага, SW - программный сброс флага. FIFOCON - бит, установка которого означает прием нового сообщения в текущий банк. 20.13.2 Подробное описание Данные читаются CPU в следующем порядке: Если конечная точка использует 2 банка, то второй банк может быть заполняться хостом, пока первый текущий банк читается CPU. Затем, когда CPU очищает FIFOCON, следующий банк может быть уже готов и тогда RXOUTI установится немедленно. 20.14 IN endpoint management (поддержка конечной точки IN) Пакеты IN отправляются контроллером USB в сторону хоста, по запросу IN request от хоста. Все данные могут быть записаны CPU, который подтвердит или не подтвердит заполнение банка. Чтобы это работало, предварительно конечная точка должна быть сконфигурирована. 20.14.0.1 “Manual” mode (ручной режим) Бит TXINI устанавливается аппаратно, когда текущий банк становится свободным. Это вызовет срабатывание прерывания, если оно разрешено путем установки бита TXINE. В то же самое время будет установлен бит FIFOCON. CPU записывает данные в FIFO и очищает бит FIFOCON, чтобы разрешить контроллеру USB отправить данные. Если конечная точка IN составлена из нескольких банков (из двух), то очистка FIFOCON также приведет к переключению на следующий банк данных. Биты TXINI и FIFOCON автоматически обновляются аппаратно в зависимости от статуса следующего банка. TXINI должен быть всегда очищен перед очисткой FIFOCON. Бит RWAL всегда отражает состояние текущего банка. Этот бит устанавливается, если firmware может записать данные в банк, и очищается аппаратно, когда банк заполнен. Пример с 1 банком данных IN Пример с 2 банками данных IN Пояснения к рисункам: IN, DATA, ACK, NACK - стадии процесса передачи (данные к хосту, положительное подтверждение, отрицательное подтверждение). TXINI - флаг готовности передатчика. HW - аппаратная установка флага, SW - программный сброс флага. FIFOCON - бит, установка которого означает прием нового сообщения в текущий банк. 20.14.1 Подробное описание Данные записываются CPU в следующем порядке: Если конечная точка использует 2 банка, то второй банк может быть читаться хостом, пока текущий первый банк записывается CPU. Затем, когда CPU очистит FIFOCON, следующий банк может быть уже свободным (готовым для новой записи в него CPU), и тогда TXINI установится немедленно. 20.14.1.1 Abort Стадия "abort" может быть представлена хостом в некоторых ситуациях: • В транзакции управления (control transaction): принят ZLP данных OUT на стадии IN. Бит KILLBK используется, чтобы "убить" последний "записанный" банк. Вот самый лучший способ выполнить abort (последовательность действий): Таблица 20-1. Abort flow [20.15 Isochronous mode (изохронный режим)] 20.15.1 Underflow (недостаточное поступление данных) Событие недобора данных (underflow) может произойти во время стадии IN, если хост попытался прочитать банк, который пуст. В этой ситуации сработает прерывание UNDERFI. Также underflow может произойти во время стадии OUT, если хост отправил пакет, когда банки уже заняты. Обычно это происходит потому, что CPU недостаточно быстро обработал данные. Пакет будет потерян. Невозможно получить ошибку underflow на стадии OUT со стороны CPU, поскольку CPU должен читать только если банк уже готов предоставить данные (RXOUTI=1 или RWAL=1) 20.15.2 CRC Error (ошибка контрольной суммы) Ошибка CRC может произойти на стадии OUT, если контроллер определил плохой принятый пакет. В этой ситуации сработает прерывание STALLEDI. Это не предотвратит от срабатывания прерывания RXOUTI. 20.16 Overflow (переполнение буфера) На конечных точках типа Control, Isochronous, Bulk или Interrupt может произойти переполнение на стадии OUT, если хост попытается записать в банк, который окажется слишком маленьким для пакета. В этой ситуации сработает прерывание OVERFI (если оно разрешено). Пакет будет подтвержден отрицательно (NAK), и также сработает прерывание RXOUTI (если оно разрешено). Банк будет заполнен первой частью пакета. Невозможно получить ошибку overflow на стадии IN со стороны CPU, поскольку CPU должен записывать только если банк готов к получению данных (TXINI=1 или RWAL=1). [20.17 Interrupts (прерывания)] На следующем рисунке показаны все источники прерываний: Рис. 20-4. USB Device Controller Interrupt System (система прерываний контроллера USB) Здесь есть 2 вида прерываний: обработка (Processing interrupts, например, которые генерируются как часть нормальной обработки) и исключения exception (Exception Interrupts, errors, ошибки). Processing interrupts (прерывания обработки) генерируются при: Exception Interrupts (прерывания по ошибке) генерируются при: Рис. 20-5. USB Device Controller Endpoint Interrupt System (система прерываний конечной точки контроллера USB) Processing interrupts (прерывания обработки) генерируются при: Exception Interrupts (прерывания по ошибке) генерируются при: [20.18 Регистры] 20.18.1 USB device general registers (основные регистры устройства USB) [UDCON] • Bit 2 - RSTCPU - USB Reset CPU, бит сброса CPU • Bit 1 - RMWKUP - Remote Wake-up, бит удаленного пробуждения • Bit 0 - DETACH - Detach, бит отключения [UDINT] • 7 - зарезервировано • 6 - UPRSMI - Upstream Resume Interrupt Flag, флаг прерывания по возобновлению работы от апстрим • 5 - EORSMI - End Of Resume Interrupt Flag, флаг прерыванию по окончанию события возобновления работы • 4 - WAKEUPI - Wake-up CPU Interrupt Flag, флаг прерывания пробуждения CPU • 3 - EORSTI - End Of Reset Interrupt Flag, флаг прерывания по событию окончания сброса по шине • 2 - SOFI - Start Of Frame Interrupt Flag, флаг прерывания по событию начала фрейма • 1 - зарезервировано • 0 - SUSPI - Suspend Interrupt Flag, флаг прерывания по событию приостановки Биты флагов прерывания устанавливаются даже в том случае, если их соответствующие биты разрешения прерывания не установлены. [UDIEN] • 7 - зарезервировано • 6 - UPRSME - Upstream Resume Interrupt Enable, бит разрешения прерывания по событию возобновления от апстрим • 5 - EORSME - End Of Resume Interrupt Enable, бит разрешения прерывания по окончании события возобновления. • 4 - WAKEUPE - Wake-up CPU Interrupt Enable, бит разрешения прерывания от события пробуждения CPU • 3 - EORSTE - End Of Reset Interrupt Enable, бит разрешения прерывания от события окончания сброса по шине • 2 - SOFE - Start Of Frame Interrupt Enable, бит разрешения прерывания от события начала фрейма • 1 - зарезервировано • 0 - SUSPE - Suspend Interrupt Enable, бит разрешения прерывания от события приостановки. [UDADDR] • 7 - ADDEN - Address Enable Bit, бит разрешения адреса [UDFNUMH] • 7-3 - зарезервировано • 2-0 - FNUM10:8 - Frame Number Upper Flag, флаг старших бит номера фрейма [UDFNUML] • 7-0 Frame Number Lower Flag, флаг младших битов номера фрейма [UDMFN] • 7-5 - зарезервировано • 4 - FNCERR - Frame Number CRC Error Flag, номер фрейма флага ошибки CRC • 3-0 - зарезервировано 20.18.2 USB device endpoint registers (регистры конечной точки устройства USB) [UENUM] • 7-3 - зарезервировано • 2-0 - EPNUM2:0 Endpoint Number, биты номера конечной точки [UERST] • 7-5 - зарезервировано • 4-0 - EPRST4:0 - Endpoint FIFO Reset Bits, биты сброса FIFO конечной точки [UECONX] • 7-6 - зарезервировано • 5 - STALLRQ - STALL Request Handshake Bit, бит хендшейка STALL • 4 - STALLRQC - STALL Request Clear Handshake Bit, бит сброса состояния запроса хендшейка STALL • RSTDT - Reset Data Toggle Bit, бит сброса переключения данных • 2-1 - зарезервировано • 0 - EPEN - Endpoint Enable, бит разрешения работы конечной точки [UECFG0X] • 7-6 - EPTYPE1:0 - Endpoint Type Bits, биты типа конечной точки • 5-1 - зарезервировано • 0 - EPDIR - Endpoint Direction Bit, бит направления конечной точки [UECFG1X] • 7 - зарезервировано • 6-4 - EPSIZE2:0 - Endpoint Size Bits, биты размера конечной точки. • 3-2 - EPBK1:0 - Endpoint Bank Bits, биты банка конечной точки • 1 - ALLOC - Endpoint Allocation Bit, бит выделения памяти конечной точки. • 0 - зарезервировано [UESTA0X] • 7 - CFGOK - Configuration Status Flag, флаг состояния конфигурации • 6 - OVERFI - Overflow Error Interrupt Flag, флаг прерывания по ошибке переполнения • 5 - UNDERFI - Flow Error Interrupt Flag, флаг прерывания ошибки недогрузки • 4- зарезервировано • 3-2 - DTSEQ1:0 - Data Toggle Sequencing Flag, флаг последовательного переключения данных (используется для банков) • 1-0 - NBUSYBK1:0 - Busy Bank Flag, флаг занятости банка [UESTA1X] • 7-3 - зарезервировано • 2 - CTRLDIR - Control Direction (флаг и бит, используемый для отладки) • 1-0 - CURRBK1:0 - Current Bank, текущий банк (относится ко всем конечным точкам, за исключением Control endpoint) [UEINTX] • 7 - FIFOCON - FIFO Control Bit, бит управления FIFO Для конечной точки IN устанавливается аппаратно, когда текущий банк освобожден, одновременно с TXIN. Очистите для отправки данных FIFO и переключения банка. Установка из кода firmware не дает никакого эффекта. • 6 - NAKINI - NAK IN Received Interrupt Flag, флаг прерывания принятого отрицательного подтверждения NAK IN • 5 - RWAL - Read/Write Allowed Flag, флаг разрешения чтения/записи Бит не устанавливается, если установлен STALLRQ, или в случае ошибки. Иначе очищается аппаратно. Этот бит не должен использоваться для управляющей конечной точки (control endpoint). • 4 - NAKOUTI - NAK OUT Received Interrupt Flag, флаг прерывания принятого отрицательного подтверждения NAK OUT • 3 - RXSTPI - Received SETUP Interrupt Flag, флаг прерывания по принятию пакета SETUP • 2 - RXOUTI / KILLBK - Received OUT Data Interrupt Flag, флаг прерывания по приему пакета данных OUT Kill Bank IN Bit • 1 - STALLEDI - STALLEDI Interrupt Flag, флаг прерывания отправки STALL • 0 - TXINI - Transmitter Ready Interrupt Flag, флаг прерывания готовности передатчика [UEIENX] • 7 - FLERRE - Flow Error Interrupt Enable Flag, бит разрешения прерывания по флагу ошибки потока (недогрузка) • 6 - NAKINE - NAK IN Interrupt Enable Bit, бит разрешения прерывания по флагу отрицательного подтверждения NAK IN • 5 - зарезервировано • 4 - NAKOUTE - NAK OUT Interrupt Enable Bit, бит разрешения прерывания по флагу отрицательного подтверждения NAK OUT • 3 - RXSTPE - Received SETUP Interrupt Enable Flag, бит разрешения прерывания по флагу прихода пакета SETUP • 2 - RXOUTE - Received OUT Data Interrupt Enable Flag, бит разрешения прерывания от флага принятого пакета данных OUT • 1 - STALLEDE - Stalled Interrupt Enable Flag, бит разрешения прерывания по флагу останова • 0 - TXINE - Transmitter Ready Interrupt Enable Flag, бит разрешения прерывания по флагу готовности передатчика [UEDATX] • 7-0 - DAT7:0 - Data Bits, биты данных [UEBCLX] • 7-0 - BYCT7:0 - Byte Count Bits, биты счетчика байт [UEINT] • 7-5 - зарезервировано • 4-0 - EPINT4:0 - Endpoint Interrupts Bits, биты прерываний конечной точки [21. PS/2] Те же самые ножки AT90USB162, которые используются под сигналы USB, могут функционировать как интерфейс PS/2. Этот интерфейс по физическим сигнальным линиям является аналогом I2C (TWI), и может использоваться для подключения клавиатуры или мыши. К сожалению, формирование протокола PS/2 не аппаратное, и перепады сигналов тактов и данных на нем придется формировать вручную, в коде firmware. [21.1 Характеристики интерфейса PS/2] Ножки PS/2 по вводу и выводу (IO) имеет следующие параметры: Рис. 21-1. Переключение между ножками USB и ножками PS/2 [PS2CON] • Bit 7:1 – зарезервированные биты, не устанавливайте их. • Bit 0 – PS2EN : PS/2 Pad Enable, разрешение работы ножек в режиме PS/2 Рис. 21-2. Описание ножек PS/2 Внимание: значение внутренних резисторов pull-up может быть в диапазоне 2.2 .. 10 кОм. Таблица 21-1. параметры ножек PS/2 по постоянному току (DC parameters)
[Словарик] DPRAM Dual Port RAM - так называемое двухпортовое ОЗУ, предназначенное для одновременного доступа к памяти и на чтение, и на запись. На самом деле в этом случае невозможны одновременная запись и чтение в одни и те же ячейки, однако поддерживается одновременные чтение и запись в разные два банка памяти. Таким способом, с помощью быстрого переключения банков, осуществляется практически непрерывный обмен данными между хостом USB и устройством USB. Устройство USB USB device - второе (подчиненное) окончание в соединении точка-точка между хостом USB и устройством USB. Между хостом USB и устройством USB идет обмен данными по одному из популярных протоколов шины USB (HID, CDC, MSD). Хост USB USB host - первое (главное) окончание в соединении точка-точка между хостом USB и устройством USB. Между хостом USB и устройством USB идет обмен данными по одному из популярных протоколов шины USB (HID, CDC, MSD). default control endpoint конечная точка по умолчанию, она же конечная точка 0, она же конечная точка управления. Конечная точка, которая всегда присутствует в устройстве USB, применяется для управления, энумерации, оповещения о событиях. PLL Phase Locked Loop - ФАПЧ, фазовая автоподстройка частоты. DPLL Digital Phase Locked Loop - цифровая ФАПЧ. I/O Input/Output - имеются в виду порты ввода/вывода микроконтроллера. 5V I/O означает порты ввода/вывода, работающие с логическими уровнями 0 (L, лог. 0) и 5V (H. лог. 1), 3V I/O означает порты ввода/вывода, работающие с логическими уровнями 0 (L, лог. 0) и 3.3V (H. лог. 1). ESD Electro Static Discharge, электростатический разряд. ping-pong имеется в виду механизм переключения банков (буферов) памяти FIFO при передаче данных. Действия при приеме данных от хоста: в то время как контроллер USB аппаратно заполняет данными один банк, firmware микроконтроллера вычитывает данные из другого банка. То же самое работает и в обратном направлении: когда аппаратура передает хосту данные из одного банка, микроконтроллер имеет возможность подготовить и записать следующий пакет данных в другой банк. EOR End Of Reset - специальное событие окончания сброса по шине USB. [Ссылки] 1. Цоколевка разъемов USB. |