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


Описатель интерфейса

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


Таблица 3-3. Описатель интерфейса (9 байт)
 
0 bLength Длина описателя в байтах
1 bDescriptorType Тип описателя ("INTERFACE")
2 bInterfaceNumber Номер, индивидуализирующий данный интерфейс
3 bAlternateSetting Значение по умолчанию (0x00)
4 bNumEndpoints Число поддерживаемых оконечных точек. Для "bulk-only" накопителей данных устанавливается в 0x02
5 bInterfaceClass Код класса. Для накопителей данных равен 0x08
6 bInterfaceSubclass Код подкласса. Рекомендованное значение 0x06: универсальный набор команд SCSI
7 bInterfaceProtocol Код протокола. Рекомендованное значение 0x50: "bulk only"
8 iInterface Индекс строкового описателя интерфейса
  • bLength

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

  • bDescriptorType

    Константа, соответствующая типу описателя. Для интерфейса ("INTERFACE") равна 0x04.

  • bInterfaceNumber

    Номер, индивидуализирующий интерфейс. У каждого интерфейса должен быть описатель с уникальным значением в этом поле.

  • bAlternateSetting

    Единственный интерфейс может иметь альтернативные варианты установок. Каждый вариант установок имеет свой собственный описатель интерфейса с одним и тем же значением в поле "bInterfaceNumber" и уникальным значением в поле "bAlternateSetting". Каждый вариант установок имеет свои собственные описатели оконечных точек. В каждый момент времени активным может быть только один из вариантов. Сразу по завершении процесса обнаружения устройства хостом и выбора конфигурации активизируется вариант установок по умолчанию (значение поля "bAlternateSetting" равно 0x00) и только его обычно поддерживают драйверы накопителей операционных систем.

  • bNumEndpoints

    Количество оконечных точек, поддерживаемых интерфейсом, в добавление к обязательной нулевой точке. Для "bulk-only" накопителей следует установить в 0x02.

  • bInterfaceClass

    Для накопителей данных следует установить в 0x08.

  • bInterfaceSubClass

    Возможные варианты для накопителей данных:

    • 0x01: Сокращённый набор команд (Reduced Block Commands - RBC)
    • 0x02: SFF-8020i, MMC-2 (ATAPI) (приводы CD/DVD)
    • 0x03: QIC-157 (ленточные накопители)
    • 0x04: Интерфейс гибких дисков (USB Floppy Interface - UFI)
    • 0x05: SFF-8070i (съёмные перезаписываемые приводы с интерфейсом ATAPI)
    • 0x06: Универсальный набор команд SCSI. Рекомендованное значение. Тип периферийного устройства (PDT) уточняется SCSI-командой "INQUIRY".

    Для накопителей данных данное поле специфицирует какой-либо из перечисленных выше стандартных или универсальный (0x06) набор команд. Каждое устройство сообщает тип периферийного устройства (peripheral device type - PDT) в ответе на SCSI-команду "INQUIRY". Каждое периферийное устройство (PDT) соотносится с документом, определяющим набор команд. Вероятно, всем новым накопителям данных следует присваивать полю "bInterfaceSubClass" значение 0x06 - универсальный набор команд SCSI. В этом случае собственно набор команд указывается в поле "PDT" ответа на запрос "INQUIRY". Устройства с другим значением поля "bInterfaceSubClass" должны позаботиться о его совместимости со значением PDT, возвращаемым в ответе на запрос "INQUIRY". Подробнее о команде "INQUIRY" говорится в главе 6.

    Спецификация накопителей данных часто вызывает непонимание, когда сообщает, что значение "bInterfaceSubclass" определяет "транспортный протокол и систему кодировки команд, передаваемых интерфейсом". На самом деле "bInterfaceSubclass" сообщает систему команд, то есть набор командных блоков, используемых устройством (как явным образом, так и в ответе на команду "INQUIRY"), а поле "bInterfaceProtocol", описываемое ниже, уточняет транспортный протокол.

  • bInterfaceProtocol

    Возможные варианты для накопителей данных:

    • 0x00: протокол CBI с завершением команды обменом по прерыванию;
    • 0x01: протокол CBI с завершением команды без обмена по прерыванию;
    • 0x50: только обмен неструктурированными данными (bulk). Рекомендованное значение.

    В накопителях данных это поле сообщает транспортный протокол. Транспортный протокол определяет типы обмена на шине и структуры данных, предназначенные для передачи команд, данных и состояния. Накопители данных могут использовать любой из двух протоколов: "bulk-only" - передачу неструктурированных данных (bulk-only transport - BOT, называемый также "BBB", так как все три этапа обмена используют "bulk" пересылки) или "CBI" (control/bulk/interrupt - CBI). Спецификация рекомендует во всех новых устройствах класса "накопитель данных" использовать протокол передачи неструктурированных данных (0x50). CBI допускается для использования только в накопителях на гибких дисках.

  • iInterface

    Индекс строкового описателя интерфейса. Устанавливается в нуль, если описатель отсутствует.

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