PID Тип | Имя PID | PID[3…0] | Описание |
Признак (Token) | Out | 0001 | Адрес + номер конечной точки для транзакции ХОСТ -->Функция |
In | 1001 | Адрес + номер конечной точки для транзакции ХОCT <-- Функция | |
SOF | 0101 | Маркер начала пакета и его номер | |
SETUP | 1101 | Адрес + номер конечной точки для SETUP транзакции ХОСТ ® Функция в канале управления | |
Данные | DATA0 | 0011 | Четный PID пакета данных |
DATA1 | 1011 | Нечетный PID пакета данных | |
Статус | ACK | 0010 | Приемник принял пакет данных без ошибок |
NAK | 1010 | Принимающее устройство не может принять данные, или передающее не может их отправить | |
STALL | 1110 | Конечна точка приостановлена (HALT) или запрос по управляющему каналу не поддерживается | |
Спец. | PRE | 1100 | ХОСТ инициирует преамбулу, разрешая трафик для низкоскоростных устройств |
Рисунок 3. Типы PID.
PID биты приведены в таблице в MSB порядке. Когда они передаются по шине, правый бит (бит 0) выдается первым.
- Поле адреса устройства (Addr Field)
Поле адреса используется для идентификации к какому устройству направлен текущий пакет. Размерность поля - 7 бит, что позволяет адресовать 127 уникальных USB устройств. После сброса или включения питания, адрес устройства устанавливается по умолчанию в 0 и должен быть запрограммирован хостом в ходе процесса энумерации. Адрес 0 (заданный по умолчанию) зарезервирован для вновь подключаемых устройств и не может быть назначен для нормальной работы.
- Поле адреса конечной точки (Endpoint Field)
Поле адреса конечной точки имеет размерность 4 бита и позволяет размещать в устройстве до 16 конечных точек. Все функции должны поддерживать одну управляющую '0' конечную точку. Низкоскоростные устройства поддерживают только три канала передачи: управляющий канал, связанный с нулевой конечной точкой и два дополнительных канала (две Interrupt конечные точки). Полноскоростные устройства поддерживают максимум до 16 конечных точек.
- Поле номера кадра (Frame Number Field)
Поле номера кадра представляет собой 11-битное поле, которое инкрементируется хостом при инициировании нового кадра. Поле номера кадра начинается заново с нуля при достижения максимального значения 0х7FF, и используется только для SOF маркеров в каждом начале кадра.
- Поле циклического контроля по избыточности (CRC)
Циклический контроль по избыточности (CRC) используются для защиты всех полей кроме PID в маркерах и пакетах данных. Защита Маркера и пакета данных обеспечивает 100% нахождение всех одиночных и двойных битовых ошибок. Для маркеров предусмотрено пяти-битное поле CRC, которое используется для защиты полей ADDR и ENDP пакетов IN, SETUP, OUT или поле отметки времени маркера SOF. Для пакета данных используется 16-битный полином, кодирующий всё поле данных пакета.
- Поле конца пакета (EOP)
Поле конца пакета представляет собой сигнал окончания пакета и устанавливается на шине путем выставления сигнала "Single Ended Zero " SE0 в течении двух битовых интервалов следующего за J состоянием, установленным на время одного битового интервала.
Типы USB пакетов
Для USB шины позиционируется четыре типа пакетов. Пакеты-маркеры обозначает какого типа транзакция начинается на шине, пакет данных включает в себя передаваемую структуру данных, пакеты статуса используются для информирования об успешно выполненной транзакции или ошибках произошедших при передаче, и пакеты начала кадра инициируются при генерации нового кадра на шине.
- Маркерные пакеты (Token Packets)
Существуют три типа маркерных пакетов:
- In - информируют USB устройство, что хост хочет читать данные из устройства Out - информирует USB устройство, что хост хочет передавать данные в устройство Setup - используются для обозначения начала управляющего (Control Transfer) типа передачи данных
Все маркерные пакеты имеют следующий формат:
SYNC | PID | ADDR | ENDP | CRC5 | EOP |
Рисунок 4. Маркерный пакет.
- Пакеты данных (Token Packets)
Существуют два типа пакетов данных, каждый из которых способен содержать до 1024 байтов данных.
- DATA0 DATA1
У высокоскоростных устройств для пакетов данных определены два других PID-a: DATA2 и MDATA. Пакет данных имеет нижеследующий формат:
SYNC | PID | DATA | CRC16 | EOP |
Рисунок 5. Пакет данных.
- Максимальная полезная загрузка для низкоскоростных устройств составляет 8 байт.
- Максимальная полезная загрузка для полноскоростных устройств составляет 1023 байта.
- Максимальная полезная загрузка для высокоскоростных устройств составляет 1024 байт.
- Данные всегда посылаются целым числом байт. Данные CRC16 вычисляются только для поля данных в пакете и не включают PID, который имеет собственное поле проверки.
- Пакеты подтверждения (Handshake Packets)
Существуют три типа пакетов подтверждения, структура которых имеет только PID поле:
- ACK - подтверждение того, что пакет был успешно принят
- NAK - информирует, что устройство в данный момент не может принимать либо отправлять данные. Также используется в Interrupt транзакциях для информирования хоста, что устройство не имеет новых данных для передачи. Хост никогда не может выдавать ответ NAK. NAK используется в целях управления потоком данных.
- STALL - указывает, что устройство неспособно передавать или получать данные, и требуется вмешательство хоста для снятий состояния останова. Как только конечная точка устройства остановлена, устройство должно продолжить возвращать STALL, пока условие, вызвавшее останов не будет удалено с помощью вмешательства хоста. Хосту запрещено возвращать STALL.
Пакет подтверждения имеет нижеследующий формат:
SYNC | PID | EOP |
Рисунок 6. Пакет подтверждения.
- Пакеты начала кадра (Start of Frame Packets)
SOF пакет состоит из 11-ти битного номера кадра и генерируется хостом каждую 1ms ± 500ns для полноскоростной шины и каждые 125 µs ± 0.0625 µs для высокоскоростной шины.
Пакет начала кадра имеет нижеследующий формат:
SYNC | PID | Frame Number | CRC16 | EOP |
Рисунок 7. Пакет начала кадра.
USB функция
Когда мы думаем о USB устройстве то мы представляем периферийное оборудование, но USB устройство само по себе не означает наличие только приемо-передатчика. USB устройство на самом деле представляет собой совокупность функций или законченных устройств, объединенных в одном изделии. Итак теперь мы знаем из каких составных частей состоит USB пакет.
К счастью, большинство USB контроллеров, весь физический протокол нижнего уровня поддерживают самостоятельно без вмешательства пользовательской программы. Вмешательство пользователя необходимо лишь тогда, когда на шине произошло одно из событий: прием или выдача пакета данных в/из FIFO, событие NAK или STALL, процесс энумерации или переход в режим пониженного энергопотребления.
Большинство функций имеет буфера для приема/передачи данных. Обычно их размер составляет 8 байт. Каждый буфер закреплён за определеннной конечной точкой, например за EP0 Out и EP0 In. Например хост инициирует запрос дескриптора устройства. USB контроллер функции считывает Setup пакет и определяет по адресному полю был ли он направлен именно к ней. Если пакет был направлен именно по этому адресу, то USB контроллер считывает данные в соответствующий буфер (FIFO) указанный в поле конечной точки (Endpoint Field). После этого функция генерирует пакет подтверждения, в котором указывает статус принятия пакета и устанавливает сигнал прерывания для внешнего управляющего контроллера, указывающий, что произошло событие по приему данных в RXFIFO. Все эти действия происходят без внешнего вмешательства ПО пользователя, что разгружает микроконтроллер реализующий функцию управления. ПО микроконтроллера обрабатывает прерывание - считывает из RXFIFO запрос дескриптора и отвечает на него выдачей структуры соответствующей запрошенному дескриптору. [2]
Конечные точки
Конечные точки функции могут принимать или передавать данные. Конечные точки USB функции являются самым последним звеном в коммуникационном канале. Например, в программном слое, ваш драйвер устройства посылает пакет данных в конечную точку EP1 функции. Данные будут последовательно поступать в функцию и складываться USB контроллером в буфер RXFIFO1. Как только у управляющего микроконтроллера появиться свободное время он может считать из RXFIFO1 полученные данные. Если он хочет ответить пакетом данных, USB контроллер не может просто выставить их шину, т. к. мастером и инициатором запросов на шине является хост. Следовательно, управляющий микроконтроллер записывает пакет данных в IN конечную точку, например в EP1. Данные будут находится в буфере первой конечной точки TXFIFO1 до тех пор, пока хост не выставит на шину IN транзакцию к этой конечной точке. Конечные точки - это интерфейс связи между аппаратными средствами и микропрограммой работающей на функциональном устройстве. Все USB устройства должны поддерживать нулевую конечную точку (EP0). Она получает все управляющие и статус запросы во время процесса энумерации и всего цикла работы, пока устройство присоединено к USB шине. [2]
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |



