Программирование AVR: работа с USB AT90USB162: USB controller (контроллер интерфейса USB) Thu, January 19 2017  

Поделиться

нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

AT90USB162: USB controller (контроллер интерфейса USB) Печать
Добавил(а) microsin   

Микроконтроллер AT90USB162 (AT90USB162MU) из семейства AVR USB компании Atmel имеет в своем составе аппаратный интерфейс USB, и поддерживает спецификацию USB 2.0 на скорости до Full-speed включительно. В этой статье приведен перевод раздела даташита Atmel, посвященный контроллеру USB этого чипа. Даташит Atmel на чип AT90USB162 (doc7707.pdf) написан довольно коряво, пестрит недочетами и опечатками. В переводе я как мог, постарался это исправить.

AT90USB162-TQFP32 at90usb162-04IMG_8330.jpg AT90USB162MU-QFN32 AVR-USB162MU

[19.1 Возможности контроллера USB AT90USB162]

1. Поддерживается скорость full-speed (high-speed не поддерживается).
2. Поддерживается режим ping-pong (буферизация на основе двойного банка), с прозрачным переключением банков.
3. 176 байт DPRAM (см. Словарик).
   - 1 конечная точка, которая может иметь максимум 64 байта (default control endpoint).
   - 2 конечные точки, которые могут иметь максимум 64 байта (один банк).
   - 2 конечные точки, которые могут иметь максимум 64 байта (один или два банка).

На микроконтроллерах 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.

AT90USB162-controller-USB-block-diagram-fig19-1

Пояснения по блок-схеме:

D+, D- ножки микроконтроллера, на которые подключаются сигнальные линии интерфейса USB.
UCAP выход внутреннего стабилизатора напряжения 3.3V, ножка микроконтроллера, на которую подключается внешний фильтрующий конденсатор 1 мкФ.
UVCC ножка микроконтроллера, вход для подключения источника питания (внешнего или от провода VBUS шины USB).
DPLL Clock Recovery система восстановления тактов из сигналов шины USB на основе цифровой ФАПЧ.
clk 8MHz, clk 48MHz тактовые частоты.
PLL 6x система умножения тактовой частоты на основе ФАПЧ (умножение частоты на 6).
PLL clock Prescaler предделитель тактовой частоты, с выхода которого такты поступают на ФАПЧ.
AVR CPU вычислительное ядро микроконтроллера AVR.
On-Chip USB DPRAM двухпортовая память для буферов ввода/вывода конечных точек USB.
XTAL1 ножка микроконтроллера, вход генератора тактовой частоты. На нее либо подключается кварц на 8 или 16 МГц, либо внешний источник тактовой частоты 8 или 16 МГц.

[Общие указания по применению]

В зависимости от напряжения питания целевой схемы (в которой применяется микроконтроллер AT90USB162) нужно использовать разную аппаратную реализацию.

Рис. 19-2. Рабочие режимы в зависимости от тактовой частоты кварца и напряжения питания.

AT90USB162-operating-modes-frequency-power-supply-fig19-2

19.3.1 Bus Powered device (устройство USB, питаемое от шины USB).

Рис. 19-3.Типичное питание от шины USB, включение микроконтроллера при 5V I/O.

AT90USB162-bus-powered-5V-IO-fig19-3

Рис. 19-4.Типичное питание от шины USB, включение микроконтроллера при 3V I/O.

AT90USB162-bus-powered-3V-IO-fig19-4

19.3.2 Self Powered device (устройство USB, питаемое от отдельного источника питания, шина USB для питания не используется).

Рис. 19-5.Типичное питание от отдельного источника, включение микроконтроллера при I/O в диапазоне 3.4V .. 5.5V.

AT90USB162-self-powered-3 4V-5 5V-IO-fig19-5

Рис. 19-6.Типичное питание от отдельного источника, включение микроконтроллера при I/O в диапазоне 3.0V .. 3.6V.

AT90USB162-self-powered-3 0V-3 6V-IO-fig19-6

19.3.3 Указания по разработке

• Резисторы, включаемые последовательно в цепи сигналов D+ и D-, должны иметь номинал 22 Ом (+/- 5%).
• Проводники на печатной плате от разъема USB (USB type B или miniUSB type B [1]) или от места подключения кабеля USB до ножек USB микроконтроллера должны быть максимально короткими, и подчиняться правилам разводки дифференциальных сигналов (нужны одинаковая длина, максимально близкое расположение друг к другу, нужно избегать переходных отверстий).
• Может использоваться защита от перепадов напряжения / ESD для предотвращения повреждения ножек USB микроконтроллера.
• Для правильной работы внешний фильтрующий конденсатор Ucap должен иметь емкость 1uF (+/- 10%).
• На шине VBUS очень рекомендуется использовать конденсатор емкостью 10uF.

[19.4 Основные рабочие режимы]

19.4.1 Введение

Контроллер USB сбрасывается и его работа запрещается после аппаратного сброса, который генерируется при следующих событиях:

- Power on reset (автоматический сброс при подаче питания на микроконтроллер).
- External reset (поступление внешнего сигнала сброса на микроконтроллер).
– Watchdog reset (сброс при срабатывании сторожевого таймера).
- Brown out reset (сброс при уходе напряжения питания ниже установленного предела - определяется фьюзами).
- debugWIRE reset (сброс от интерфейса отладки debugWIRE).

Также доступен по выбору дополнительный сброс:
– USB End Of Reset (окончание события сброса по шине USB, который может генерировать хост USB).

В случае сброса по шине контроллер USB сбрасывается, однако его работа не запрещается (так что для хоста устройство USB остается подключенным).

19.4.2 Power-on and reset (включение питания и сброс)

На следующей диаграмме раскрываются основные состояния контроллера USB при включении питания.

Рис. 19-7. USB controller states после reset

AT90USB162-USB-controller-states-after-reset-fig19-7

Когда контроллер USB в состоянии сброса:

• USBE не установлен,
• такты контроллера USB остановлены для снижения энергопотребления (FRZCLK=1),
• работа контроллера USB запрещена,
• USB в режиме "приостановлено" (suspend mode),
• внутреннее состояние контроллеров устройства USB - сброс.
• Бит DPACC и поле DPADD10:0 может быть установлено кодом firmware. DPRAM не очищается.
• Биты SPDCONF могут быть установлены кодом firmware.

После установки USBE контроллер USB входит в режим устройства (Device state). Контроллер USB может быть в любое время "остановлен" путем очистки USBE. Фактически очистка USBE действует как аппаратный сброс на макроуровне USB.

19.4.3 Interrupts (прерывания)

