USB MSD. Часть 3. USB класс накопителей данных (перевод)


Описатели оконечных точек

Каждая оконечная точка, упомянутая в описателе интерфейса, имеет свой собственный описатель. Нулевая оконечная точка собственного описателя не имеет, так как должна присутствовать в каждом устройстве. Максимальный размер пакета для неё указывается в описателе устройства, а все остальные параметры определены в спецификации USB.

В таблице 3-4 приведены поля описателя оконечной точки. Накопитель данных, использующий BBB-протокол, должен иметь два таких описателя. Ниже приводится более подробное описание каждого поля и особенности его использования в накопителях данных.


Таблица 3-4. Описатель оконечной точки (7 байт)
 
0 bLength Длина описателя в байтах
1 bDescriptorType Тип описателя ("ENDPOINT")
2 bEndpointAddress Номер и направление оконечной точки
3 bmAttributes Поддерживаемые типы передачи. Для "Bulk" устанавливается в 0x02
4 wMaxPacketSize Максимальный поддерживаемый размер пакета
6 bInterval Максимальная интенсивность "NAK" для высокоскоростных принимающих (OUT) оконечных точек
  • bLength

    Длина описателя в байтах. Всегда равна 0x07.

  • bDescriptorType

    Константа, соответствующая типу описателя. Для оконечной точки ("ENDPOINT") равна 0x05.

  • bEndpointAddress

    Направление передачи и номер оконечной точки.
    Бит 7 указывает направление передачи: 0 = приём (Out), 1 = передача (In).

    [* В протоколе USB используется хост-центричное наименование сигналов, то есть, если мастер выдаёт данные периферийному устройству, он работает на выход (OUT) и на другом конце линии оконечная точка типа OUT занимается приёмом этих данных.]

    Биты 6..4 не используются и должны быть равны нулю.
    Биты 3..0 содержат номер, который может принимать любое поддерживаемое аппаратурой устройства значение в диапазоне от "1" до "15".

    Например, интерфейс может использовать оконечную точку номер "1" в режиме приёма (0x01) и оконечную точку номер "1" в режиме передачи (0x81) или оконечную точку "2" в режиме приёма (0x02) и оконечную точку "3" в режиме передачи (0x83).

  • bmAttributes

    Биты 7..2 не используются и должны быть установлены в нуль.
    Биты 1..0 сообщают тип обмена, поддерживаемого оконечной точкой. Для неструктурированных данных (bulk) следует установить в 0x02.

  • wMaxPacketSize

     

    Биты 15..11 при неструктурированном (bulk) обмене не используются и должны быть равны нулю;
    Биты 10..0 слова содержат число байт, которое оконечная точка способна принять за одну транзакцию.
    Допустимые значения зависят от скорости и типа обмена:
    • полноскоростные (full-speed) "bulk" оконечные точки могут работать с пакетами размером в 8, 16, 32 и 64 байта. Для лучшей производительности следует выбирать значение 64 байта (0x0040), так как меньшие значения могут приводить к тому, что некоторые хосты не будут распределять более одной транзакции за фрейм;
    • высокоскоростные (high speed) устройства работают только с пакетами длиной 512 байт (0x0200).

     

  • bInterval

    Хост игнорирует значение этого поля для всех оконечных точек, кроме высокоскоростных (high-speed) работающих в режиме приёма (OUT). Для этих последних данное поле указывает наибольшую интенсивность ответов "NAK". Данное поле относится к ситуации когда устройство, принявшее пакет, возвратило подтверждение "ACK" и у хоста есть ещё данные. Возвращая "ACK", устройство сообщает о возможности продолжать приём (в противном случае оно возвратило бы "NYET"). Если новый пакет прибыл, но по каким-либо причинам устройство не может его принять, оконечная точка возвращает "NAK". "bInterval" говорит, что оконечная точка рассчитывает возвращать "NAK" не чаще чем один раз за время, определяемое данным полем. Значение находится в диапазоне от 1 до 255 микрофреймов. Нулевое значение говорит о том, что оконечная точка не собирается возвращать "NAK" сразу после "ACK".

ПредпросмотрAttachmentSize
usb_msd_3.zip68.8 КБ