В любой момент времени, устройство находится в одном из следующих состояний (переходы функциональных состояний см раздел 6.1.2):
NodeReset - Сброс устройства
Состояния строки NodeSuspend, NodeResume или NodeReset приводят к переходу из одного рабочего состояния в другое. Эти состояния обнаруживаются специализированным аппаратным обеспечением, и рапортует через регистр чередования события (ALTEV). Если прерывания разрешены, то прерывание генерируется при возникновении любого из специализированных состояний.
NodeOperational
Это нормальное рабочее состояние устройства. В этом состоянии, узел сконфигурирован для работы на шине USB.
NodeSuspend
Устройство USB ожидает ввода состояния NodeSuspend, когда проходит 3 мс без обнаружения активности шины. Устройство ищет это событие, и его сигналы с помощью установки бита SD3 в регистре ALTEV, который вызывает генерацию прерывания, если он включён. Аппаратно-реализованое программное обеспечение должно реагировать на переход устройства в состояние NodeSuspend.
Устройство может возобновить нормальную работу под управлением аппаратно-реализованого программного обеспечения при отзыве на локальное событие главного контроллера. Оно может включить шину USB через NodeResume, или когда обнаруживается возобновление команд на шине USB, которая посылает сигналы прерываний главному контроллеру.
NodeResume
Если главный контроллер имеет разрещённое удалённое включение от узла, то устройство может инициализировать удалённое включение.
Один раз, обнаружив событие, которое включает шину, аппаратно-реализованое программное обеспечение выводит устройство из состояния NodeSuspend инициализацией NodeResume на USB, используя регистр NFSR. Аппаратно-реализованое программное обеспечение узла должно гарантировать, по крайней мере, 5 мс бездействия на USB. Пока устройство в состоянии NodeResume, константа "К" выдаётся на USB. Это должно продолжатся, по крайней мере, 1 мс и не более 5 мс, после которой главная USB должна продолжать посылать сигнал NodeResume, в течение минимум 20 мс, а затем завершить операцию NodeResume выпуском последовательности конца пакета (EOP).
Для удачного обнаружения EOP, аппаратно-реализованое программное обеспечение должно ввести состояние NodeOperational USB установкой регистра NFSR.
Если не получено EOP от главного контроллера в течение 100 мс, программное обеспечение должно переинициализировать NodeResume.
NodeReset
Когда обнаруживается сигнал NodeResume или NodeReset во время состояния NodeSuspend, устройство может сигнализировать об этом главному контроллеру генерированием прерывания.
Спецификация USB требует, чтобы устройство должно было быть готово, ответить знакам USB в течение 10 мс после включения или сброса.
6.1.2 Переходное функциональное состояние
На рисунке 18 показаны состояния и переходы устройства, также хорошо, как и условия которые защёлкивают каждый переход. Все переходы состояний инициализируются аппаратно-реализованым программным обеспечением.
Рисунок 18. Диаграмма функциональных состояний узла
Примечания:
1. Когда узел не в состоянии NodeOperational, все регистры "заморожены" за исключением машины состояний контроллера конечных точек и битов TX_EN, LAST и RX_EN, которые сброшены.
2. В состоянии NodeResume, возобновляется распространение сигналов.
3. В состоянии NodeSuspend, узел может перейти в состояние низкого потребления мощности и доступно для обнаружения возобновляющего работу сигнала.
Таблица 3. Функциональные состояния.
Переходное состояние |
Утверждённое условие |
set_reset |
Биты регистра функционального
состояния узла NFS[1:0] записаны со зна-чением 00b. Аппаратно-реализованое
программное обеспечение должно ини-циализировать set_reset, только если RESET
установлен в регистре ALTEV. |
set_suspend |
Биты регистра функционального
состояния узла NFS[1:0] записаны со зна-чением 11b. Аппаратно-реализованое
программное обеспечение должно ини-циализировать set_suspend, только если SD3
установлен в регистре ALTEV. |
set_oper |
Биты регистра функционального
состояния узла NFS[1:0] записаны со значением 10b. |
clear_suspend |
Биты регистра функционального
состояния узла NFS[1:0] записаны со зна-чением 01b. Аппаратно-реализованое
программное обеспечение должно ини-циализировать clear_suspend, только если
SD5 установлен в регистре ALTEV. |
reset_det |
RESET в регистре ALTEV устанавливается в “1” |
local_event |
Локальное событие, которое должно включить USB. |
sd5_det |
SD5 в регистре ALTEV устанавливается в “1” |
suspend_det |
SD3 в регистре ALTEV устанавливается в “1” |
resume_det |
RESUME в регистре ALTEV устанавливается в “1” |
resume_compl |
Узел должен оставаться в
состоянии NodeResume, по крайней мере, 10 мс, а затем должен войти в рабочее
состояние USB для обнаружения EOP из главного контроллера, EOP прервёт эту
операцию. EOP сигнализирует, когда EOP установлен в “1” в регистре ALTEV.
|
6.2 Работа конечной точки
6.2.1 Обнаружение адреса
Радиопередача пакетов из главного контроллера во все узлы в сети USB. Обнаружение адреса выполняется аппаратно, чтобы позволить избирательный приём пакетов и разрешить оптимальное использование полосы пропускания микроконтроллера. Один функциональный адрес с семью различными комбинациями конечной точки декодируется параллельно. Если найден подходящий адрес, то этот пакет посылается в FIFO; иначе он игнорируется.
Приходящее адресное поле пакета USB и поле конечной точки извлекаются из приходящего потока битов. Затем адресное поле сравнивается со значение регистра функционального адреса (FADR). Если обнаружен подходящий адрес, то поле конечной точки параллельно сравнивается с содержимым всех регистров управления конечной точкой (EPCx). Подходящее значение затем заставляет получить или отправить нужные данные, используя соответствующую конечную точку FIFO.
Рисунок 19. USB декодирование функционального адреса / конечной точки
6.2.2 Передача и приём конечных точек FIFO
Устройство использует всего семь принимающих и передающих FIFO: одно двунаправленное передающее и принимающее FIFO для принудительного управления конечной точкой, три передающих FIFO и три принимающих FIFO. Как показано в таблице 4, двунаправленное FIFO для управления конечной точкой "глубиной" 8 байт. Дополнительные однонаправленные FIFO размером 64 байта каждое для приёма и передачи. Каждое FIFO может быть запрограммировано для одной исключительной конечной точки USB, используемое совместно с одним глобально декодированным функциональным адресом USB. Аппаратно-реализованое программное обеспечение не должно разрешать оба принимающих и посылающих FIFO для конечной точки 0 в любой момент времени.
Таблица 4. Размер конечной точки FIFO USBN9603/4
№ конечной точки |
TX FIFO |
RX FIFO |
Размер (байт) |
Наименование |
Размер (байт) |
Наименование |
0 |
8 FIFO0 |
1 |
64 |
TXFIFO1 |
|
|
2 |
|
|
64 |
RXFIFO1 |
3 |
64 |
TXFIFO2 |
|
|
4 |
|
|
64 |
RXFIFO2 |
5 |
64 |
TXFIFO3 |
|
|
6 |
|
|
64 |
RXFIFO3 |
Если 2 конечных точки в одном направлении запрограммированы с одинаковым номером конечной точки и обе разрешены, то данные принимаются или передаются в/из конечной точки с меньшим номером, пока эта конечная точка отключена для передачи большого массива или прерываний, или становится полной или пустой для ISO передач. Например, если принимается EP2 и принимается EP4, обе используют конечную точку EP5 и обе являются изохорными, то первый выходящий пакет принимается в EP2, а второй в EP4, не принимая взаимодействие между аппаратно-реализованым программным обеспечением.
Конечные точки, запрограммированные в различных направлениях с одинаковым номером конечной точки, работают независимо.
Операция двунаправленного управления конечной точкой FIFO0
FIFO0 должно быть использовано для двунаправленного управления конечной точкой 0. Оно может быть сконфигурировано для получения данных отправленных по адресу, используемому по умолчанию, с битом DEF в регистре EPC0. Изохорные передачи не поддерживаются для управления контрольной точкой.
Конечная точка 0 FIFO может содержать одиночный приём или передачу пакета размером до 8 байтов. На рисунке 20 показаны основные операции в обоих направлениях приёма и передачи.
Рисунок 20. Работа конечной точки 0
(*) Для пакета нулевой длины, TX_EN вызывает переход из IDLE в TXWAIT
Пакет, записанный в FIFO, передается, если получен символ IN для соответствующей конечной точки. Если обнаружено ошибочное условие, то пакет данных остаётся в FIFO и передача откладывается до следующего символа IN.
Содержимое FIFO может быть очищено, чтобы позволить ответить на символ OUT или записать новые данные в FIFO для следующего символа IN.
Если для FIFO получен символ OUT, то аппаратно-реализованое программное обеспечение информирует, что FIFO получило данные, только если не было ошибочного условия (ошибка CRC или STUFF).Ошибочные приёмы автоматические отбрасываются.
Операция передачи конечной точки FIFO (TXFIFO1, TXFIFO2, TXFIFO3)
Передачи FIFO для конечных точек 1,3 и 5 поддерживают передачу большого массива, прерывания и изохорного пакета USB больших, чем реальный размер FIFO. Однако, аппаратно-реализованое программное обеспечение должно обновлять содержимое FIFO во время передачи пакета USB по шине. Рисунок 21 показывает операцию передачи FIFO.
Рисунок 21.Операция Tx FIFO
TFxS. Передача FIFO размера x. Это общее число байтов доступных внутри FIFO.
TXRP. Передача указателя чтения. Этот указатель увеличивается каждый раз когда контроллер конечных точек читает из передающего FIFO. Этот указатель вращается вокруг нуля, если TFxS превысил предел. TXRP никогда не увеличивается выше величины указателя записи TXWP.
Остановка произойдёт раньше попадания в условие, если TXRP равен TXWP и сделана попытка передать больше байтов, когда бит LAST в регистре TXCMDx не установлен.
TXWP. Передача указателя записи. Этот указатель увеличивается каждый раз, когда аппаратно-реализованое программное обеспечение записывает для передачи FIFO. Этот указатель вращается вокруг нуля, если TFxS вышел за пределы.
Если сделана попытка записать больше байтов в FIFO, чем реально доступно (выход за установленные пределы FIFO), то запись в FIFO игнорируется. Если так, то TCOUNT проверяется для отображения числа оставшихся пустых байтов.
TXFL. Передача уровня FIFO. Эта величина показывает текущее количество байтов в FIFO.
Предупреждение об опасности возникает, если TXFL уменьшается до определённого значения. Соответствующий бит WARNx установлен в регистре FWR, если TXFL равен или меньше чем число, определённое битом TFWL в регистре TXCx.
TCOUNT. Передача счёта FIFO. Эта величина показывает, какое количество пустых байтов может быть заполнено внутри передающего FIFO. Эта величина доступна аппаратно-реализованому программному обеспечению через регистр TxSx.
Операция приёма конечной точки FIFO (RXFIFO1, RXFIFO2, RXFIFO3)
Приёмы FIFO для конечных точек 2,4 и 6 поддерживают передачу большого массива, прерывания и изохронного пакета USB больших, чем реальный размер FIFO. Однако, аппаратно-реализованое программное обеспечение должно обновлять содержимое FIFO во время приёма пакета USB по шине. Рисунок 22 показывает операцию приёма FIFO.
Рисунок 22.Операция RX FIFO
RFxS. Приём FIFO размера x. Это общее число байтов доступных внутри FIFO.
RXRP. Приём указателя чтения. Этот указатель увеличивается каждый раз, когда контроллер конечных точек читает из принимающего FIFO. Этот указатель вращается вокруг нуля, если RFxS превысил предел. RXRP никогда не увеличивается выше величины указателя записи RXWP.
Если сделана попытка прочитать больше байтов, чем реально доступно (выход за установленные пределы FIFO), то последний байт читается повторно.
RXWP. Приём указателя записи. Этот указатель увеличивается каждый раз, когда аппаратно-реализованое программное обеспечение записывает для приёма FIFO. Этот указатель вращается вокруг нуля, если RFxS вышел за пределы.
Превышение условия возникает, если RXRP равен RXWP и сделана попытка записать дополнительный байт.
RXFL. Приём уровня FIFO. Эта величина показывает, какое количество байтов может быть принято до возникновения превышения условия при следующей записи в FIFO.
Предупреждение об опасности возникает, если RXFL уменьшается до определённого значения. Соответствующий бит WARNx установлен в регистре FWR, если RXFL равен или меньше чем число, определённое битом RFWL в регистре RXCx.
RCOUNT. Приём счёта FIFO. Эта величина показывает, какое количество байтов может быть прочитано из принимающего FIFO. Эта величина доступна аппаратно-реализованому программному обеспечению через регистр RxSx.
6.2.3 Модель программирования
Рисунок 23 показывает иерархию регистров для сообщения о событиях.
Рисунок 23. Иерархия регистров
6.3 Режимы сбережения потребляемой мощности
Для уменьшения рассеивания мощности узла USB, устройство может быть установлено в статический режим Halt. Во время режима Halt, схема осциллятора отключается, останавливается генератор тактовых импульсов 24 МГц и 48 МГц удвоитель частоты, также хорошо, как и выходной сигнал приходящий на контакт CLKOUT. Однако все внутренние состояния устройства и установки регистров сохраняются.
Устройство переходит в режим Halt при следующих условиях:
Обнаружения любой активности на USB (USB не бездействует) и установки в "1" бита разрешения включения, ENUSB в регистре WKUP. (Узел может обнаружить любую USB активность только, когда он присоединён.)
Когда обнаружено допустимое включающее событие, устройство возвращается в активный режим после прохождения задержки включения 214 XIN тактовых циклов (приблизи-тельно 680 мкс). Эта задержка осуществляется с помощью 14-разрядного счётчика, который гарантирует, что 24 МГц осциллятор имеет условно предельную стабильность, и удвоитель тактовой частоты синхронизирован и генерирует стабильный 48 МГц сигнал. После этой установочной задержки, тактовый сигнал может быть выдан на контакт CLKOUT.
6.4 Генерация тактовых импульсов
Генератор тактовых импульсов обеспечивает выходной сигнал CLKOUT основанный на программировании регистра конфигурации генератора тактовых импульсов (CCONF). Это позволяет отключать выходную тактовую частоту и выбирать делитель тактовой частоты. Делитель тактовой частоты поддерживает программируемый выход в диапазоне от 48 МГц до 2.82 МГц. При сбросе по включении питания, значение выходной тактовой частоты по умолчанию 4 МГц. Программный сброс не оказывает влияния на программирование CCONF, и таким образом не оказывает влияние на сигнал CLKOUT.
Различие между устройствами USBN9603 и USBN9604 заключается в эффекте влияния аппаратного сброса на схему генератора тактовых импульсов. В USBN9604, появление RESET приводит к сбросу схемы генератора тактовых импульсов, а в USBN9603, схема генератора тактовых импульсов не сбрасывается.
В USBN9603, однако, появление RESET переводит все регистры в их исходное состояние, включая CCONF, который затем переводит сигнал CLKOUT к величине установленной по умолчанию 4 МГц.
В USBN9604, появление RESET вызывает сброс схемы генератора тактовых импульсов также как сброс по включению питания. Как часть сброса генератора тактовых импульсов, задержка 214 XIN тактовых циклов идёт перед выдачей сигнала CLKOUT. Появление RESET также переводит все регистры в их исходное состояние, включая CCONF, который затем переводит сигнал CLKOUT к величине установленной по умолчанию 4 МГц.
Это различие оказывается практически важным для силовых операций с шиной. В таких приложениях, напряжение, приложенное к шине, может превысить допустимые уровни схемы генерации тактовых импульсов. Когда это происходит, для этой схемы должен быть применён сброс, чтобы гарантировать правильную работу. Это обнаружение низкого напряжения типично выполняется в приложениях с силовой шиной, используя сенсор напряжения, такой как LP3470, для соответствующего сброса CPU и других компонентов, включая USBN9604.
В приложения с собственным питанием, где существует прямой контроль над источни-ком питания, нет необходимости, чтобы вход RESET осуществлял сброс схемы генератора тактовых импульсов и сигнал CLKOUT стоял 214 XIN тактовых циклов. USBN9603, таким образом, предназначен для приложений с собственным питанием, которые используют сигнал CLKOUT как сигнал системных тактовых импульсов.