Контроллеру USB выделено два вектора прерывания.

Рис. 19-8. Система прерываний USB

AT90USB162-USB-Interrupt-System-fig19-8

Прерывания срабатывают при возникновении различных событий в работе контроллера USB. С помощью макросов можно отделить главные события (USB General events) от событий конечных точек (USB Endpoints events), которые относятся к передачам данных, связанных с каждой конечной точкой.

Рис. 19-9. Источники для главного вектора прерывания USB

AT90USB162-USB-General-interrupt-vector-sources-fig19-9

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

Прерывание WAKEUP позволяет разбудить устройство, находящееся в режиме power-down (экономии питания). Режим power-down обычно запускается при переходе устройства USB в состояние приостановки (Suspend state).

Рис. 19-10. Источники прерывания от конечных точек USB

AT90USB162-USB-Endpoint-Interrupt-vector-sources-fig19-10

Каждая конечная точка имеет 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,
• регистры прямого доступа к DPRAM (DPADD7:0, UEDATX)
• UDCON (detach, ...)
• UDINT
• UDIEN

Кроме того, когда 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 для конечных точек

AT90USB162-Allocation-and-reorganization-USB-memory-flow-table19-1

• Сначала сконфигурированы все конечные точки от Endpoint 0 до Endpoint 4, в порядке возрастания. Память для каждой была зарезервирована в DPRAM.
• Затем Endpoint 2 была запрещена (EPEN=0), однако её резервирование памяти все еще внутренне сохраняется контроллером.
• Очищен бит ALLOC конечной точки Endpoint 2: при этом Endpoint 3 "сместилась" вниз, Endpoint 4 не "сместилась".
• И в заключение, firmware решило реконфигурировать Endpoint 2 на увеличенный размер. Контроллер резервирует память после памяти endpoint 1 и автоматически "сдвигает" память Endpoint 3. Память для Endpoint 4 при этом не смещается, и появляется конфликт памяти, потому что Endpoint 3 и 4 используют частично одну и ту же память. Обмен данными через конечные точки 3 и 4 осуществлять нельзя, так как данные потенциально могут быть запорчены.

Обратите внимание на следующее:
• Данные для конечной точки Endpoint 0 никогда не будут потеряны при активации и деактивации других конечных точек. Данные Endpoint 0 будут потеряны только при её деактивации.
• Деактивация и реактивация одной и той же конечной точки с теми же параметрами не приведет к "смещению" конечных точек с более высокими номерами. Для конечных точек, лежащих выше, данные будут сохранены.
• CFGOK устанавливается аппаратно, даже в случае "конфликтного" выделения памяти.

[19.7 PAD suspend (приостановка работы ножек)]

Следующий рисунок показывает поведение ножек USB микроконтроллера:

• В режиме "idle" (ожидание) ножки переводятся в режим низкого энергопотребления (low power consumption mode).
• В "активном" режиме ножки работают.

Рис. 19-11. Поведение ножек

AT90USB162-Pad-behaviour-fig19-11

Флаг SUSPI показывает, что на шине USB было детектировано состояние приостановки (suspend state). Этот флаг автоматически переводит ножки USB в режим Idle. Детектирование события выхода из ожидания (non-idle event) устанавливает флаг WAKEUPI и будит буферы ножек USB.

AT90USB162-SUSPI-WAKEUPI-flags-PAD-status

Пояснения к рисунку: 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]

AT90USB162-USBCON

• 7 – USBE: USB macro Enable Bit (бит разрешения макро USB)
Установите этот бит для разрешения контроллера USB. Очистите для запрета и сброса контроллера USB, для запрета трансивера USB и для запрета тактовых входов контроллера USB.

• 6 – зарезервировано
Значение, прочитанное из этого бита, всегда будет 0. Не устанавливайте этот бит.

• 5 – FRZCLK: Freeze USB Clock Bit (бит "заморозки" тактов USB)
Установите для запрета тактовых входов (детектирование возобновления ”Resume Detection” все еще активно). Это уменьшает энергопотребление. Очистите для разрешения тактовых входов.

• 4-0 – зарезервировано
Значение, прочитанное из этих бит, всегда будет 0. Не устанавливайте эти биты.

[UDPADDH]

AT90USB162-UDPADDH

• 7 – DPACC: DPRAM Direct Access Bit (бит прямого доступа к DPRAM)
Установите этот бит для прямого чтения содержимого данных двухпортовой памяти (Dual-Port RAM, DPR) через регистры UEDATX или UPDATX. См. секцию 19.6 для получения подробностей. Очистите этот бит для нормальной работы и доступа к DPR через FIFO конечной точки.

• 6-0 – зарезервировано
Значение, прочитанное из этих бит, всегда будет 0. Не устанавливайте эти биты.

[UDPADDL]

AT90USB162-UDPADDL

• 7-0 – DPADD7:0: DPRAM Address Low Byte (младший байт адреса DPRAM)
DAPDD7:0 младшая значащая часть (младший байт) адреса DPADD.

19.9.2 USB/PS2 Software Output Enable register – UPOE (регистр программного разрешения работы USB/PS2)

[UPOE]

AT90USB162-UPOE

• Bit 7:6 – UPOE[1:0]: USB/PS2 Output enable (разрешение выходов USB/PS2)
Установите эти биты, когда нужно разрешить следующую конфигурацию, или когда нужно запретить или разрешить программное управление USB/PS2.
UPOE1 - UPOE0
0 - 0 : Прямое управление запрещено.
0 - 1 : зарезервировано.
1 - 0 : Прямое управление DP/DM с уровнями USB  (значения из битов UPDRV[1:0])
1 - 1 : Прямое управление DP/DM с уровнями PS/2 (значения из битов UPDRV[1:0])
• Bit 5:4 – UPDRV[1:0] : USB/PS2 direct drive values (значения для прямого управления USB/PS2)
Запишите в UPDRV1 значение для записи в D+/SCK  следующей конфигурации UPOE[1:0].
Запишите в UPDRV0 значение для записи в D-/DATA следующей конфигурации UPOE[1:0].
• Bit 3 – SCKI : SCK Input value (значение входа SCK)
Этот бит устанавливается в 1 аппаратно, если прочитана 1 на SCK (ножка PS/2).
Этот бит устанавливается в 0 аппаратно, если прочитана 0 на SCK (ножка PS/2).
• Bit 2 – DATAI : DATA Input value (значение входа DATA)
Этот бит устанавливается в 1 аппаратно, если прочитана 1 на DATA (ножка PS/2).
Этот бит устанавливается в 0 аппаратно, если прочитана 0 на DATA (ножка PS/2).
• Bit 1 – DPI : D+ Input value (входное значение D+)
Этот бит устанавливается в 1 аппаратно, если прочитана 1 на D+ (ножка PS/2).
Этот бит устанавливается в 0 аппаратно, если прочитана 0 на D+ (ножка PS/2).
• Bit 0 – DMI : D- Input value (входное значение D-)
Этот бит устанавливается в 1 аппаратно, если прочитана 1 на D- (ножка PS/2).
Этот бит устанавливается в 0 аппаратно, если прочитана 0 на D- (ножка PS/2).

