MAX3421E: руководство по программированию |
Добавил(а) microsin | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
В этой статье приведен перевод документа AN3785 [1] с описанием контроллера MAX3421E [4], который добавляет функционал USB хоста или устройства USB к любой системе (микроконтроллеру), где есть интерфейс SPI. В этом руководстве описывается в основном только режим хоста USB - каждый регистр и каждый бит, относящиеся к этому режиму. Программирование режима устройства USB см. в руководстве по программированию MAX3420E [2]. MAX3421E это контроллер двойной роли на шине USB, т. е. его поведение можно запрограммировать либо как периферийное устройство USB (подчиненное устройство шины), либо как хост USB (главное устройство шины). В качестве периферийного устройства USB микросхема MAX3421E работает идентично MAX3420E [2], которая может работать только как устройство USB. Если Вы хотите использовать MAX3421E только как устройство USB, то можно использовать код от MAX3420E, удерживая бит HOST в лог. 0 (значение по умолчанию). Если Вы планируете использовать MAX3421E только как устройство USB, но хотите задействовать новые функции устройства, см. в этом руководстве описание регистров R21 .. R24 и добавленные биты PULSEWID1, PULSEWID0, SEPIRQ и HOST. И потом обращайтесь к руководству по программированию MAX3420E [2]. Большинство пользователей микросхемы MAX3421E желают использовать её как хост USB, для чего и предназначено это руководство. В таблице 1 представлены биты и регистры, предназначенные только для режима хоста. Также для удобства в таблице 2 представлены все биты регистров, относящиеся к работе в обоих режимах - и хоста, и устройства USB. Таблица 1. Регистры хоста MAX3421E (Host Bit = 1).
Примечание: в колонке "Доступ" буквы определяют, каким образом SPI получает доступ к регистрам. R чтение, S установка, RC чтение или очистка, RSC чтение, установка или очистка. LS обозначает load-sensitive, т. е. запись в LS регистр инициирует операцию хоста на основе записанного содержимого регистра. Запись в R-регистр не дает никакого эффекта. Запись 1 в бит RC сбрасывает его в 0, запись 0 в бит RC не дает никакого эффекта. Установка в лог. 1 бита HOST (бит 0 регистра R27) меняет карту регистров MAX3420E в трех направлениях. Меняется назначение регистров R0 .. R7, очищаются биты, которые не относятся к работе хоста, и добавляются регистры 25, 26, и 28 .. 31. Биты, показанные в таблице 1 в значении лог. 0, должны записываться как 0 в режиме хоста. Для ясности не используемые периферийные регистры и биты показаны нулями. Таблица 2. Все регистры и биты MAX3421E, относящиеся к режимам устройства и хоста (выделенные серым фоном биты не должны меняться при изменении режима работы, т. е. при изменении бита HOST).
MAX3421E работает в двух режимах, периферийное устройство USB или хост USB. • Биты, относящиеся к устройству USB, документированы в руководстве программирования MAX3420E [2]. CPU. Интерфейсом SPI микросхемы MAX3421E может управлять любой мастер SPI, например микроконтроллер, процессор DSP или микросхема ASIC (MAX3421E работает как подчиненное устройство SPI). Для простоты все эти главные устройства, работающие как SPI, обозначаются как CPU. ISO. Это аббревиатура для термина ISOCHRONOUS (изохронный), обозначающего один из 4 типов транзакций USB. Когда микросхема MAX3421E работает как хост USB, она поддерживает транзакции full-speed ISO. В качестве устройства USB изохронные транзакции не поддерживаются. POR. Сокращение от Power-On Reset обозначает встроенную систему сброса при включении питания микросхемы MAX3421E, или сам этот сброс. SIE. Serial Interface Engine, обозначает логический блок внутри MAX3421E, который обслуживает любую активность на шине USB. В этой документации биты в регистрах могут устанавливать и сбрасывать как CPU, так и сама микросхема MAX3421E. Таким образом, аббревиатура SIE используется в случаях, когда MAX3421E устанавливает или сбрасывает бит; аббревиатура CPU показывает, что битом управляет SPI master, подключенный к MAX3421E. SOF/KA. SOF обозначает Start Of Frame (сигнал начала кадра), а KA обозначает Keep-Alive (сигнал поддержки работоспособности). Вместе они упоминаются потому, что происходят строго с интервалом в 1 миллисекунду, однако SOF применятся на полной скорости USB (FS, Full Speed), а KA на низкой скорости USB (LS, Low Speed). Другие непонятные термины и сокращения, касающиеся USB, см. в статье [3]. [Виды сброса] У MAX3421E есть 3 источника сброса: 1. Внутренняя схема сброса при подаче питания Power-On-Reset (POR). Может произойти еще четвертый вариант сброса. Когда меняет значение бит HOST (переключается режим работы - как хост или как устройство), SIE очищает определенные биты регистров. Ниже объясняются эффекты каждого источника сброса. Биты регистров MAX3421E тактируются из двух источников: 1. Внутренний генератор 12 МГц. Когда выставляется сигнал сброса RES# или PWRDOWN, внутреннее тактирование 12 МГц останавливается. Большинство бит регистров асинхронно очищаются. Однако биты регистров, которые тактируются от интерфейса SPI, остаются активными, так что CPU может управлять конфигурацией SPI (например, бит FDUPSPI), регистрами подтяжки вниз на шине USB (pulldown resistors), и состоянием бита PWRDOWN. Power-On Reset (POR). SIE очищает каждый бит в регистрах. При выходе из сброса SIE установит следующие биты, чтобы показать доступность буферов: IN3BAVIRQ (периферийное устройство USB) Примечание: POR сбросит бит HOST в лог. 0, что по умолчанию активирует режим устройства USB. Сигнал RES# или установка CHIPRES=1. Эти виды сброса останавливают генератор 12 МГц и очищают большинство бит регистров, но оставляют неизменными биты регистров, тактируемых от SPI, и эти биты остаются доступными для CPU. Это следующие биты: HOSCSTEN Примечание: сброс от RES# и сброс установкой CHIPRES=1 сбросят бит HOST в лог. 0, что по умолчанию активирует режим устройства USB. Смена режима устройство -> хост. SIE очистит те биты регистров, которые не применимы к работе хоста. CPU не должен ничего записывать в биты этих регистров, кроме лог. 0, когда HOST = 1: EPSTALLS Смена режима хост -> устройство. CPU должен вернут режим устройства установкой бита CHIPRES, что очистит биты в соответствии с перечисленными выше правилами и сбросит в лог. 0 бит HOST. [Доступ к регистрам MAX3421E] Мастер SPI управляет микросхемой MAX3421E путем записи и чтения 21 внутренних регистров R0 .. R31 (см. таблицу 1 выше). SPI master начинает доступ к каждому регистру подачей сигнала на ножку SS# (slave select, активный уровень лог. 0), и вводом 8 бит, которые представляют байт команды SPI. Рис. 1 показывает формат байта команды.
Рис. 1. Байт команды SPI. Как для всех передач SPI, бит 7 передается первым. Бит ACKSTAT достоверен только в режиме устройства USB, в режиме хоста микросхема MAX3421E игнорирует этот бит. Биты Reg4:Reg0 устанавливают адрес регистра, для этих бит допустимы значения от 0 до 31. Бит DIR устанавливает направление для последующих байт в транзакции (1 запись, 0 чтение). Бит ACKSTAT дублирует бит управления USB (бит 6 регистра R9), и этот бит имеет значение только когда MAX3421E работает как устройство USB (SIE игнорирует бит ACKSTAT, когда HOST = 1). После отправки байта команды SPI master передает один или большее количество байт в направлении, которое было указано битом DIR. Удерживая SS# в лог. 0, SPI генерирует по 8 импульсов тактов SCK для бит каждого передаваемого байта. Когда передача байт завершена, SPI master снимает сигнал SS# (переводя его в лог. 1), и транзакция завершается. У MAX3421E есть 2 типа регистров, регистры FIFO и регистры управления. Повторяющиеся операции чтения или записи дают разные эффекты, в зависимости от типа регистра. R1, R2 и R4 дают доступ к внутренним стекам FIFO. После выбора номера регистра байтом команды, SPI master загружает или выгружает следующие друг за другом байты FIFO повторяющимися операциями чтения или записи во время одной транзакции SPI (с удержанием SS# в лог. 0). Например, чтобы записать 45 байт в SENDFIFO, SPI master должен выполнить следующие шаги: 1. Перевести ножку SS# в лог. 0 для начала транзакции. R13 .. R31 это регистры управления MAX3421Es. Если SPI с повторениями читает или записывает R13 .. R20 в пределах одной транзакции SPI (когда SS# в лог. 0), каждый прочитанный или записанный байт автоматически инкрементирует внутренний адрес регистра. Таким способом можно прочитать или записать последовательность нескольких регистров, не начиная новую транзакцию передачей новой команды с новым адресом, что повышает производительность доступа. Адрес регистра продолжает увеличиваться, пока не будет достигнут R20, дальше инкремент адреса прекращается. Эта фича дает микропроцессору быстрый доступ к ножкам IO, которые считываются или устанавливаются через R20. Например, для вывода какого-то сигнала в ножку GPIO, SPI master может записать байт команды 10100010 (запись в R20), и затем отправлять байты данных в R20, управляя тем самым ножками GPIO для вывода сигнала. Если SPI master явно адресует R21 или регистр с большим адресом, то адрес регистра также увеличивается в пределах одной транзакции (при SS# в лог. 0), пока адрес не достигнет R31, после чего инкремент адреса прекращается. Значения MISO для первых 8 бит в режиме Full-Duplex. Когда FDUPSPI = 1, микросхема MAX3421E работает со своим портом в режиме полного дуплекса. Это значит, что данные одновременно вдвигаются в ножку MOSI, и одновременно выдвигаются через ножку MISO по каждому положительному перепаду тактов SCK. Первые 8 бит, передаваемые в транзакции SPI, составляют байт команды, вдвигаемые через ножку MOSI. Одновременно с этим байтом команды MAX3421E передает свои данные состояния (status data) через ножку MISO. Биты статуса для режима хоста (HOST = 1) показаны на рис. 2.
Рис. 2. MISO data в режиме полного дуплекса при работе с хостом (FDUPSPI = 1, HOST = 1). [Программирование транзакций хоста] Когда HOST = 1, микросхема MAX3421E работает как хост. В этом режиме она должна генерировать запросы для подключенных к ней устройств USB. Для отправки каждого пакета необходимо передать следующее: • Адрес функции в регистре PERADDR Адрес функции и данные FIFO конечной точки сохраняются в MAX3421E, пока CPU их не поменяет. К примеру, это означает, что повторная отправка пакета OUT (из-за ошибки периферийного устройства USB) не требует от CPU повторной загрузки данных в стек SNDFIFO. Нужно просто запустить ту же самую транзакцию повторной записью в регистр HXFR. MAX3421E выполняет вспомогательную работу по обработке протокола USB. Путем установки вышеупомянутых бит запускается транзакция путем записи в регистр HXFR, затем происходит ожидание прерывания завершения (completion interrupt) и после этого проверка бит HRSLT (Host Result), чтобы увидеть результаты транзакции. Хотя MAX3421E сообщает о 16 событиях результата, обычно анализируют только биты результата, показанные в таблице 3. Таблица 3. Коды Host Result для нормального функционирования обмена хоста MAX3421E с устройством USB.
Все 16 кодов 16 показаны далее в таблице 6 (см. врезку "Регистр HRSL: HRSLT[3:0], SNDTOGRD, RCVTOGRD"). Ни одно из событий результата в таблице 3 не показывают электрических ошибок или ошибок сигнализации, здесь только результаты нормальных операций USB. Результат hrBUSY применяется для приложений, которые не используют запрос прерывания HXFRDN, чтобы определить момент завершения транзакции, и вместо этого опрашивают регистр HRSL с целью проверки завершения транзакции. Хост может запустить 7 различных типов транзакций, показанных в таблице 4. Таблица 4. Установка бит регистра HXFR для различных типов транзакций.
CPU может записать регистр HXFR в любое время, когда SIE не занята другой транзакцией. SIE заботится о том, чтобы избежать коллизий с автоматически генерируемыми маркерами фрейма SOF/KA. Если CPU записывает регистр HXFR достаточно поздно во фрейм, чтобы последующая передача столкнулась с маркером фрейма, SIE автоматически откладывает отправку пакета до тех пор, пока не сгенерирует следующий маркер фрейма. Примечание: хост USB передает данные через конечные точки BULK и INTERRUPT, используя одинаковые методы. Разница между этими двумя типами транзакций только в том, когда планируется отправка пакетов - функция, управляемая ПО firmware. Этот документ относится к транзакциям BULK с тем пониманием, что любое обсуждение BULK также применимо и к транзакциям INTERRUPT. MAX3421E Data Toggle. Протокол USB помечает каждый пакет данных одним из двух маркеров PID (Packet ID), которые называются DATA0 и DATA1. Эти PID-ы помогают определить наличие ошибок USB. С каждой конечной точкой связано значение переключения данных (data toggle value), которое определяет используемый в настоящий момент DATA PID. Первый пакет данных (после сброса), отправляемый в конечную точку или из неё, использует DATA0 PID. Когда обе стороны обмена, отправляющая и передающая, согласовали передачу друг друга и считают данные правильными (путем генерации/приема ACK handshake), они оба дополняют свои значения переключения. Таким образом, следующие друг за другом пакеты (отправляемые или принимаемые) для конечной точки при нормальном функционировании снабжаются чередующимися значениями PID: DATA0, DATA1, DATA0, и так далее. MAX3421E предоставляет 4 бита для поддержки data toggle. После передачи данных в конечную точку SIE обновляет биты RCVTOGRD и SNDTOGRD (см. далее врезку "Регистр HRSL: HRSLT[3:0], SNDTOGRD, RCVTOGRD"), чтобы показать значения переключения для выбранной конечной точки. CPU считывает и сохраняет эти биты, чтобы переинициализировать значение toggle для той же самой конечной точк, когда это необходимо. Для инициализации состояния toggle перед передачей в конечную точку, CPU устанавливает одну из пар бит SNDTOG1-SNDTOG0 для OUT data, или RCVTOG1-RCVTOG0 для IN data (см. далее врезку "SNDTOG1, SNDTOG0, RCVTOG1, RCVTOG0"). Только одна из этих пар битов должна быть установлена одновременно. Для CPU не нужно инициализировать значение toggle конечной точки следующих друг за другом транзакций, когда они работают с одной и той же конечной точкой. MAX3421E обновляет значение data toggle вместе с выполнением транзакции для конечной точки. Только когда CPU переключается на другую конечную точку, ему необходимо восстановить биты data toggle в значения, сохраненные для этой конечной точки. Программирование транзакций BULK-OUT. MAX3421E отправляет BULK data в устройство USB? to a peripheral using OUT packets, SNDFIFO data, and handshakes. CPU сначала проверяет SNDBAVIRQ = 1 (см. врезку "SNDBAVIRQ, SNDBAVIE") чтобы определить, доступен ли для загрузки буфер отправки (SIE установит этот бит запроса прерывания всякий раз, когда успешно завершилась транзакция OUT). Если буфер доступен, то CPU записывает до 64 байт данных в стек SNDFIFO (см. врезку "Регистр SNDFIFO") повторяющимися записями в R2. Затем CPU записывает счетчик байт (количество байт, загруженных в SNDFIFO) в регистр SNDBC (см. врезку "Регистр SNDBC"). Загрузка регистра SNDBC приведет к тому, что SIE инвертирует бит SNDBAVAIRQ. Примечание: если свободен второй буфер SNDFIFO с двойной буферизацией, то SIE немедленно повторно установит бит SNDBAVIRQ. CPU может потребоваться инициализировать значение data toggle для нужной конечной точки: • Если транзакция происходит для новой конечной точки, то CPU инициализирует data toggle в последнее сохраненное значение для этой конечной точки. В завершение CPU загружает регистр HXFR значением 0010eeee (см. таблицу 4), где eeee это номер конечной точки, в которую отправляются данные. Регистр HXFR чувствителен к загрузке (load-sensitive), это означает, что когда CPU загружает регистр HXFR, подсистема SIE инициирует транзакцию. SIE отправляет токен OUT, адрес в регистре PERADDR, номер конечной точки в EP[3:0], CRC5 и EOP. Сразу же за этим SIE посылает DATA0 или DATA1 PID (в зависимости от состояния бита toggle), SNDBC байт из SNDFIFO и CRC16. Затем SIE ждет ответа от устройства USB в течение 6.5 интервалов бит. Примечание: если SNDBC = 0, то SIE не отправляет байты данных, и просто отправляет DATA0 или DATA1 PID. Когда SIE принимает handshake или bus timeout, она устанавливает бит HXFRDNIRQ = 1 и показывает результаты в битах HRSLT[3:0] (см. врезку "Регистр HRSL: HRSLT[3:0], SNDTOGRD, RCVTOGRD"). Если устройство USB возвратит ACK handshake, SIE также дополняет data toggle, показывая успешную транзакцию (HRSLT[3:0] = 0000), и выставляет SNDBAVIRQ, показывая тем самым доступность буфера отправки (Send Buffer Available). Если устройство USB не подтвердило транзакцию (не поступило ACK handshake), данные может понадобиться отправить повторно. Например NAK handshake является общим ответом от устройства USB, когда ему надо показать неготовность принять данные. CPU распознает случай non-ACK для транзакции OUT путем проверки бит HRSLT. CPU заново запускает транзакцию OUT простой записью HXFR = 0010eeee. SIE будет использовать те же самые значения PERADDR и SNDBC, и ранее загруженные данные в стек SNDFIFO. Программирование транзакций BULK-IN. CPU выдает токен IN для запроса к периферийному устройству, чтобы оно передало свои данные в пакете BULK. Затем SIE принимает от устройства данные в свой стек RCVFIFO, и подтверждает (ACK) транзакцию. Для запуска IN транзакции CPU записывает HXFR = 0000eeee (см. таблицу 4), где eeee это адрес нужной конечной точки. SIE посылает токен IN, адрес в регистре PERADDR, номер конечной точки в EP[3:0], и CRC5. Затем ждет ответа от устройства в течение 6.5 интервалов бита. Если устройство ответит DATA0 или DATA1 PID, сопровождаемый данными, то SIE загрузит принятые байты данных в стек RCVFIFO и подсчитает их количество. По окончании пакета SIE проверит пакет на ошибки, обновит регистр RCVBC и биты HRSLT, и выставит бит HXFRDNIRQ. В зависимости от результата передачи SIE может выставить или не выставить бит запроса прерывания RCVDAVIRQ. Если данные IN были приняты без ошибок (HRSLT = 0000), то SIE отправляет токен ACK, проверяет комплементарное изменение data toggle и выставляет бит RCVDAVIRQ чтобы показать, что доступны новые достоверные данные IN. Если данные IN были приняты без ошибок, но было несовпадение data toggle (DATA0 или DATA1 PID был отправлен устройством USB, но он не совпал с ожидаемым значением, обозначаемым сохраненным значением toggle конечной точки), то SIE отправит ACK handshake, но не подтвердит комплемент data toggle и не выставит RCVDAVIRQ. SIE установит HRSL = 0110 (Toggle Error) для этой ситуации. Эта ситуация могла бы произойти, если устройство USB приняло поврежденное ACK handshake от предыдущей транзакции IN. В этом случае хост игнорирует данные в RCVDATA FIFO, потому что эти данные были отправлены повторно устройством по ошибке, когда оно не получило последний ACK handshake. SIE подтверждает ACK транзакцию и не обновляет свой бит toggle, тем самым принудительно синхронизируя с устройством механизм data toggle. Если биты HRSLT показывают ошибку данных, то SIE не отправляет ACK, не делает комплемент data toggle и не делает установку бита RCVDAVIRQ. CPU отвечает на индикацию HXFRDNIRQ проверкой битов результата в HRSLT[3:0]. Если результат 0000 (успех транзакции), то CPU считывает RCVBC, чтобы определить количество принятых байт, и затем считывает эти байты путем повторов чтения регистра RCVFIFO (см. врезку "RCVDAVIRQ, RCVDAVIE"). После того, как CPU получит данные, он очищает бит RCVDAVIRQ bit (путем записи в него лог. 1). Если в этот момент есть другой буфер с данными IN в стеке RCVFIFO с двойной буферизацией, то SIE немедленно снова установит бит RCVDAVIRQ. Примечание: SIE не делает автоматический повтор транзакции IN, когда была обнаружена ошибка. Вместо этого SIE оповещает от ошибке CPU (битами HXFRDNIRQ и HRSLT), и генерирует корректный ответ USB. Обычно CPU просто повторно отправит пакет IN путем перезагрузки регистра HXFR. Программирование транзакции CONTROL. Хост оправляет транзакцию CONTROL за 2 или 3 стадии: 1. Пакет SETUP, с отправкой 8 байт кода операции (op-code) устройству USB. Хост отправляет транзакцию CONTROL в конечную точку 0 устройства USB (эту конечную точку еще называют "конечная точка по умолчанию", или "конечная точка управления", или "конечная точка zero"). Стадия SETUP. CPU записывает 8-байт данных SETUP в стек SUDFIFO. Здесь со стеком SUDFIFO не связан регистр счетчика байт, потому что полезная нагрузка пакета SETUP всегда 8 (т. е. счетчик байт не загружается и не используется). Затем CPU загружает в регистр HXFR значение 00010000 (см. таблицу 4), которое инструктирует SIE направить пакет SETUP в конечную точку 0. После этого SIE отправляет пакет SETUP, состоящий из SETUP PID, адреса в регистре PERADDR (endpoint 0000), CRC5 и EOP, после чего идет пакет DATA0, содержащий 8 байт из SUDFIFO. SIE ждет в течение 18 интервалов бит ответа от устройства USB или наступления таймаута, и завершает транзакцию установкой бита HXFRDNIRQ и бит HSRLT (см. врезку "Регистр HRSL: HRSLT[3:0], SNDTOGRD, RCVTOGRD"). Стандарт USB говорит, что устройство USB всегда должно ответить ACK на пакет SETUP. Примечание: SIE посылает фиксированные токены DATA0 и DATA1 PID для разных стадий транзакции CONTROL, независимо от установки внутреннего data toggle. Стадия Data (необязательная). Если нужна стадия данных, то она программируется как транзакция BULK-IN или BULK-OUT. Некоторые транзакции CONTROL, такие как Set_Address, не требуют стадии данных, потому что данные команды укладываются в 8 байт пакета SETUP. Стадия Status. Уникальная для транзакций CONTROL, стадия статуса предоставляет дополнительные средства защиты для этих критически важных транзакций. Стадия статуса состоит из пакета IN или OUT в направлении, противоположном предыдущей стадии. Пакет STATUS это транзакция BULK-OUT или BULK-IN, в которой не содержатся данные, и которая всегда использует DATA1 PID. Программист должен посылать эти транзакции путем программирования стандартных BULK-транзакций. Однако для удобства MAX3421E предоставляет специальные коды запуска HS-OUT и HS-IN для подтверждений (handshakes), так что эту работу может выполнить SIE. HS-OUT. Хост посылает OUT handshake, чтобы завершить запрос CONTROL-READ, такой как Get_Descriptor (получение дескриптора устройства). Для отправки пакета OUT handshake в регистр HXFR загружается с помощью CPU значение 0xA0 (см. таблицу 4). SIE посылает OUT PID, адрес в PERADDR, конечную точку 0 и значение CRC5. SIE затем посылает DATA1 PID, и ждет в течение 6.5 интервалов бит ответа от устройства USB или таймаута. Обратите внимание, что это идентично пакету BULK-OUT без данных и с фиксированным DATA1 PID. Когда подсистема SIE принимает handshake или когда наступает таймаут шины, она устанавливает HXFRDNIRQ = 1 и показывает результаты в битах HRSLT[3:0] (см. врезку "Регистр HRSL: HRSLT[3:0], SNDTOGRD, RCVTOGRD"). HS-IN. Хост посылает IN handshake, чтобы завершить запрос CONTROL-WRITE, такой как Set_Address (установка адреса устройства USB на шине). Чтобы послать пакет IN handshake, CPU загружает регистр HXFR значением 0x80 (см. таблицу 4). SIE посылает IN PID, адрес в PERADDR, конечную точку 0 и значение CRC5, затем ждет 6.5 интервалов бита ответа от устройства USB. Затем SIE обновляет биты HRSLT и устанавливает бит HXFRDNIRQ. Если устройство USB возвратило DATA1 PID (без данных), то SIE автоматически отправит ACK handshake, показывая успешное завершение транзакции CONTROL. ISO-транзакции. Изохронные транзакции USB характеризуются доставкой данных в прогнозируемом интервале времени, без пакетов подтверждения (handshakes), чем изохронные транзакции отличаются от других типов транзакций USB. Как только хост USB провел энумерацию устройства и предоставил ему требуемую полосу изохронных передач (ISO bandwidth, этот параметр определяет количество байт, выделенное конечной точкой в каждом фрейме, передаваемом каждую 1 миллисекунду), стандарт USB требует от хоста передавать или получать указанное количество байт в каждом фрейме шины USB. В связи с этим необходимо задуматься о специальном способе подключения MAX3421E - довольно медленные интерфейс SPI, которым происходит соединение с CPU. Контроллер должен соответствовать требованиям планирования передач в строго определенные моменты времени. Если произошло несоответствие скорости передачи, то у микросхемы MAX3421E для этого есть 2 способа показать проблему, как это установлено битом DELAYISO. Двойная буферизация. Стеки SNDFIFO и RCVFIFO микросхемы MAX3421E снабжены двойной буферизацией. Это значит, что имеется 2 набора 64-байтных FIFO и регистров счетчика байт. Эта двойная буферизация воза для реализации ISO-транзакций, которые по размеру больше, чем один максимальный размер пакета из 64 байт. Функция двойной буферизации невидима для программиста: • Передачи IN: если CPU очистил бит RCVDAVIRQ (Receive Data Available IRQ) после чтения данных из RCVFIFO, и если имеется другой пакет данных, ожидающий чтения в другом буфере, то SIE немедленно снова установит бит RCVDAVIRQ. Хотя размер стеков SNDFIFO и RCVFIFO только 64 байта, подсистема SIE может передавать и принимать пакеты изохронных данных (ISO data) любого размера (до предела в 1023 байта, установленного спецификацией стандарта USB), путем дополнительной подгрузки (или выгрузки) данных на лету, работая с этими FIFO в процессе формирования одного большого пакета до тех пор, пока CPU своевременно считывает или записывает данные. SIE определяет окончание пакета данных ISO IN путем детектирования события шины EOP (End-Of-Packet). Для транзакций OUT подсистема SIE нормально определяет конец полезной нагрузки данных, когда CPU загружает в FIFO порцию размером меньше 64 байт. Это работает либо для одиночного пакета (63 или меньшее количество байт), либо для полезной нагрузки, которая распространяется на несколько 64-байтных загрузок буфера, где последняя загрузка содержит 63 или меньшее число байт. Однако существует специальный случай, когда количество байт длинного пакета нацело делится на 64. Для SIE нужно знать - то ли это последняя порция из 64 байт, то ли далее будут еще данные, потому что было загружено 64 байта. CPU информирует SIE о ситуации с последней 64-байтной загрузкой OUT (т. е. о завершении транзакции OUT, длина полезной нагрузки которой нацело делится на 64) путем загрузки в счетчик SNDBC значения 0. Это служит специальным сигналом для SIE, чтобы не происходило обычного действия по переключению буферов, когда загружен регистр SNDBC. Программирование транзакций ISO-IN. CPU записывает HXFR = 0100eeee, чтобы инициировать транзакцию ISO IN. SIE посылает токен OUT, используя адрес в регистре PERADDR, номер конечной точки в EP[3:0], CRC5 и EOP. Затем SIE ждет в течение 6.5 интервалов бита получения DATA0 PID или таймаута шины. Если SIE принимает DATA0 PID, то начинает загружать данные в RCVFIFO. Затем FIFO заполняется 64 байтами (или инициируется сигнал end-of-packet на шине), SIE записывает счетчик байт в RCVBC и устанавливает SNDBAVIRQ, показывая тем самым, что FIFO доступен для CPU, чтобы при необходимости загрузить больше данных. По окончании транзакции ISO IN (EOP) подсистема SIE обновляет биты HRSLT и устанавливает HXFRDNIRQ. Программирование транзакций ISO-OUT. Мастер SIE посылает пакет OUT устройству USB, за которым пакет данных с фиксированным DATA0 PID. Следует обрабатывать 3 возможных случая передач: 1. Размер полезной нагрузки данных OUT меньше 64 байт. Полезная нагрузка OUT меньше 64 байт. CPU обрабатывает этот случай аналогично транзакции BULK. CPU загружает байты в SNDFIFO и записывает счетчик байт в SNDBC. Затем CPU записывает в регистр HXFR значение 0110eeee (см. таблицу 4) для запуска транзакции. SIE посылает токен OUT, используя адрес в регистре PERADDR, номер конечной точки в EP[3:0], CRC5 и EOP. Далее SIE немедленно отправляет DATA0 PID, SNDBC байт из SNDFIFO, и CRC16. Затем SIE распознает, что SNDBC < 64, и завершает транзакцию и устанавливает SNDBAVIRQ. Устройство USB посылает обратно handshake, чтобы SIE проверило успех передачи. В результате значимым событием ошибки будет усеченный или пропущенный пакет, потому что CPU запланировал передачу слишком поздно, чтобы избежать коллизии с автоматически генерируемым пакетом SOF. Бит DELAYISO управляет поведением SIE для этого случая ошибки. Размер полезной нагрузки OUT ровно 64 байта. Этот случай относится к одному 64-байтному пакету, или когда полный размер полезной нагрузки нацело делится на 64 байта. CPU загружает в SNDFIFO ровно 64 байта, записывает SNDBC = 64, ждет установки SNDBAVIRQ = 1, затем записывает SNDBC = 0, чтобы показать конец транзакции. Размер полезной нагрузки OUT больше 64 байт. CPU загружает в SNDFIFO 64 байта данных, затем записывает в регистр SNDBC значение 64. Если SNDBAVIRQ = 1, то можно сразу же записать вторую порцию пакета данных в SNDFIFO, после чего снова записать регистр SNDBC необходимое количество байт. Чтобы запустить транзакцию, CPU загружает в регистр HXFR значение 0110eeee. Если FIFO становится доступным, SIE продолжает устанавливать SNDBAVIRQ, запрашивая у CPU новую порцию данных ISO OUT. Функция двойной буферизации позволяет SIE отправлять данные OUT из одного буфера FIFO, в то время как CPU загружает другой буфер FIFO. SIE завершает транзакцию ISO OUT путем обновления бит HRSLT и установки HXFRDNIRQ. Транзакция ISO OUT завершается после того, как SIE передаст последний байт FIFO, связанного с SNDBC < 64, или когда CPU загрузил SNDBC = 0. [Биты, активные в режимах устройства USB и хоста USB] Некоторые функции MAX3421E доступны как для работы в качестве устройства USB, так и в качестве хоста USB. Эти функции связаны с не относящимися к USB аспектами системы, такими как конфигурирование SPI master, как работают ножки прерывания, и как проверяется и управляется состояние ножек IO. Эти функции группируются следующим образом: • Конфигурация интерфейса FDUPSPI • Конфигурация ножек IO и уровней выходов GPIN входы - полярность прерывания и разрешение работы • Общая функциональность микросхемы CHIPRES • Некоторые биты IRQ и бит IE Таблица 2 показывает регистры и биты, сохраняющиеся когда команды SPI master меняют режим работы MAX3421E - с устройства USB на хост USB, или наоборот. Таким образом, изменение режима не нарушает конфигурацию интерфейса SPI или значения на выходах ножек GPOUT. Бит IE и биты прерывания GPIN (GPINIRQ и GPINIE) также не меняются при изменении режима работы MAX3421E. Это означает, что если перед изменением режима ожидало обработки прерывание GPIN, то оно будет продолжать ожидать обработки и после изменения режима работы MAX3421E. Примечание: есть 2 способа скомандовать MAX3421E переключиться из режима работы хоста USB (режим HOST) в режим работы устройства USB (режим PERIPHERAL). Во-первых, SPI master может записать 0 в бит HOST, находящийся в регистре R27 MODE. Во-вторых, SPI master может установить, затем очистить бит CHIPRES в регистре R16 USBCTL. Используйте CHIPRES в качестве предпочтительного способа переключения, если хотите начать работу устройства USB с чистого листа. [Описание бит и регистров MAX3421E] Ниже во врезках приведено описание регистров и бит, которые используются либо только в режиме хоста USB, либо в обоих режимах - и хоста, и устройства USB. Назначение бит: BUSEVENTIRQ: произошло одно из двух событий шины USB. Режим работы: только хост USB. SIE установит бит BUSEVENTIRQ, когда завершит сигнализацию одного из двух событий шины USB: • Bus Reset, сброс шины (когда BUSRST перешел от 1 к 0) CPU очищает бит BUSEVENTIRQ записью в него лог. 1. CPU устанавливает и очищает бит BUSEVENTIE. Когда BUSEVENTIE = 1, работа BUSEVENTIRQ разрешена как источник активации вывода ножки прерывания INT. Указания по программированию Это прерывание совместно используется двумя источниками событий - сигнализация сброса по шине и сигнализация возобновления работы шины. Поскольку это совместно используемое прерывание, хорошей практикой будет очистка бита BUSEVENTIRQ перед инициированием одного из этих двух сигналов шины (перед установкой BUSRST = 1 или BUSREM = 1). Назначение бита: выдать сброс по шине для устройств USB (Bus Reset) Режим работы: только хост USB. CPU установит этот бит, чтобы инициировать 50-миллисекундный сигнал сброса по шине (bus reset, SE0) для устройства USB. SIE очищает этот бит по завершении сигнализации сброса шины. CPU также может очистить этот бит, чтобы преждевременно завершить 50 мс сигнал шины SE0. Завершение сигнала сброса таким способом приводит к установке BUSEVENTIRQ. Указания по программированию CPU установит этот бит, чтобы инструктировать SIE выдать bus reset через сигналы D+ и D- lines. После установки этого бита, CPU может определить завершение интервала 50 мс либо путем опроса значения бита BUSRST в ожидании его обнуления, либо путем ответа на прерывание BUSEVENTIRQ. Чтобы запрограммировать bus reset, выполните следующие шаги: 1. Установите BUSRST = 1. Шаг 4 гарантирует, что логика хоста готова генерировать первую транзакцию хоста USB. Назначение бита: Chip Reset, сброс микросхемы. Режим работы: оба режима, и хост USB, и устройство USB. CPU установит этот бит, чтобы сбросить MAX3421E. Это дает тот же эффект, что и перевод в лог. 0 ножки RES#. CPU очистит этот бит, чтобы вывести MAX3421E из сброса. Указания по программированию CPU может очистить этот бит сразу после его установки. Сброс MAX3421E либо от включения питания (POR), либо путем установки CHIPRES, приведет к очистке большинства бит регистров, включая бит HOST, так что MAX3421E переключится в режим работы как устройство USB. Установка CHIPRES = 1 останавливает работу внутреннего генератора. После снятия сброса через CHIPRES = 0, CPU должен проверить запрос прерывания OSCOK. CPU должен продолжать работу с MAX3421E только после срабатывания этого прерывания, что показывает состояние стабилизации частоты генератора и PLL. Назначение бит: CONDETIRQ: Peripheral Connect/Disconnect Interrupt Request (запрос прерывания события подключения/отключения устройства USB) Режим работы: только хост USB. SIE установит бит CONDETIRQ, чтобы сообщить о событии подсоединения или отсоединения устройства USB. CPU очищает бит CONDETIRQ записью в него лог. 1. Бит CONDETIRQ активируется в следующих случаях: • Шина перешла из состояния J или K на 25 миллисекунд в состояние SE0. Это показывает отключение устройства USB. CPU устанавливает и очищает бит CONDETIE. Когда CONDETIE = 1, бит CONDETIRQ разрешен как источник активации ножки прерывания INT. Указания по программированию Чтобы определить подключение или отключение устройства USB, CPU должен сначала установить HOST = 1, чтобы перевести MAX3421E в режим хоста. Затем он должен установить DPPULLDN = 1 и DMPULLDN = 1, чтобы настроить уровни лог. 0 на сигналах D+ и D-. Чтобы определить, что произошло - подключение или отключение, CPU считывает регистр HSRL и проверяет состояние бит JSTATUS и KSTATUS. В нормальной ситуации эти биты статуса обновляются, когда CPU устанавливает бит SAMPLEBUS, однако они также обновляются автоматически, когда срабатывает прерывание CONDETIRQ. Назначение бита: задержка передачи данных для изохронной конечной точки до следующего фрейма (до тех пор, пока не будет передан следующий пакет SOF). Это произойдет, если передача пакета запланирована слишком во фрейме поздно, чтобы избежать коллизии со следующим автоматически генерируемым пакетом SOF. Режим работы: только хост USB. Этот бит устанавливает и сбрасывает CPU. Указания по программированию Спецификация USB гарантирует, что хост предоставит прошедшей энумерацию изохронной конечной точке достаточную полосу пропускания шины (время фрейма) чтобы позволить осуществить транзакцию данных ISO в каждом фрейме, проходящем каждые 1 мс. Это значит, что хост должен диспетчеризировать пакет IN или OUT (записью в регистр HXFR) не только в каждом фрейме, но и достаточно рано в каждом фрейме, чтобы гарантировать возможность завершения транзакции до того, как MAX3421E автоматически сгенерирует следующий пакет SOF. Поскольку MAX3421E может быть подключена к SPI master, работающим на неопределенной (любой) скорости SPI, то нет никакой гарантии, что управляющее firmware достаточно рано запишет HXFR в каждом фрейме, чтобы гарантировать своевременную доставку данных. Для этой цели SIE предоставляет бит DELAYISO, чтобы управлять поведением, когда отправка пакета во фрейме запланирована слишком поздно. Когда здесь происходит временной конфликт пакет/SOF, бит DELAYISO, определяет у кого приоритет - у пакета данных или у пакета SOF. Если DELAYISO = 1, то SIE проверяет доступное оставшееся время в 1 мс интервале фрейма каждый раз, когда CPU запускает пакет ISO загрузкой регистра HXFR. Если подсистема SIE обнаруживает, что времени во фрейме недостаточно, чтобы отправить или принять 256-байтный пакет ISO, то она задерживает отправку ISO до начала следующего фрейма. Примечание: 256-байтное окно было выбрано, чтобы соответствовать общему применению ISO - передаче звука качества CD. В таком приложении передается 44100 выборок в секунду по двум каналам, с разрешением 16 бит на канал, что требует 176 байт за 1 мс интервал. 256-байтное окно добавляет некоторый объем к этому требуемому количеству данных. Конфликты ISO OUT - SOF. У подсистемы SIE есть 2 способа обработать конфликт планирования передачи между отправкой пакета данных ISO OUT и автоматической генерацией пакета SOF. SIE либо начинает передавать пакет и затем преждевременно обрезает отправляемые данные, чтобы сгенерировать SOF, или откладывает передачу всего пакета на момент после передачи следующего пакета SOF. Примечание: другая ситуация ошибки ISO это недогрузка данных (data under-run), показываемая кодом результата HRSLT = 0x06. Ситуация data under-run произойдет, если для SIE нужны данные в SNDFIFO во время отправки пакета данных ISO, но CPU не загрузил их отведенное для этого время. Передачи ISO OUT при DELAYISO = 0. Если выполняется транзакция данных ISO-OUT, когда наступило время передачи генерации SOF, подсистема SIE обрезает пакет данных и генерирует SOF. SIE показывает в этом случае событие потери данных установкой HRSLT[3:0] = 0x03, за которой следуте FRAMEIRQ. В этом случае HXFRDNIRQ не устанавливается. Передачи ISO OUT при DELAYISO = 1. SIE задерживает отправку пакета данных OUT, если CPU записал в регистр HXFR в момент времени, фрейма, когде не получится передать 256 до окончания фрейма. В этом случае SIE отправит следующий SOF (и установит FRAMEIRQ), после чего отправит задержанный пакет ISO и завершит транзакцию, установив HXFRDNIRQ с кодом 0x00 (hrSUCCESS, успешная транзакция). CPU определит отложенный пакет путем анализа бита SNDBAVIRQ сразу после FRAMEIRQ. SNDBAVIRQ равен 0, то в SNDFIFO все еще присутствует подтвержденный буфер для транзакции USB, т. е. передача пакета была задержана. Конфликты ISO IN - SOF. Подсистема SIE обрабатывает конфликты транзакций IN несколько иначе, чем конфликты транзакций OUT, потому что хост не может скомандовать устройству USB остановить передачу данных, чтобы избежать конфликта со следующим пакетом SOF. Таким образом, при конфликте SIE либо считывает оставшиеся данные ISO IN и не генерирует пакет SOF, или откладывает отправку запроса IN до момента после передачи следующего пакета SOF. Примечание: другая ситуация ошибки ISO это переполнение данных (data over-run), что показывается кодом результата HRSLT = 0x06. Событие data over-run произойдет, когда у SIE есть доступные данные ISO IN data, но некуда их поместить. Это происходит из-за того, что нет доступных буферов стека RCVFIFO (CPU не выгрузил своевременно данные). Передачи ISO IN при DELAYISO = 0. Если запрос ISO-IN привел к тому, что устройство USB отправляет пакет данных, который продолжается за момент генерации SOF, то SIE продолжает принимать данные IN и подавляет передачу пакета SOF для этого фрейма. В этом случае SIE установит HRSLT[3:0] = 0x03, не установит HXFRDNIRQ, когда транзакция IN завершится, но установит для этого фрейма FRAMEIRQ. CPU может определить этот случай ошибки путем распознавания ситуации, что произошла установка FRAMEIRQ без предварительной установки HXFRDNIRQ. Примечание: SIE всегда инкрементирует счетчик фреймов независимо от того, был ли реально отправлен пакет SOF, или нет. Передачи ISO IN при DELAYISO = 1. Если CPU инициирует транзакцию ISO-IN в момент времени, когда не получается принять пакет данных из 256 байт из-за коллизии со следующим SOF, то SIE откладывает отправку пакета IN до момента после начала следующего фрейма. В этом случае SIE установит FRAMEIRQ для следующего фрейма, отправит пакет ISO-IN, примет данные IN и установит HXFRDNIRQ с результатом HRSLT[3:0] = 0x00 (hrSUCCESS). Примечание: если были определена проблемы планировки транзакций ISO, то система должна быть модифицирована для диспетчеризации пакетов ISO раньше в каждом фрейме. Возможно должен быть ускорен интерфейс SPI, оптимизирован код firmware, либо это должно быть выполнено в комплексе. Назначение бит: подключение к земле нижних подтягивающих резисторов (pull-down) 15 кОм к сигналам D+ и D-. Режим работы: только хост USB. Указания по программированию Хост USB переводит шину в состояние покоя путем подключения обоих этих резисторов. Устройство USB low-speed подключит резистор 1.5 кОм между D- и 3.3V; устройство USB full-speed подключит резистор 1.5 кОм между D+ и 3.3V. Из-за того, что шина имеет слаботочную подтяжку вниз внутренними резисторами 15 кОм, SIE может определить не только момент подключения устройства USB к шине, но также и его скорость. Если MAX3421E работает как устройство USB (HOST = 0), то оба эти биты должны быть сброшены в 0 (это их значения по умолчанию). См. врезку "VBUSIRQ, VBUSIE, NOVBUSIRQ, NOVBUSIE", где объясняется роль бит DPPULLUP и DMPULLUP в разработке, где реализованы два коннектора USB, и автоматически определяется соединение в качестве хоста USB. Назначение бит: настраивает работу SPI в режиме полного дуплекса (Full-Duplex). Режим работы: оба режима, и как хост USB, и как устройство USB. Когда CPU установил этот бит, SPI работает в режиме полного дуплекса (одновременная работа передачи и приема). Когда этот бит сброшен, SPI работает в полудуплексе. Сброс POR устанавливает бит FDUPSPI в 0 (полудуплекс). Сброс Chip Reset и сброс Bus Reset не меняют этот бит. В режиме Pwr Down бит FDUPSPI доступен на чтение и запись. Указания по программированию Half-Duplex SPI. В режиме полудуплекса (FDUPSPI = 0, состояние по умолчанию) сигнал MOSI (Master Out, Slave In) становится двунаправленным, и ножка MISO (Master In, Slave Out) не используется и переводится в третье состояние. Рис. 3. Интерфейс SPI в режиме Half-Duplex. Full-Duplex SPI. В режиме полного дуплекса (FDUPSPI = 1) для последовательного, одновременного приема и передачи используются раздельные выводы MOSI и MISO. В этой конфигурации есть дополнительная функция - когда через SPI передается первый байт (байт команды), одновременно выдвигаются 8 бит информации статуса. Рис. 4. Интерфейс SPI в режиме Full-Duplex. Байт команды SPI. Первый байт, вдвигаемый в интерфейс SPI, это байт команды (см. рис. 5), который устанавливает адрес регистра, направление команды, и когда микросхема MAX3421E работает как устройство USB, устанавливается бит ACKSTAT. Во всех транзакциях SPI, независимо от их направления, порядок следования бит одинаковый: b7 идет первым, b0 последним.
Рис. 5. SPI command byte. Работа SPI начинается, когда SPI master переводит сигнал CS# в лог. 0, затем генерирует 8 тактовых импульсов SCK, по фронту нарастания уровня которых вводятся биты байта команды. REG[4:0] устанавливают адрес регистра, бит направления Direction устанавливает операцию чтения или записи для SPI. Если микросхема работает как устройство USB, то бит ACKSTAT записывается в соответствующий бит регистра EPSTALLS. За байтом команды SPI выдает одну или большее количество пачек из 8 импульсов тактов SCK, чтобы вдвигать данные байт (байты) данных в MAX3421E или выдвигать байты из неё. Когда осуществляется доступ к FIFO, пока на ножке CS# остается уровень лог. 0, применяется адрес регистра, который был передан в байте команды. Это дает возможность удобного пакетного чтения или записи блока данных FIFO. Например, чтобы загрузить 37 байт в EP0FIFO (режим устройства USB), SPI master записывает байт команды 00000010, который выбирает R0 (EP0FIFO) для операции записи (бит Direction установлен в лог. 1). Затем SPI master записывает 37 байт, и в завершение переводит ножку CS# в лог. 1, завершая цикл обмена SPI. Примечание: данные обоих сигналов MOSI и MISO достоверны и считываются по фронту нарастания уровня SCK. Значение данных меняется по спаду уровня SCK. Цикл обмена SPI завершается, когда SPI master возвращает CS# в состояние лог. 1. Режимы SPI. SPI стандарт определяет 4 режима работы, которые зависят от двух настроек: CPOL (clock polarity, полярность тактов) и CPHA (clock phase, фаза тактов). Режим SPI представляется парой значений в форме (CPOL, CPHA). Интерфейс, который ожидает обоих положительных перепадов SCK и доступность данных MOSI перед первым положительным перепадом тактов, может работать в режимах (0,0) и (1,1) без изменения. Это свойство позволяет микросхеме MAX3421E работать в режимах (0,0) или (1,1) без необходимости наличия специального входа для установки режима SPI. Диаграммы ниже иллюстрируют идентичные транзакции между CPU и MAX3421E. Рис. 6 использует режим SPI (0,0), и рис. 7 использует режим SPI (1,1), различие здесь в неактивном (начальном) уровне сигнала SCK, который будет лог. 0 для режима (0,0) и лог. 1 для режима (1,1). В обоих режимах данные MOSI и MISO одинаково считываются по фронту нарастания уровня SCK. Рис. 6. Работа интерфейса SPI в режиме (0,0). Рис. 7. Работа интерфейса SPI в режиме (1,1). Назначение бит: FRAMEIRQ: Frame Generator Interrupt Request (запрос прерывания от генератора фрейма) Режим работы: только хост USB. SIE устанавливает бит FRAMEIRQ всякий раз, когда генерирует маркер фрейма каждую миллисекунду, который состоит из полноскоростного пакета начала фрейма (full-speed SOF packet) или низкоскоростного импульса наличия активности (low-speed keep-alive pulse). CPU очищает бит FRAMEIRQ записью в него лог. 1. CPU устанавливает очищает бит FRAMEIE. Когда FRAMEIE = 1, FRAMEIRQ разрешен как источник активности сигнала прерывания INT. Указания по программированию На полной скорости (full speed USB), SIE установит прерывание FRAMEIRQ в начале пакета SOF. Назначение бита: сброс счетчика фреймов. Режим работы: только хост USB. CPU устанавливает этот бит, чтобы очистить счетчик фреймов. SIE очистит этот бит, чтобы показать завершение операции. Указания по программированию Этот бит имеет смысл только когда MAX3421E работает как full-speed хост USB (когда работает как low-speed хост, нет пакета SOF или счетчика фреймов). После установки FRMRST = 1, следующий пакет SOF будет содержать нулевой счетчик фреймов. MAX3421E тактирует свой счетчик фреймов с использованием внутреннего прескалера. Установка FRMRST = 1 сбрасывает счетчик фрейма, но не прескалер, тем самым гарантируется устойчивый поток пакетов SOF, следующих каждую миллисекунду. Назначение бит: GPIN General-Purpose Input pins 0 .. 7 (порты ввода общего назначения) Режим работы: оба режима, и как хост USB, и как устройство USB. GPIN. CPU считывает уровень на ножке GPIN путем чтения бит регистра GPIN. Только внешняя подключенная схема может влиять на состояние бит этого регистра. Все 8 ножек GPIN подтянуты вверх (pull-up) к напряжению питания VCC слаботочными (~20 кОм) внутренними резисторами. GPINPOL. CPU устанавливает биты GPINPOL, чтобы настроить полярность запросов прерывания для каждого вывода GPIN (таблица 5). Эти биты очищаются при включении питания. Они сохраняют свое состояние при сбросе через CHIPRES = 1 или при изменении режима работы микросхемы. Таблица 5. Полярность перепадов прерываний GPIN.
GPINIRQ. Микросхема MAX3421E установит бит запроса прерывания GPIN, когда сигнал на ножке GPIN получит положительный или отрицательный перепад. Бит GPINPOL (см. таблицу 5) управляет, какой перепад будет активным. Биты GPINIRQ активны независимо от того, разрешены ли прерывания отдельных ножек GPIN, или установлен ли бит IE. GPINIE. CPU установит бит разрешения прерывания GPIN, чтобы передать соответствующий бит запроса IRQ через логику управления выходом ножки INT микросхемы MAX3421E. Если IE = 1, и разрешенное IRQ появляется либо на ножке INT если SEPIRQ = 0, либо на ножке GPX, если SEPIRQ = 1 и GPX[B:A] = 10. Примечание: во время нормального функционирования прерывания GPIN объединяются логикой ИЛИ со всеми другими источниками прерываний MAX3421E в один информационный выходной сигнал на ножке INT. Можно также отсоединить восемь битов запроса прерывания GPIN в качестве источников прерывания INT и сделать их отдельно доступными в виде группы на выводе GPX. В этом режиме вывод GPX работает как второй выход прерывания INT микросхемы MAX3421E. Этот режим может быть предпочтителен в системах, где необходимо минимизировать время детектирования внешних событий. Бит SEPIRQ разрешает это разделение источников прерывания. Назначение бит: General-Purpose Output pins 0 .. 7 (порты вывода общего назначения) Режим работы: оба режима, и как хост USB, и как устройство USB. CPU устанавливает и очищает эти биты. Указания по программированию CPU записывает эти биты, чтобы управлять состояниями ножек GPOUT. Напряжения на этих выходах определяются напряжением на выводе VL. CPU также может считывать эти биты. Результат чтения бита показывает состояние триггера, который управляет выходным буфером ножки порта. Таким образом, если выход управляет мощной нагрузкой (например светодиодом LED), что портит логический уровень на выходе, CPU все равно прочитает корректное логическое состояние выхода (как будто на нем нет нагрузки). Назначение бит: эти биты определяют поведение выхода GPX. Режим работы: оба режима, и как хост USB, и как устройство USB. CPU устанавливает и очищает эти биты. Указания по программированию Ножка GPX может выводить один из четырех внутренних сигналов, как показано в таблице ниже:
Примечание *: если SEPIRQ = 1. Настройка по умолчанию для выхода GPX это BUSACT, когда GPXB = 1 и GPXA = 0. Однако если бит SEPIRQ установлен в 1, сигнал BUSACT заменяется сигналом запроса прерывания, который активен всякий раз, когда любой из 8 сигналов на входе GPIN меняет уровень (происходит переход 0 -> 1 или 1 -> 0). В этом случае ножка GPX работает как второй сигнал прерывания (вместе с INT), в той же конфигурации (уровень или перепад, полярность перепада), что и ножка INT (подробности см. далее в описании бита SEPIRQ). Назначение бита: определяет режим работы MAX3421E - как хост или как устройство USB. Режим работы: оба режима, и как хост USB, и как устройство USB. CPU устанавливает HOST = 1, чтобы MAX3421E работала как USB хост. CPU устанавливает HOST = 0, чтобы MAX3421E работала как устройство USB (режим по умолчанию). Указания по программированию При включении питания или после подачи лог. 0 на ножку RES#, микросхема MAX3421E по умолчанию работает как устройство USB (бит HOST сбрасывается в 0). В этом режиме MAX3421E работает как микросхема MAX3420E, которая предназначена только для контроллера устройства USB. CPU установит HOST = 1, чтобы микросхема MAX3421E работала как host. При этом используется набор регистров, показанный в таблице 1. Информация по программированию, когда HOST = 0, находится в руководстве AN3598 [2]. Для удобства в таблице 2 показаны все биты регистров MAX3421E, которые работают в обоих режимах - и хоста, и устройства USB. Назначение бит: показывают результат транзакции хоста. • HRSLT[3:0] содержит код результата транзакции. Режим работы: только хост USB. SIE устанавливает и сбрасывает эти биты. Указания по программированию SIE обновляет эти биты по завершению транзакции хоста. CPU считывает регистр HRSL после получения HXFRDNIRQ или после опроса регистра HRSL и чтения результата HRSLT, отличающегося от hrBUSY. Биты HRSLT показывают результат транзакции хоста, см. таблицу 6. Таблица 6. Коды HRSLT[3:0].
SNDTOGRD (для транзакций OUT) и RCVTOGRD (для транзакций IN) показывают значения переключения (data toggle) от транзакции. CPU должен прочитать и сохранить эти значения всякий раз, когда он завершает последовательность передач на одной и той же конечной точке. Это позволяет восстановить значение переключения в следующий раз, когда CPU снова начнет транзакции на этой же конечной точке. CPU инициализирует значение toggle, используя биты SNDTOG0/SNDTOG1 и RCVTOG0/RCVTOG1 в регистре HCTL (см. врезку "SNDTOG1, SNDTOG0, RCVTOG1, RCVTOG0"). Назначение бита: посылает PRE PID в низкоскоростное устройство USB через хаб USB. Режим работы: только хост USB. CPU устанавливает и сбрасывает этот бит. Указания по программированию Если firmware хоста определило (при энумерации), что работает с низкоскоростным (low-speed) устройством USB через хаб USB, то оно установит HUBPRE = 1. Это инструктирует SIE предварительно передавать перед каждым low-speed пакетом full-speed PRE PID, и выполнять необходимую сигнализацию, требуемую стандартом USB. Назначение бит: CPU записывает этот регистр, чтобы запустить транзакцию хоста. Режим работы: только хост USB. CPU устанавливает и сбрасывает эти биты. Указания по программированию Этот регистр чувствителен к моменту загрузки (load-sensitive). Это значит, что когда CPU записывает его, SIE запустит транзакцию. CPU загружает значения в этот регистр, показанные в таблице 4 (см. выше раздел "Программирование транзакций хоста"), чтобы запустить транзакцию USB нужного типа. Записи BULK-IN и BULK-OUT применяются для транзакций конечных точек либо BULK, либо INTERRUPT. Эти два типа транзакций идентичны, отличаясь только тем, когда firmware хоста планирует их запуск. Поле "-ep" в столбце "hex" показывает значение EP[3:0] (номер конечной точки). Подробности по каждому из этих типов транзакций см. выше в разделе "Программирование транзакций хоста". Назначение бит: HXFRDNIRQ: Host Transfer Done Interrupt Request (запрос прерывания по завершению транзакции) Режим работы: только хост USB. SIE установит бит HXFRDNIRQ, когда завершится транзакция хоста. CPU очищает бит HXFRDNIRQ записью в него 1. CPU устанавливает и очищает бит HXFRDNIE. Когда HXFRDNIE = 1, разрешается прерывание HXFRDNIRQ в качестве источника для активации ножки INT. Указания по программированию Когда срабатывает это прерывание, CPU определяет результат транзакции хоста путем чтения бит HSRLT в регистре HRSL (см. врезку "Регистр HRSL: HRSLT[3:0], SNDTOGRD, RCVTOGRD"). Назначение бита: разрешает работу ножки INT. Режим работы: оба режима, и как хост USB, и как устройство USB. CPU установит этот бит, чтобы активировать работу выхода INT. Характеристики выхода INT определяются битами INTLEVEL, POSINT и PULSEWID[1:0] (см. врезку "INTLEVEL, POSINT, PULSEWID1, PULSEWID0"). CPU очистит этот бит, чтобы запретить работу выхода INT. Указания по программированию Когда IE = 0, состояние ножки INT неактивное: разомкнуто для режима уровня (level mode), лог. 1 для отрицательного перепада, лог. 0 для положительного перепада. Внутренние биты IRQ работают независимо от состояния бита IE. Бит IE управляет только активацией ножки выхода INT. Назначение бит: INTLEVEL: устанавливает INT либо в режим прерывания по уровню (level-active, если INTLEVEL = 1), либо в режим прерывания по перепаду (edge-active, если INTLEVEL = 0). Режим работы: оба режима, и как хост USB, и как устройство USB. INTLEVEL. CPU установит бит INTLEVEL, чтобы сделать выход INT работающим с прерыванием по уровню (level-active). Когда INTLEVEL = 1, ножка INT переходит в лог. 0, если ожидает обработки одно или большее количество источников прерывания. В этом режиме ножка INT работает как выход с открытым стоком, так что в системе должен присутствовать верхний подтягивающий резистор (pullup), соединенный с уровнем на выводе питания VL. CPU очищает бит INTLEVEL, чтобы сделать поведения выхода INT активным по перепаду уровня (edge active). Когда INTLEVEL = 0, полярность активного перепада устанавливается битом POSINT. Режим выхода по перепаду для ножки INT использует двухтактный выходной драйвер (push-pull), так что верхний подтягивающий резистор на VL не требуется. POSINT. Этот бит влияет только когда CPU запрограммировал поведение выхода INT на активность по перепаду (edge-active, INTLEVEL = 0). Когда POSINT = 1, ножка INT сигнализирует об ожидающих прерываниях положительным перепадом уровня (0 -> 1), и когда POSINT = 0, ножка INT сигнализирует об ожидающих прерываниях отрицательным перепадом уровня (1 -> 0). PULSEWID1, PULSEWID0. Эти биты имеют значение только тогда, когда CPU запрограммировал ножку INT в режим активации прерывания по перепаду (edge-active, INTLEVEL = 0). Они управляют временем неактивного уровня INT, междут моментом, когда CPU очистил один бит IRQ, и моментом, когда на ножке INT снова появится перепад, сигнализирующий об одном или нескольких ожидающих обработки прерываниях (см. рис. 8). Рис. 8. Поведение ножки INT в зависимости от настроек бит INTLEVEL и POSINT. Примечания: (1) Ширина определяется очисткой IRQ. Указания по программированию В режиме прерывания по уровню (level mode, верхняя диаграмма) ножка INT остается в лог. 0 до тех пор, пока не останется ни одного необработанного запроса прерывания. В режиме INTLEVEL выход INT работает как открытый сток, и поэтому требует подключения верхнего подтягивающего резистора к уровню VL. В режиме прерывания по перепаду ножка INT выдает активный перепад всякий раз, когда появился новый запрос прерывания, или когда бит запроса прерывания был очищен (после обработки), в то время как появился новый бит запроса прерывания. Если ожидает обработки один запрос прерывания, когда другой запрос очищен, ножка INT немедленно выдает неактивный перепад, затем выдает активный перепад. Время между этими двумя событиями показано как примечание (2) на рис. 8, и оно программируется значениями PULSEWID[1:0], как показано в таблице ниже.
Примечание: у микросхемы MAX3420E нет бит PULSEWID[1:0], поэтому время фиксировано на значении 10.6 мкс. Когда SEPIRQ = 1, микросхема MAX3421E удаляет сигнализацию на ножку INT для 8 прерываний, связанных с 8 ножками GPIN. В этом случае MAX3421E перенаправляет их на ножку GPX, которая работает как второй выход сигнала прерывания, когда GPX[B:A] = 10. Когда ножка GPX работает таким образом, её характеристики будут такие же, как установлены для вывода INT битами INTLEVEL, POSINT и PULSEWID[1:0]. Назначение бита: настраивает хост для работы на низкой скорости (LS, low-speed USB). Режим работы: только хост USB. CPU устанавливает и сбрасывает этот бит. Указания по программированию CPU установит этот бит, чтобы разрешить работу хоста в режиме low-speed USB. CPU обычно устанавливает этот бит, когда распознал, что было подключено низкоскоростное устройство USB (при активации CONDETIRQ), когда статическое состояние шины стало D+ = 0, D- = 1. Такое событие на шине инициируется следующими факторами: • LOWSPEED = 1 и было детектировано состояние J. См. также врезку "SAMPLEBUS, JSTATUS, KSTATUS" для информации о детектировании этого состояния шины. Назначение бит: OSCOKIRQ: Oscillator OK Interrupt Request (запрос прерывания сигнализации установившегося режима генератора тактов) Режим работы: оба режима, и как хост USB, и как устройство USB. Внутренний сигнал OSCOK показывает, что внутренний генератор 12 МГц и 48 МГц PLL стабильны, и микросхема готова к работе. SIE установит бит OSCOKIRQ, когда сигнал OSCOK делает переход от 0 к 1, показывая работоспособность кристалла. CPU очищает бит OSCOKIRQ записью в него 1. CPU устанавливает и сбрасывает бит OSCOKIE. Когда OSCOKIE = 1, сигнал прерывания разрешен как источник активации ножки INT. Указания по программированию Всякий раз, когда CPU останавливает генератор микросхемы MAX3421E сбросом кристалла (установкой сброса CHIPRES = 1 и затем выход из сброса CHIPRES = 0), CPU должен подождать установки OSCOKIRQ перед продолжением работы с микросхемой. Назначение бит: адрес устройства USB, которому отправляются пакеты. Режим работы: только хост USB. CPU записывает этот регистр, SIE его считывает. Указания по программированию Когда SIE посылает пакет токена после того, как CPU загрузил регистр HXFR, SIE берет адрес устройства USB из этого регистра. Если CPU общается только с одним адресом устройства, CPU может инициализировать этот регистр один раз при энумерации устройства USB, и затем все транзакции с устройством будут происходить по этому адресу. При нормальном функционировании CPU выдает запрос Set_Address устройству USB во время его энумерации, и затем загружает запрошенный адрес в этот регистр. Назначение бита: выключает MAX3421E (вход в состояние Power Down). Режим работы: оба режима, и как хост USB, и как устройство USB. CPU установит бит PWRDOWN, чтобы перевести микросхему в состояние пониженного энергопотребления (low-power state), и очищает бит PWRDOWN для возобновления работы. Указания по программированию Этот бит был разработан только для использования в режиме устройства USB, хотя он доступен также и в режиме хоста USB. CPU никогда не должен устанавливать бит POWERDOWN = 1, когда микросхема MAX3421E работает как хост. Назначение бит: Receive FIFO Byte Count Register (регистр счетчика байт для стека FIFO приема). Режим работы: только хост USB. Указания по программированию После загрузки пакета данных из шины в RCVFIFO, SIE обновляет этот регистр счетчиком принятых байт, и устанавливает бит INDAVIRQ. После того, как CPU прочитал количество байт полученное из регистра RCVBC, он очищает бит RCVDAVIRQ путем записи в него 1. Это приводит буфер в состояние готовности для SIE, чтобы в него можно было записать новые данные, поступающие по шине от устройства USB. Назначение бит: RCVDAVIRQ: Receive FIFO Data Available Interrupt Request (запрос прерывания при событии появления доступных принятых данных в FIFO приема) Режим работы: только хост USB. SIE установит бит RCVDAVIRQ, когда появятся новые данные от устройства USB в RCVFIFO, полученные как результат запроса IN хоста. После получения этого прерывания CPU считывает количество принятых байт в регистре RCVBC, затем выполняет последовательные чтения регистра RCVFIFO (R1), чтобы получить принятые данные. И в завершение CPU очищает бит RCVDAVIRQ записью в него 1. SIE обрабатывает все попытки повтора (из-за ошибок PID, CRC, data toggle или таймаута), и генерирует прерывание только когда генерирует ACK handshake для устройства USB. CPU устанавливает и очищает бит RCVDAVIE. Когда RCVDAVIE = 1, то RCVDAVIRQ разрешен как источник активации ножки INT. Указания по программированию Если произойдет любая ошибка транзакции данных, то установится HXVRDNIRQ, в то время как RCVDAVIRQ не установится. Назначение: организация доступа к буферу FIFO приема (Receive FIFO). Режим работы: только хост USB. Когда устройство USB посылает данные по шине USB в ответ на запрос IN от хоста USB, подсистема SIE заполняет этими принятыми данными внутренний FIFO. CPU считывает байты от FIFO путем повторяющихся чтений регистра RCVFIFO. CPU никогда не должен записывать в RCVFIFO, потому что это повредило бы принятые данные. Указания по программированию Когда был без ошибок принят пакет данных, SIE загружает в регистр RCVBC количество приняты байт, и устанавливает бит RCVDAVIRQ (Receive Data Available IRQ). CPU в ответ сначала считывает регистр RCVBC, чтобы узнать количество принятых байт в RCVFIFO, затем очищает бит RCVDAVIRQ, и в завершение считывает принятые байты повторяющимися чтениями регистра RCVFIFO. RCVFIFO неявно соединен с двумя внутренними 64-байтными стеками FIFO. Эти два FIFO позволяют организовать двойную буферизацию в процессе приема, т. е. SIE может загружать принимаемые данные IN, поступающие по шине от устройства USB, в один FIFO, в то время как CPU одновременно опустошает другой FIFO (считывает предыдущую порцию принятых данных). Если CPU очистит бит RCVDAVIRQ, когда другой пакет ожидает считывания в другом FIFO, то SIE снова немедленно установит бит RCVDAVIRQ. CPU должен читать байты из RCVFIFO только когда принятые данные USB доступны, что показывается RCVDAVIRQ = 1. Назначение: номер ревизии микросхемы MAX3421E. Режим работы: оба режима, и как хост USB, и как устройство USB. Этот регистр, предназначенный только для чтения, показывает информацию кода ревизии кристалла микросхемы. Обращайтесь на сайт компании Maxim для получения информации о текущей ревизии. Запись в этот регистр не дает никакого эффекта. Назначение бит: RWUIRQ: Remote Wakeup Interrupt Request (запрос прерывания удаленного пробуждения) Режим работы: только хост USB. SIE установит бит RWUIRQ, когда примет сигнал remote wakeup (удаленное пробуждение) от устройства USB. CPU очищает бит RWUIRQ записью в него 1. CPU устанавливает и очищает бит RWUIE. Когда RWUIE = 1, бит RWUIRQ разрешен как источник активации ножки INT. Указания по программированию После того, как CPU приостанавливает сигнализацию по шине установкой SOFKAEN = 0, устройство USB, у которого разрешена функция удаленного пробуждения (remote wakeup, RWU), может выставить на шине состояние RWU для запроса к хосту о возобновлении активности шины. Когда подсистема SIE детектирует сигнал RWU как 10 мс состояние K шины, за которым следует EOP, она установит бит RWUIRQ. Назначение бит: выборка текущего состояния сигналов на шине USB. SAMPLEBUS: Sample the bus (выборка уровней логики на шине). Режим работы: только хост USB. CPU устанавливает бит SAMPLEBUS для инструктирования SIE выбрать состояние на линиях D+ и D-. SIE очищает бит SAMPLEBUS, когда завершает эту операцию. Биты JSTATUS и KSTATUS предназначены только для чтения, они устанавливаются и очищаются подсистемой SIE. Указания по программированию Биты JSTATUS и KSTATUS обновляются при выполнении 2 условий: 1. CPU устанавливает SAMPLEBUS = 1. Второй случай показывает событие подключения или отключения устройства USB. CPU должен ответить на прерывание/флаг CONDETIRQ чтением бит JSTATUS и KSTATUS, чтобы определить, какое событие произошло. Кодировка бит JSTATUS и KSTATUS показана в таблице 8. Таблица 8. Кодирование бит JSTATUS и KSTATUS.
Последняя строка в таблице 8 не определяет событие на шине USB. Примечание: значение состояний J и K зависит от установки бита LOWSPEED. Когда LOWSPEED = 0, J означает D+ в лог. 1 и D- в лог. 0; когда LOWSPEED = 1, J означает D+ в лог. 0 и D- в лог. 1. Назначение бита: указывает перенаправить сигналы прерываний входов (GPIN IRQ) на отдельный выход GPX. Режим работы: оба режима, и как хост USB, и как устройство USB. CPU устанавливает и очищает эти биты. Указания по программированию Ножка выхода INT микросхемы MAX3421E активируется всякий раз, когда произойдет установка флага любого события внутреннего прерывания, USB или GPIN (когда соответствующее IRQ разрешено и IE = 1). Это вариант работы по умолчанию, показанный на рисунке ниже, соответствующий SEPIRQ = 0. Когда CPU установит SEPIRQ = 1, 8 сигналов GPIN IRQ перенаправляются с вывода INT на вывод GPX. Выход GPX будет теперь работать как второй сигнал прерывания, вырабатываемый микросхемой MAX3421E для управляющего CPU (см. следующий рисунок). Установка бит GPX[B:A] в 2 нормально соединяет сигнал BUSACT с ножкой GPX. Установка SEPIRQ = 1 заменяет этот сигнал другим сигналом, показывающим любое из прерываний 8 ножек GPIN. Штриховая линия на нижнем рисунке показывает, что когда GPX функционирует как вторая ножка прерывания, то её характеристики (которые определены битами INTLEVEL и POSINT) такие же, как и у ножки INT. Назначение бита: сигнал возобновления работы шины (bus resume). Режим работы: только хост USB. СPU устанавливает этот бит для сигнализации события возобновления работы шины. Подсистема SIE очищает этот бит, чтобы показать, что она завершила сигнализацию resume. Указания по программированию Хост USB приостанавливает работу устройства USB, переводя его в состояние пониженного потребления энергии (low-power state), путем остановки активности на шине. CPU делает это установкой SOFKAENAB = 0, что не дает микросхеме MAX23421E каждую миллисекунду автоматически генерировать пакеты full-speed SOF или импульсы low-speed keep-alive. Для возобновления активности шины (resume bus) хост посылает сигнал Resume, состоящий из 20 мс состояния K, за которым идет low-speed EOP. CPU сопровождает это установкой SIGRSM = 1, и затем проверяет SIGRSM = 0. Затем CPU перезапускает миллисекундные маркеры фрейма установкой SOFKAENAB = 1. CPU может также проверять завершение сигнализации MAX3421E resume путем использования бита BUSEVENTIRQ запроса прерывания BUSEVENT (см. выше врезку "BUSEVENTIRQ, BUSEVENTIE"). SIE установит этот бит, когда бит SIGRSM делает переход от лог. 1 к лог. 0. Назначение бит: SNDBAVIRQ: Send Buffer Available Interrupt Request (запрос прерывания, сигнализирующего об освобождении буфера передачи) Режим работы: только хост USB. SIE установит бит SNDBAVIRQ после того, как отправит данные устройству USB, которые находятся в стеке FIFO передачи (SNDFIFO), и как результат двух условий: 1. Устройство USB ответило положительным подтверждением получения данных ACK handshake. CPU очищает бит SNDBAVIRQ записью регистра SNDBC. CPU устанавливает и очищает бит SNDBAVIE. Когда SNDBAVIE = 1, флаг SNDBAVIRQ разрешен как источник активации ножки INT. Указания по программированию Подсистема SIE очищает свои указатели FIFO по завершении любой транзакции хоста. Таким образом, если хост прочитал ненулевой результат HRSLT после транзакции IN (например, HRSLT[3:0] = 0x04, когда устройство USB возвратило NAK handshake), CPU может повторить транзакцию IN простой перезагрузкой регистра HXFR подходящим значением. Из-за того, что данные в FIFO сохраняются, пока не будут перезаписаны, и из-за того, что указатель SIE FIFO сбрасывается, хост может повторять отправку тех же самых данных SNDFIFO, не перезагружая каждый раз содержимое данных FIFO. CPU очищает SNDBAVIRQ записью в регистр SNDBC. Важный момент: CPU никогда не должен напрямую очищать бит SNDBAVIRQ. Назначение: Send FIFO Byte Count (регистр количества отправляемых байт). Режим работы: только хост USB. CPU загружает этот регистр, чтобы показать количество байт, загруженное в SNDFIFO, и чтобы подтвердить отправку данных OUT FIFO по шине USB. Указания по программированию Когда CPU загружает регистр SNDBC, подсистема SIE очищает бит SNDBAVIRQ. Если при этом доступен (свободен) второй FIFO, то SIE снова немедленно установит бит SNDBAVIRQ. В отличие от бита RCVDAVIRQ, который CPU очищает напрямую, когда завершает выгрузку принятых данных из Receive FIFO, CPU очищает SNDBAVIRQ записью в регистр SNDBC. Важный момент: CPU никогда не должен напрямую очищать бит SNDBAVIRQ. Назначение: Send FIFO (доступ к FIFO передачи) Режим работы: только хост USB. CPU заполняет внутренний FIFO данными для передачи (как транзакции OUT) путем повторящихся операций записи в регистр SNDFIFO. Указания по программированию Если CPU прочитает регистр SNDFIFO после записи 64 байт в FIFO, то эти байты будут считаны обратно. После загрузки SNDFIFO, CPU записывает регистр SNDBC (Send Byte Count) количеством загруженных байт. Когда CPU записал регистр счетчика байт SNDBC, SIE сбрасывает бит SNDBAVIRQ (Send Buffer Available IRQ) и подтверждает FIFO для передачи по шине USB. Регистр SNDFIFO подсоединен к двум внутренним 64-байтным стекам FIFO. Эти два FIFO позволяют организовать двойную буферизацию передачи, т. е. пока CPU загружает данными OUT один FIFO, подсистема SIE может одновременно посылать данные из другого FIFO по шине USB. Если CPU записал регистр SNDBC, и при этом доступен для заполнения другой буфер, то SIE сбросит бит SNDBAVIRQ и сразу немедленно установит его, чтобы показать доступность второго буфера. CPU должен загружать данные в SNDFIFO только когда доступен буфер передачи, что показывается SNDBAVIRQ = 1. Назначение бит: установка или очистка значения data toggle для транзакций данных приема и передачи. Режим работы: только хост USB. CPU записывает 1 в один из бит пары, чтобы инициализировать значение data toggle транзакции данных. Запись 0 в эти биты не дает эффекта. Запись двух единичек в паре бит также не дает эффекта. Указания по программированию В микросхеме MAX3421E встроено два триггера для функции data toggle, которая реализует протокол сигнализации USB во время транзакций данных SNDFIFO и RCVFIFO. Перед передачей данных в конечную точку CPU с помощью этих бит инициализирует значение data toggle для этой конечной точки. После передачи данных в конечную точку CPU считывает значение toggle в бите SNDTOGRD или RCVTOGRD (см. врезку "Регистр HRSL: HRSLT[3:0], SNDTOGRD, RCVTOGRD") и сохраняет это значение в своей локальной переменной firmware. Для нескольких конечных точек CPU содержит массив значений бита toggle, по одному на каждую конечную точку. Когда CPU возвращается к работе с определенной конечной точкой, он должен сначала инициализировать значение data toggle, сохраненное для этой конечной точки. Для этой цели CPU использует пары бит SNDTOG1/0 и RCVTOG1/0, восстанавливая с помощью них data toggle, сохраненное последнее значение для этой конечной точки. Во время следующих друг за другом транзакций в одну и ту же конечную точку подсистема SIE поддерживает значения toggle. Таким образом, CPU нужно сохранить и переинициализировать значения toggle только когда происходит переключение между конечными точками. Подробнее про технологию Data Toggle см. выше секцию "MAX3421E Data Toggle". Назначение бита: разрешает автоматическую генерацию пакетов full-speed SOF или импульсов low-speed Keep-Alive. Режим работы: только хост USB. CPU устанавливает и очищает этот бит. Указания по программированию Когда CPU установил SOFKAENAB = 1, подсистема SIE автоматически генерирует 1 мс маркеры фрейма. Если бит LOWSPEED = 0, то SIE генерирует пакеты SOF. Если LOWSPEED = 1, то SIE генерирует импульсы keep-alive. SOF или импульсы KA начинаются после того, как установлен бит SOFKAENAB, максимально через 1 мс. Если CPU сбросил SOFKAENAB = 0, когда SIE генерирует маркер фрейма, подсистема SIE завершит эту сигнализацию перед выключением маркеров фрейма. Пакеты SOF. Каждую миллисекунду SIE автоматически передает SOF PID, содержимое внутреннего 11-битного счетчика фрейма и значение CRC5. После отправки пакета SIE инкрементирует счетчик фрейма и устанавливает FRAMEIRQ. Подсистема SIE не обновляет любые биты HRSLT в регистре HRSL, давая тем самым для CPU все время, необходимое для чтения результата последней транзакции. Значение по умолчанию для счетчика фреймов после сброса по питанию равно 0. CPU может сбросить счетчик фреймов установкой бита FRMRST = 1 (см. врезку "FRMRST"). Импульсы Keep-Alive. Когда идет работа хоста USB на низкой скорости (low-speed USB), и когда SOFKAENAB = 1, подсистема SIE генерирует каждую миллисекунду импульс keep-alive, состоящий из одного low-speed EOP. Назначение: Set Up Data FIFO (регистр загрузки данных). Режим работы: только хост USB. CPU 8 раз записывает байты в регистр SUDFIFO, чтобы загрузить внутренний 8-байтный FIFO данными для пакета SETUP. Указания по программированию SUDFIFO не связан с регистром счетчика байт, потому что полезная нагрузка пакета SETUP всегда состоит из 8 байт. Если CPU прочитает этот регистр после записи в него 8 байт, то байты FIFO будут прочитаны обратно. Назначение бит: SUSDNIRQ: Suspend operation Done IRQ (прерывание завершения операции приостановки) Режим работы: только хост USB. SIE устанавливает бит SUSDNIRQ, чтобы показать 3 мс активность шины. Это обычно происходит через 3 мс после того, как CPU сбросил SOFKAENAB = 0. CPU очистит бит SISDNIRQ записью в него 1. CPU устанавливает и очищает бит SUSDNIE. Когда SUSDNIE = 1, флаг SUSDNIRQ разрешен как источник активации ножки INT. Назначение бит: VBUSIRQ: VBUS Detect Interrupt Request (запрос прерывания детектирования VBUS) Режим работы: оба режима, и как хост USB, и как устройство USB. Подсистема SIE установит биты VBUSIRQ и NOVBUSIRQ, когда выход внутреннего компаратора уровня напряжения на VBUS перейдет от 0 к 1 (соответствует VBUSIRQ), или от 1 к 0 (соответствует NOVBUSIRQ). Этот компаратор показывает напряжение на ножке VBCOMP (VBUS Comparator). CPU очистит биты VBUSIRQ и NOVBUSIRQ записью в них 1. CPU устанавливает и очищает биты VBUSIE и NOVBUSIE чтобы разрешить или запретить соответствующий флаг IRQ для активации ножки INT. Указания по программированию Эти биты активны в обоих режимах - и хоста, и устройства USB. В режиме устройства USB они могут использоваться в разработках с собственным источником питания, чтобы определить моменты подключения к хосту USB и отключения от него. Обычно они не нужны в качестве бит детектирования VBUS в режиме хоста USB, потому что хост сам предоставляет (и управляет) питанием VBUS, присутствующим на коннекторе USB. В этом случае ножка VBCOMP может использоваться как вход общего назначения, которая может генерировать разные прерывания для каждого из перепадов уровня: 0 -> 1 (VBUSIRQ) или 1 -> 0 (NOVBUSIRQ). На ножке VBCOMP имеется слаботочный (~100 кОм) нижний подтягивающий уровень к земле резистор (pulldown), так что внешний терминирующий резистора не требуется, когда ножка VBCOMP используется как вход общего назначения. Некоторые приложения MAX3421E могут реализовать оба коннектора Type A (хост USB) и Type B (устройство USB), и автоматически конфигурировать MAX3421E, чтобы соответствовать необходимому режиму работы, в зависимости от того, какому коннектору было подключение (коннектор Type A предназначен для подключения к устройству USB, коннектор Type B для подключения к хосту USB). В этом случае на коннекторе Type A ножка VBUS может получать питание от локального источника +5V DC, и могут быть включены нижние внутренние подтягивающие резисторы D+ и D- DMAX3421E, чтобы определить момент подключения к коннектору Type A устройства USB. Дизайн хоста на коннекторе Type A должен использовать ограничитель тока/дектектор/ключ, такой как MAX4793, чтобы управлять ножкой VBUS коннектора Type A. Ножка VBUS коннектора Type B может быть подключена ко входу VBCOMP микросхемы MAX3421E. Это позволит системе определить присутствие напряжения VBUS, и таким образом детектировать подключение к хосту USB. В этом случае система может сама себя сконфигурировать либо как периферийное устройство, либо как хост. Из-за того, что большинство бит разрешения прерывания очищаются во время сброса по шине (USB bus reset), подпрограмма инициализации, которая разрешает прерывания, должна быть вызвана как часть обработки события USB bus reset. [Ссылки] 1. AN3785 MAX3421E Programming Guide site:maximintegrated.com. |