[19.10 USB Software Operating modes (программные рабочие режимы USB)]

В зависимости от рабочего режима USB, программное обеспечение (firmware) может выполнять следующие операции:

Power On the USB interface (включение интерфейса USB)
• Конфигурирование интерфейса PLL
• Разрешение работы PLL
• Проверка срабатывания захвата в петле PLL
• Разрешение работы интерфейса USB
• Конфигурирование интерфейса USB (конфигурация USB Endpoint 0)
• Подключение устройства USB (Attach USB device)

Power Off the USB interface (выключение интерфейса USB)
• Отключение устройства USB (Detach USB device)
• Запрет работы интерфейса USB
• запрет работы PLL

Suspending the USB interface (приостановка интерфейса USB)
• Очистка бита приостановки (Suspend Bit)
• Установки тактов USB приостановки (USB suspend clock)
• Запрет работы PLL
• Убедиться, что разрешены прерывания (WAKEUPE) для выхода из режима сна (sleep mode)
• Перевод микроконтроллера в режим сна (sleep mode)

Resuming the USB interface (возобновление работы интерфейса USB)
• Разрешение работы PLL
• Ожидание захвата петли PLL
• Очистка тактовой частоты USB приостановки (USB suspend clock)
• Очистка информации о необходимости запуска возобновления (Resume information)

[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.
• Endpoint 1 и 2: имеет программируемый размер FIFO максимум до 64 байт.
• Endpoint 3 и 4: имеет программируемый размер FIFO максимум до 64 байт с режимом ping-pong.

Контроллер начинает работу в режиме "idle". В этом режиме энергопотребление буферов ножек находится на минимуме.

[20.2 Power-on and reset (включение питания и сброс)]

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

Рис. 20-1. Состояния контроллера USB device после reset

AT90USB162-USB-device-controller-states-after-reset-fig20-1

В состоянии сброса (reset state) в контроллере устройства USB происходит следующее:

• Такты macro clock останавливаются для минимизации энергопотребления (FRZCLK установлен).
• Внутреннее состояние USB device controller - сброс reset (все регистры сброшены в свое значение по умолчанию. Имейте в виду, что DETACH установлен).
• Сбрасываются банки конечных точек.
• Подтягивающий резистор D+ (pull-up) деактивируется (режим Detach, отключение устройства USB от шины).

D+ pull-up будет активирован, как только будет очищен бит DETACH. Macro будет после сброса в состоянии "Idle", с минимальным потреблением энергии, и не нуждается в активированном PLL для входа в это состояние.

Контроллер устройства USB может быть в любой момент времени сброшен путем очистки USBE.

[20.3 Endpoint reset (сброс конечной точки)]

Конечная точка может быть сброшена в любой момент времени путем установки соответствующего бита (EPRSTx) в регистре UERST. Это сбрасывает:
• внутреннюю машину состояний для этой конечной точки,
• очищаются банки приема и передачи Rx и Tx, и восстанавливаются их внутренние указатели,
• регистры UEINTX, UESTA0X и UESTA1X возвращаются в свое значение сброса.

Поле переключения данных (data toggle field) остается неизмененным. Другие регистры тоже остаются неизмененными. Конфигурация конечной точки остается активной и работа конечной точки все еще разрешена. Сброс конечной точки может быть связан очисткой команды переключения данных data toggle command (бит RSTDT) в ответ на USB-команду CLEAR_FEATURE.

[20.4 USB reset (сброс по шине USB)]

Когда детектируется событие сброса по шине USB (состояние SEO с минимальной длительностью 100 мкс), контроллером автоматически выполняются следующие операции:

• Работа всех конечных точек запрещается.
• Конечная точка по умолчанию (default control endpoint) остается сконфигурированной.
• Очищается переключение данных (data toggle) для default control endpoint.

Если выбрана функция аппаратного сброса, то генерируется сброс ядра 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

AT90USB162-Endpoint-activation-flow-fig20-2

Пока конечная точка не будет корректно сконфигурирована (пока бит CFGOK не очистится), аппаратура не будет подтверждать пакеты, которые отправлены хостом USB. CFGOK не будет установлена, если параметр размера конечной точки больше, чем размер DPRAM.

Очистка EPEN работает как сброс конечной точки (см. секцию 20.3). При этом также происходит следующее:

• Конфигурация конечной точки сохраняется (сохраняют значения EPSIZE, EPBK, ALLOC).
• Сбрасывается поле переключения данных (data toggle).
• Память DPRAM, связанная с конечной точкой, все еще остается зарезервированной.

См. секцию 19.6, для получения подробностей по поводу выделения и реорганизации памяти.

[20.7 Address Setup (настройка адреса)]

Адрес устройства USB устанавливается в соответствии с протоколом USB следующим образом:

• После включения питания устройство USB отвечает по адресу 0.
• Хост отправляет команду SETUP (SET_ADDRESS(addr)),
• Код firmware записывает адрес в UADD, но пока оставляет ADDEN очищенным.
• Устройство USB отправляет команду IN с 0 байтами (IN 0 Zero Length Packet) для подтверждения транзакции.
• И затем код firmware может разрешить адрес устройства USB путем установки ADDEN. Только один адрес, подтвержденный контроллером, сохраняется в UADD.

ADDEN и UADD не должны быть записаны одновременно. UADD содержит адрес по умолчанию 00h после включения питания или после сброса USB.

ADDEN очищается аппаратно в следующих случаях:

• После сброса при включении питания.
• Когда принят от хоста сигнал USB reset.
• Когда macro запрещен (очищен бит USBE).

когда этот бит очищен, используется адрес устройства по умолчанию 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.
• Второй метод, если CPU в режиме idle, разрешить прерывание WAKEUPI (установить WAKEUPE до входа в режим idle). Затем, когда контроллер увидит сигнал non-idle, сработает прерывание WAKEUPI.

Затем 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:

AT90USB162-Detach-device-in-Full-speed-fig20-3

[20.10 Remote Wake-up (удаленное пробуждение)]

Запрос "Remote Wake-up" (или как его называют "upstream resume", возобновление от апстрим) является единственной операцией, которая может быть отправлена устройством USB по собственной инициативе (все остальные управляются исключительно хостом). Но в любом случае, чтобы сделать это, устройство должно сначала принять от хоста запрос DEVICE_REMOTE_WAKEUP. Процедура Remote Wake-up:

• Сначала контроллер USB должен детектировать состояние "suspend" на шине USB: remote wakeup может быть отправлен только если установлен бит SUSPI.
• Затем код firmware имеет возможность установить RMWKUP для отправки потока "upstream resume". Это будет автоматически сделано контроллером после 5 мс неактивности шины USB.
• Когда контроллер начнет отправку "upstream resume", устанавливается флаг UPRSMI и срабатывает прерывание (если оно разрешено). Если установлен SUSPI, то он будет очищен аппаратно.
• RMWKUP автоматически очищается аппаратно по окончании "upstream resume".
• После этого, если контроллер детектирует хороший сигнал "End Of Resume" от хоста, сработает прерывание EORSMI (если оно разрешено).

[20.11 STALL request (запрос приостанова по ошибке)]

Для каждой конечной точки управление STALL производится с использованием 3 битов:
– STALLRQ (enable stall request, разрешение запроса STALL)
– STALLRQC (disable stall request, запрет запроса STALL)
– STALLEDI (stall sent interrupt, прерывание отправки STALL)

Чтобы отправить 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 для подтверждения пакета и для очистки банка конечной точки.
• RXOUTI устанавливается, когда приняты новые данные OUT. Он должен быть очищен кодом firmware для подтверждения пакета и для очистки банка конечной точки.
• TXINI устанавливается, когда банк готов принять новый пакет IN. Он должен быть очищен кодом firmware для отправки пакета и для очистки банка конечной точки.

CONTROL endpoints не должны управляться (обслуживаться по прерываниям), это должно делаться только путем опроса битов статуса.

20.12.1 Control Write (запись пакета управления)

На следующем рисунке показана транзакция записи управления (control write transaction). Во время стадии статуса, контроллеру необязательно отправлять NAK на первом токене IN:

• Если firmware знает точное количество байт дескриптора, которое должно быть прочитано, то оно может опередить стадию статуса и отправить ZLP (Zero Length Packet, пакет нулевой длины) для следующего токена IN,
• или firmware может читать байты и опрашивать NAKINI, который говорит, что все байты отправлены хостом, и транзакция находится в состоянии статуса (status stage).

AT90USB162-Control-Write

Пояснения к диаграмме: 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:

AT90USB162-Control-Read

Пояснения к диаграмме: 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). Получается прием:
- установка флага RXOUTI (приняты данные OUT)
- установка флага TXINI (данные отправлены, есть готовность к новым данным)

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

Установить готовность к передаче (transmit ready)
Ожидание (завершения передачи OR завершения приема)
Если завершен прием, то очистить флаг и возвратиться
Если завершена передача, то продолжить

Как только принято состояние статуса (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

AT90USB162-example-OUT-endpoint-management-1-bank

Пример с 2 банками данных OUT

AT90USB162-example-OUT-endpoint-management-2-banks

Пояснения к рисункам: OUT, DATA, ACK - стадии процесса передачи (данные от хоста, положительное подтверждение). RXOUTI - флаг прерывания окончания приема пакета. HW - аппаратная установка флага, SW - программный сброс флага. FIFOCON - бит, установка которого означает прием нового сообщения в текущий банк.

20.13.2 Подробное описание

Данные читаются CPU в следующем порядке:
• Когда банк заполнен хостом, сработает прерывание (EPINTx), если это прерывание разрешено (если установлен RXOUTE), и установится бит RXOUTI. CPU может так же постоянно опрашивать состояние RXOUTI или FIFOCON, в зависимости от выбранной архитектуры программы.
• CPU подтверждает прерывание путем очистки RXOUTI.
• CPU может читать некоторое количество байт (N) в текущем банке (N=BYCT).
• CPU может читать данные из текущего банка (N чтений регистра UEDATX).
• CPU может освободить банк путем очистки FIFOCON, когда все данные будут прочитаны:
• после N чтений UEDATX,
• как только RWAL будет очищен аппаратно.

Если конечная точка использует 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

AT90USB162-example-IN-endpoint-management-1-bank

Пример с 2 банками данных IN

AT90USB162-example-IN-endpoint-management-2-banks

Пояснения к рисункам: IN, DATA, ACK, NACK - стадии процесса передачи (данные к хосту, положительное подтверждение, отрицательное подтверждение). TXINI - флаг готовности передатчика. HW - аппаратная установка флага, SW - программный сброс флага. FIFOCON - бит, установка которого означает прием нового сообщения в текущий банк.

20.14.1 Подробное описание

Данные записываются CPU в следующем порядке:
• Когда банк пуст, срабатывает прерывание (EPINTx), если оно разрешено (если установлен TXINE), и устанавливается TXINI. CPU может также опрашивать TXINI или FIFOCON, в зависимости от выбранной архитектуры программы.
• CPU подтверждает прерывание путем очистки TXINI.
• CPU может записать данные в текущий банк (записями в регистр UEDATX).
• CPU может освободить банк путем очистки FIFOCON, когда все данные будут записаны:
• после N записей в UEDATX
• как только RWAL будет очищен аппаратно.

Если конечная точка использует 2 банка, то второй банк может быть читаться хостом, пока текущий первый банк записывается CPU. Затем, когда CPU очистит FIFOCON, следующий банк может быть уже свободным (готовым для новой записи в него CPU), и тогда TXINI установится немедленно.

20.14.1.1 Abort

Стадия "abort" может быть представлена хостом в некоторых ситуациях:

• В транзакции управления (control transaction): принят ZLP данных OUT на стадии IN.
• В транзакции isochronous IN: принят ZLP данных OUT на конечной точке OUT на стадии IN конечной точки IN.
• ...

Бит KILLBK используется, чтобы "убить" последний "записанный" банк. Вот самый лучший способ выполнить abort (последовательность действий):

Таблица 20-1. Abort flow

AT90USB162-Abort-flow-table20-1

[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)

AT90USB162-USB-Device-Controller-Interrupt-System-fig20-4

Здесь есть 2 вида прерываний: обработка (Processing interrupts, например, которые генерируются как часть нормальной обработки) и исключения exception (Exception Interrupts, errors, ошибки).

Processing interrupts (прерывания обработки) генерируются при:
• Upstream resume (UPRSMI), возобновления работы апстрим
• End of resume (EORSMI), окончание события возобновления работы
• Wake up (WAKEUPI), пробуждение
• End of reset (Speed Initialization) (EORSTI), окончание сброса (инициализации скорости)
• Start of frame(SOFI, if FNCERR=0), событие начала фрейма
• Определена приостановка (Suspend) после 3 мс неактивности (SUSPI).

Exception Interrupts (прерывания по ошибке) генерируются при:
• ошибке CRC в номере фрейма SOF (SOFI, FNCERR=1)

Рис. 20-5. USB Device Controller Endpoint Interrupt System (система прерываний конечной точки контроллера USB)

AT90USB162-USB-Device-Controller-Endpoint-Interrupt-System-fig20-5

Processing interrupts (прерывания обработки) генерируются при:
• Готовности принять данные IN (EPINTx, TXINI=1)
• Принят пакет данных OUT (EPINTx, RXOUTI=1)
• Принят пакет SETUP (EPINTx, RXSTPI=1)

Exception Interrupts (прерывания по ошибке) генерируются при:
• Stalled packet (EPINTx, STALLEDI=1), приостановленный по ошибке пакет
• Ошибка CRC на OUT в изохронном режиме (EPINTx, STALLEDI=1)
• Overflow (EPINTx, OVERFI=1)
• Underflow в изохронном режиме (EPINTx, UNDERFI=1)
• Отправлен NAK IN (EPINTx, NAKINI=1)
• Отправлен NAK OUT (EPINTx, NAKOUTI=1)

[20.18 Регистры]

20.18.1 USB device general registers (основные регистры устройства USB)

[UDCON]

AT90USB162-UDCON

• Bit 2 - RSTCPU - USB Reset CPU, бит сброса CPU
Установите этот бит в 1 из кода firmware, чтобы сбросить CPU при следующем событии USB reset (при этом контроллер USB не будет запрещен). Значение этого бита не будет затронуто сбросом CPU, который генерируется событием End Of Reset (бит RSTCPU останется установленным). Этот бит сброшен, когда контроллер USB запрещен. В противном случае сбросьте этот бит в 0 из кода firmware.

• Bit 1 - RMWKUP - Remote Wake-up, бит удаленного пробуждения
Установите для отправки "upstream-resume" хосту для удаленного пробуждения. Бит SUSPI должен быть установлен, чтобы разрешить отправку remote wake up. Очищается аппаратно, очистка из кода firmware не дает никакого эффекта. См. секцию 20.10 для получения подробностей.

• Bit 0 - DETACH - Detach, бит отключения
Установите этот бит для физического отключения устройства USB. Очистите этот бит, чтобы подключить устройство заново. См. секцию 20.9 для получения подробностей.

[UDINT]

AT90USB162-UDINT

• 7 - зарезервировано
Значение, которое читается из этого бита, всегда 0. Не устанавливайте этот бит.

• 6 - UPRSMI - Upstream Resume Interrupt Flag, флаг прерывания по возобновлению работы от апстрим
Устанавливается аппаратно, когда контроллер USB отправляет сигнал возобновления, так называемый "Upstream Resume". Это вызовет прерывание USB, если установлен бит UPRSME. Бит UPRSMI должен быть сброшен кодом firmware (перед этим должны быть разрешены такты USB). Установка UPRSMI из кода firmware не дает никакого эффекта.

• 5 - EORSMI - End Of Resume Interrupt Flag, флаг прерыванию по окончанию события возобновления работы
Устанавливается аппаратно, когда контроллер USB хороший сигнал "End Of Resume", инициированный хостом. Это вызовет прерывание USB, если установлен бит EORSME. Бит EORSMI должен быть сброшен кодом firmware (перед этим должны быть разрешены такты USB). Установка EORSMI из кода firmware не дает никакого эффекта.

• 4 - WAKEUPI - Wake-up CPU Interrupt Flag, флаг прерывания пробуждения CPU
Устанавливается аппаратно, когда контроллер USB реактивируется отфильтрованным сигналом non-idle от сигнальных линий USB (это не upstream resume). Это вызовет прерывание, если установлен бит WAKEUPE. Бит WAKEUPI должен очищаться из кода firmware (перед этим должны быть разрешены такты USB). Установка из кода firmware не дает никакого эффекта. Для получения подробностей см. секцию 20.8.

• 3 - EORSTI - End Of Reset Interrupt Flag, флаг прерывания по событию окончания сброса по шине
Устанавливается аппаратно, когда контроллером USB детектирован сигнал "End Of Reset". Это вызовет срабатывание прерывания, если установлен бит EORSTE. Бит EORSTI должен быть сброшен кодом firmware (перед этим должны быть разрешены такты USB). Установка EORSTI из кода firmware не дает никакого эффекта.

• 2 - SOFI - Start Of Frame Interrupt Flag, флаг прерывания по событию начала фрейма
Устанавливается аппаратно, когда детектирован сигнал USB "Start Of Frame" PID (SOF), это событие случается каждые 1 мс с высокой точностью. Вызывает срабатывание прерывания, если установлен SOFE.

• 1 - зарезервировано

• 0 - SUSPI - Suspend Interrupt Flag, флаг прерывания по событию приостановки
Устанавливается аппаратно, когда детектируется "приостановка" работы (при отсутствии от 3 фреймов и более: состояние J длится уже 3 мс). Это вызывает прерывание USB, если установлен флаг SUSPE. Бит SUSPI должен быть сброшен кодом firmware (перед этим должны быть разрешены такты USB). Установка SUSPI из кода firmware не дает никакого эффекта. См. секцию 20.8 для получения подробностей.

Биты флагов прерывания устанавливаются даже в том случае, если их соответствующие биты разрешения прерывания не установлены.

[UDIEN]

AT90USB162-UDIEN

• 7 - зарезервировано
Значение, которое читается из этого бита, всегда 0. Не устанавливайте этот бит.

• 6 - UPRSME - Upstream Resume Interrupt Enable, бит разрешения прерывания по событию возобновления от апстрим
Установите этот бит для разрешения прерывания UPRSMI, сбросьте для запрещения этого прерывания.

• 5 - EORSME - End Of Resume Interrupt Enable, бит разрешения прерывания по окончании события возобновления.
Установите этот бит для разрешения прерывания EORSMI, сбросьте для запрещения этого прерывания.

• 4 - WAKEUPE - Wake-up CPU Interrupt Enable, бит разрешения прерывания от события пробуждения CPU
Установите этот бит для разрешения прерывания WAKEUPI, сбросьте для запрещения этого прерывания.

• 3 - EORSTE - End Of Reset Interrupt Enable, бит разрешения прерывания от события окончания сброса по шине
Установите этот бит для разрешения прерывания EORSTI, сбросьте для запрещения этого прерывания.

• 2 - SOFE - Start Of Frame Interrupt Enable, бит разрешения прерывания от события начала фрейма
Установите этот бит для разрешения прерывания SOFI, сбросьте для запрещения этого прерывания.

• 1 - зарезервировано

• 0 - SUSPE - Suspend Interrupt Enable, бит разрешения прерывания от события приостановки.
Установите этот бит для разрешения прерывания SUSPI, сбросьте для запрещения этого прерывания.

[UDADDR]

AT90USB162-UDADDR

• 7 - ADDEN - Address Enable Bit, бит разрешения адреса
Установите для активации UADD (адрес по шине USB). Очищается аппаратно, очистка из firmware не дает никакого эффекта. См. секцию 20.7 для получения подробностей.
• 6-0 - UADD6:0 - биты адреса USB
Установите для конфигурирования адреса устройства. Эти биты не должны очищаться.

[UDFNUMH]

AT90USB162-UDFNUMH

• 7-3 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 2-0 - FNUM10:8 - Frame Number Upper Flag, флаг старших бит номера фрейма
Устанавливается аппаратно. Эти биты содержат 3 старших бита от 11-битного номера фрейма. Они предоставляются в последнем принятом пакете SOF. FNUM обновляется, если принят испорченный SOF.

[UDFNUML]

AT90USB162-UDFNUML

• 7-0 Frame Number Lower Flag, флаг младших битов номера фрейма
Устанавливается аппаратно. Эти биты несут в себе 8 младших бит от 11-битного номера фрейма.

[UDMFN]

AT90USB162-UDMFN

• 7-5 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 4 - FNCERR - Frame Number CRC Error Flag, номер фрейма флага ошибки CRC
Устанавливается аппаратно, если принят испорченный номер фрейма в пакете начала фрейма. Этот бит и бит прерывания SOFI обновляются одновременно.

• 3-0 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

20.18.2 USB device endpoint registers (регистры конечной точки устройства USB)

[UENUM]

AT90USB162-UENUM

• 7-3 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 2-0 - EPNUM2:0 Endpoint Number, биты номера конечной точки
Установите для выбора конечной точки, к которой должен получить доступ CPU. См. секцию 20.5 для получения подробностей. Запрещены номера, которые превышают двоичное значение 100b (всего имеется 5 конечных точек с номерами от 0 до 4).

[UERST]

AT90USB162-UERST

• 7-5 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 4-0 - EPRST4:0 - Endpoint FIFO Reset Bits, биты сброса FIFO конечной точки
Установите для сброса FIFO выбранной конечной точки перед любой другой операцией. Устанавливаются при аппаратном сбросе или когда принят сброс по шине (USB bus reset). Подробности см. в секции 20.3. Очищается кодом firmware для завершения операции сброса и начала использования FIFO.

[UECONX]

AT90USB162-UECONX

• 7-6 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 5 - STALLRQ - STALL Request Handshake Bit, бит хендшейка STALL
Установите для запроса ответа STALL хосту для следующего хендшейка. Очищается аппаратно, когда принят новый SETUP. Очистка из кода firmware не дает эффекта. См. секцию 20.11 для получения подробностей.

• 4 - STALLRQC - STALL Request Clear Handshake Bit, бит сброса состояния запроса хендшейка STALL
Установите для запрета работы механизма STALL handshake. Очищается аппаратно сразу после того, как будет установлен. Очистка из кода firmware не дает эффекта. См. секцию 20.11 для получения подробностей.

• RSTDT - Reset Data Toggle Bit, бит сброса переключения данных
установите для автоматической очистки последовательности переключения данных:
Для конечной точки OUT: следующий принятый пакет будет иметь состояние переключения данных 0.
Для конечной точки IN: следующий отправляемый пакет будет иметь состояние переключения данных 0.
Немедленно очищается аппаратурой. Код firmware не сможет дождаться момента сброса этого бита. Очистка из кода firmware не дает эффекта.

• 2-1 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 0 - EPEN - Endpoint Enable, бит разрешения работы конечной точки
Установите для разрешения работы конечной точки в соответствии с конфигурацией устройства. Endpoint 0 всегда будет разрешенной после аппаратного сброса или сброса по шине USB, так как она участвует в конфигурировании устройства. Очистка бита EPEN запретит работу конечной точки. Подробности см. в секции 20.6.

[UECFG0X]

AT90USB162-UECFG0X

• 7-6 - EPTYPE1:0 - Endpoint Type Bits, биты типа конечной точки
Установите эти биты в соответствии с конфигурацией конечной точки:
00b: Control
10b: Bulk
01b: Isochronous
11b: Interrupt

• 5-1 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 0 - EPDIR - Endpoint Direction Bit, бит направления конечной точки
Установите при конфигурировании направления IN (от устройства к хосту) для конечных точек bulk, interrupt или isochronous. Очистите при конфигурировании направления OUT (от хоста к устройству) для конечных точек bulk, interrupt, isochronous или control.

[UECFG1X]

AT90USB162-UECFG1X

• 7 - зарезервировано
Значение, которое читается из этого бита, всегда 0. Не устанавливайте этот бит.

• 6-4 - EPSIZE2:0 - Endpoint Size Bits, биты размера конечной точки.
Установите эти биты в соответствии с выбранным размером конечной точки:
000b: 8 байт
001b: 16 байт
010b: 32 байта
011b: 64 байта
Другие значения зарезервированы, не используйте их для конфигурации.

• 3-2 - EPBK1:0 - Endpoint Bank Bits, биты банка конечной точки
Установите это поле в соответствии с выбранным количеством банков конечной точки:
00b: один банк
01b: двойной банк
1xb: зарезервировано, не используйте эти значения при конфигурировании.

• 1 - ALLOC - Endpoint Allocation Bit, бит выделения памяти конечной точки.
Установите этот бит для выделения памяти буфера конечной точки. Очистите для освобождения памяти, занятой конечной точкой. Для получения подробностей см. секцию 20.6.

• 0 - зарезервировано
Значение, которое читается из этого бита, всегда 0. Не устанавливайте этот бит.

[UESTA0X]

AT90USB162-UESTA0X

• 7 - CFGOK - Configuration Status Flag, флаг состояния конфигурации
Устанавливается аппаратно, когда endpoint X size parameter (EPSIZE) и параметры банка (EPBK) установлены корректно по критерию максимальной емкости FIFO и максимальному допустимому количеству банков. Этот бит обновляется, когда firmware устанавливает бит ALLOC. Если этот бит очищен, пользователь должен перепрограммировать регистр UECFG1X на корректные значения полей EPSIZE и EPBK.

• 6 - OVERFI - Overflow Error Interrupt Flag, флаг прерывания по ошибке переполнения
Устанавливается аппаратно, когда происходит ошибка переполнения на конечной точке isochronous. Срабатывает прерывание (EPINTx), если оно разрешено. См. секцию 20.15 для получения подробностей. Должен быть очищен программно кодом firmware. Установка из кода firmware не дает никакого эффекта.

• 5 - UNDERFI - Flow Error Interrupt Flag, флаг прерывания ошибки недогрузки
Устанавливается аппаратно, когда происходит ошибка underflow (недогрузка) на конечной точке isochronous. Срабатывает прерывание (EPINTx), если оно разрешено. См. секцию 20.15 для получения подробностей. Должен быть очищен программно кодом firmware. Установка из кода firmware не дает никакого эффекта.

• 4- зарезервировано
Значение, которое читается из этого бита, всегда 0. Не устанавливайте этот бит.

• 3-2 - DTSEQ1:0 - Data Toggle Sequencing Flag, флаг последовательного переключения данных (используется для банков)
Устанавливается аппаратно, чтобы указать PID data для текущего банка:
00b Data0
01b Data1
1xb зарезервировано.
Для передач OUT это значение показывает последнее переключение данных, принятое на текущем банке. Для передач IN это значение показывает переключение данных, которое будет использоваться для следующего пакета, который будет отправлен (в этом случае это не относится к текущему банку).

• 1-0 - NBUSYBK1:0 - Busy Bank Flag, флаг занятости банка
Устанавливается аппаратно, чем показывается количество занятых банков. Для конечной точки IN это показывает количество занятых банков, заполненных firmware, которые готовы для передачи IN (от устройства к хосту). Для конечной точки OUT это показывает количество занятых банков, заполненных транзакциями OUT хоста.
00b все банки свободны
01b занят 1 банк
10b занято 2 банка
11b зарезервировано.

[UESTA1X]

AT90USB162-UESTA1X

• 7-3 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 2 - CTRLDIR - Control Direction (флаг и бит, используемый для отладки)
Устанавливается аппаратно после пакета SETUP, и дает направление для следующего пакета:
- 1 для конечной точки IN.
- 0 для конечной точки OUT.
Бит CTRLDIR не может быть установлен или брошен кодом firmware.

• 1-0 - CURRBK1:0 - Current Bank, текущий банк (относится ко всем конечным точкам, за исключением Control endpoint)
Устанавливается аппаратно, чтобы показать номер текущего банка:
00b Bank0
01b Bank1
1xb зарезервировано.
Биты CURRBK1:0 не могут быть установлены или брошены кодом firmware.

[UEINTX]

AT90USB162-UEINTX

• 7 - FIFOCON - FIFO Control Bit, бит управления FIFO
Для конечных точек OUT и SETUP устанавливается аппаратно, когда новое сообщение OUT сохранено в текущем банке, одновременно с RXOUT или RXSTP. Очистите для освобождения текущего банка и переключения на следующий банк. Установка из кода firmware не дает никакого эффекта.

Для конечной точки IN устанавливается аппаратно, когда текущий банк освобожден, одновременно с TXIN. Очистите для отправки данных FIFO и переключения банка. Установка из кода firmware не дает никакого эффекта.

• 6 - NAKINI - NAK IN Received Interrupt Flag, флаг прерывания принятого отрицательного подтверждения NAK IN
Устанавливается аппаратно, когда отправлен NAK handshake в ответ на запрос IN от хоста. Вызывает срабатывание прерывания USB, если установлен NAKINE. Бит NAKINI должен очищаться программно из кода firmware. Установка из кода firmware не дает никакого эффекта.

• 5 - RWAL - Read/Write Allowed Flag, флаг разрешения чтения/записи
Устанавливается аппаратно по сигналу:
- для конечных точек IN endpoint: текущий банк не заполнен, например, firmware может протолкнуть данные в FIFO.
- для конечных точек OUT: текущий банк не пуст, например, firmware может вычитать данные из FIFO.

Бит не устанавливается, если установлен STALLRQ, или в случае ошибки. Иначе очищается аппаратно. Этот бит не должен использоваться для управляющей конечной точки (control endpoint).

• 4 - NAKOUTI - NAK OUT Received Interrupt Flag, флаг прерывания принятого отрицательного подтверждения NAK OUT
Устанавливается аппаратно, когда отправлен NAK handshake в ответ на запрос OUT/PING от хоста. Это вызывает срабатывание прерывания USB, если установлен NAKOUTE. Бит NAKOUTI должен очищаться из кода firmware. Установка из кода firmware не дает никакого эффекта.

• 3 - RXSTPI - Received SETUP Interrupt Flag, флаг прерывания по принятию пакета SETUP
Устанавливается аппаратно, чтобы сигнализировать о том, что текущий банк содержит новый валидный пакет SETUP. При этом срабатывает прерывание (EPINTx), если оно было разрешено. Бит должен быть очищен из firmware для подтверждения (handshake) прерывания. Установка из кода firmware не дает никакого эффекта. Этот бит неактивен (очищен), если конечная точка является IN.

• 2 - RXOUTI / KILLBK - Received OUT Data Interrupt Flag, флаг прерывания по приему пакета данных OUT
Устанавливается аппаратно, чтобы сигнализировать, что текущий банк содержит новый пакет. При этом срабатывает прерывание (EPINTx), если оно разрешено. Бит должен быть очищен из firmware для подтверждения (handshake) прерывания. Установка из кода firmware не дает никакого эффекта.

Kill Bank IN Bit
Установите этот бит, чтобы "убить" последний записанный банк. Очищается аппаратно, когда банк убит. Очистка из кода firmware не дает никакого эффекта. Для подробностей см. описание операции Abort.

• 1 - STALLEDI - STALLEDI Interrupt Flag, флаг прерывания отправки STALL
Устанавливается аппаратно для сигнализироавния, что отправлен STALL handshake, или что детектирована ошибка CRC на изохронной конечной точке OUT. Бит должен быть очищен из firmware. Установка из кода firmware не дает никакого эффекта.

• 0 - TXINI - Transmitter Ready Interrupt Flag, флаг прерывания готовности передатчика
Устанавливается аппаратно для сигнализирования о том, что текущий банк свободен и может быть заполнен новыми данными. При этом срабатывает прерывание (EPINTx), если оно разрешено. Бит должен быть очищен из firmware для подтверждения (handshake) прерывания. Установка из кода firmware не дает никакого эффекта. Этот бит неактивен (очищен), если это конечная точка OUT.

[UEIENX]

AT90USB162-UEIENX

• 7 - FLERRE - Flow Error Interrupt Enable Flag, бит разрешения прерывания по флагу ошибки потока (недогрузка)
Установите, чтобы разрешить прерывание конечной точки (EPINTx) когда установлен OVERFI или UNDERFI. Очистите, чтобы запретить это прерывание.

• 6 - NAKINE - NAK IN Interrupt Enable Bit, бит разрешения прерывания по флагу отрицательного подтверждения NAK IN
Установите, чтобы разрешить прерывание конечной точки (EPINTx), когда установлен NAKINI. Очистите, чтобы запретить это прерывание.

• 5 - зарезервировано
Значение, которое читается из этого бита, всегда 0. Не устанавливайте этот бит.

• 4 - NAKOUTE - NAK OUT Interrupt Enable Bit, бит разрешения прерывания по флагу отрицательного подтверждения NAK OUT
Установите, чтобы разрешить прерывание конечной точки (EPINTx), когда установлен NAKOUTI. Очистите, чтобы запретить это прерывание.

• 3 - RXSTPE - Received SETUP Interrupt Enable Flag, бит разрешения прерывания по флагу прихода пакета SETUP
Установите, чтобы разрешить прерывание конечной точки (EPINTx) когда установлен RXSTPI. Очистите, чтобы запретить это прерывание.

• 2 - RXOUTE - Received OUT Data Interrupt Enable Flag, бит разрешения прерывания от флага принятого пакета данных OUT
Установите, чтобы разрешить прерывание конечной точки (EPINTx) когда установлен RXOUTI. Очистите, чтобы запретить это прерывание.

• 1 - STALLEDE - Stalled Interrupt Enable Flag, бит разрешения прерывания по флагу останова
Установите, чтобы разрешить прерывание конечной точки (EPINTx), когда установлен STALLEDI. Очистите, чтобы запретить это прерывание.

• 0 - TXINE - Transmitter Ready Interrupt Enable Flag, бит разрешения прерывания по флагу готовности передатчика
Установите, чтобы разрешить прерывание конечной точки (EPINTx), когда установлен TXINI. Очистите, чтобы запретить это прерывание.

[UEDATX]

AT90USB162-UEDATX

• 7-0 - DAT7:0 - Data Bits, биты данных
Читаются или записываются из кода firmware для чтения/записи байта из FIFO конечной точки или в FIFO конечной точки, выбранной через EPNUM.

[UEBCLX]

AT90USB162-UEBCLX

• 7-0 - BYCT7:0 - Byte Count Bits, биты счетчика байт
Устанавливаются аппаратно. Значение BYCT7:0:
- (для конечной точки IN) увеличивается на 1 после каждой записи в конечную точку и декрементируется (уменьшается на 1) после каждого отправленного байта,
- (для конечной точки OUT) увеличивается на 1 для каждого отправленного хостом байта, и уменьшается на 1 при чтении каждого байта из кода firmware.

[UEINT]

AT90USB162-UEINT

• 7-5 - зарезервировано
Значение, которое читается из этих бит, всегда 0. Не устанавливайте эти биты.

• 4-0 - EPINT4:0 - Endpoint Interrupts Bits, биты прерываний конечной точки
Устанавливаются аппаратно, когда срабатывает прерывание по регистру UEINTX, если установлен соответствующий бит разрешения прерывания конечной точки. Очищается аппаратно, когда источник прерывания обслужен.


[21. PS/2]

Те же самые ножки AT90USB162, которые используются под сигналы USB, могут функционировать как интерфейс PS/2. Этот интерфейс по физическим сигнальным линиям является аналогом I2C (TWI), и может использоваться для подключения клавиатуры или мыши. К сожалению, формирование протокола PS/2 не аппаратное, и перепады сигналов тактов и данных на нем придется формировать вручную, в коде firmware.

[21.1 Характеристики интерфейса PS/2]

Ножки PS/2 по вводу и выводу (IO) имеет следующие параметры:
– поддерживаются логические уровни 5.5V (min: 4.5V, max: 5.5V).
– тип выходов открытый строк (open drain).
– выходной уровень получается под управлением MCU, когда подключен 1 кОм pull-up резистор. При этом максимальное выходное напряжение нуля VOLmax = 0.7V.
– время спада с резистором 1 кОм pull-up и нагрузкой 500 пф: 250 нс < Tfall < 1 мкс
– внутренний 2.2 кОм .. 10 кОм pull-up Vcc (5V), управляемый firmware.
– когда запрещен pull-up, имеет выход с высоким сопротивлением.

Рис. 21-1. Переключение между ножками USB и ножками PS/2

AT90USB162-pads-USB-PS2-fig21-1

[PS2CON]

• Bit 7:1 – зарезервированные биты, не устанавливайте их.

• Bit 0 – PS2EN : PS/2 Pad Enable, разрешение работы ножек в режиме PS/2
Установите этот бит в 1 для разрешения работы ножек PS/2. Сбросьте этот бит в 0 для запрета ножек PS/2. Для дополнительной информации по поводу управления ножками, см. USB/PS2 Software Output Enable register – (UPOE). Регистр UPOE, описанный в этой секции, позволяет читать или записывать логические значения уровня на выводах. Протокол PS/2 должен быть полностью реализован программно в коде firmware.

Рис. 21-2. Описание ножек PS/2

AT90USB162-PS2-pads-description-fig21-2

Внимание: значение внутренних резисторов pull-up может быть в диапазоне 2.2 .. 10 кОм.

Таблица 21-1. параметры ножек PS/2 по постоянному току (DC parameters)

Мнемоника Параметр Условие MIN типичное
значение
MAX
UVCC Напряжение питания PS/2 4.0V 4.5V 5.5V
VIL Входное напряжение лог. 0 UVCC = 4.5V .. 5.5V 0.7V
VIH Входное напряжение лог. 1 UVCC = 4.5V .. 5.5V 2.4V
RIH Резистор pull-up UVCC = 4.5V .. 5.5V 4.4 кОм 5.1 кОм 6.5 кОм
Tfall_output Время спада UVCC = 4.5V .. 5.5V
10% - 90%
Rload = 1кОм, Cload = 500пФ
330 нс 375 нс 450 нс
Tspike Фильтрация ширины импульса 60 нс

[Словарик]

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.
2. Макетная плата AVR-USB162.
3. Макетная плата AVR-USB162MU.
4. LUFA - бесплатная библиотека USB для микроконтроллеров Atmel AVR.

 

Добавить комментарий


Защитный код
Обновить

Top of Page