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


Описатели

Как уже говорилось в части 2, любое USB устройство имеет набор описателей, содержащих сведения о его возможностях. Каждый накопитель данных имеет описатели устройства, конфигурации, интерфейса, не менее двух описателей оконечных точек и один как минимум строковый описатель, в добавление к строковому описателю с нулевым индексом [* серийный номер].

Многозначные числа, содержащиеся в описателях, передаются в формате "little-endian" - младшим байтом (LSB) вперёд. Если идентификатор устройства равен, скажем, "0x1234", то в десятом байте описателя будет расположено число "0x34", а в одиннадцатом - "0x12".


Описатель устройства

Описатель устройства содержит общую информацию об устройстве, его конфигурации и сведения о принадлежности какому-либо классу USB. Таблица 3-1 показывает поля описателя. Ниже поля разбираются подробнее и поясняются особенности их использования в накопителях данных.


Таблица 3-1. Описатель устройства (18 байт)
 
0 bLength Длина описателя в байтах
1 bDescriptorType Тип описателя ("DEVICE")
2 bcdUSB Версия протокола USB (BCD). Для USB 2.0, байт 2 равен 0x00, а байт 3 - 0x02
4 bDeviceClass Код USB-класса. Для накопителей данных устанавливается в 0x00 (класс уточняется в описателе интерфейса)
5 bDeviceSubclass Код подкласса. Для накопителей данных равен 0x00
6 bDeviceProtocol Код протокола. Для накопителей данных равен 0x00
7 bMaxPacketSize0 Максимальный размер пакета для нулевой оконечной точки
8 idVendor Идентификатор производителя
10 idProduct Идентификатор изделия
12 bcdDevice Номер версии устройства (BCD)
14 iManufacturer Индекс строкового описателя производителя
15 iProduct Индекс строкового описателя изделия
16 iSerialNumber Индекс строкового описателя серийного номера. Для накопителей данных наличие обязательно
17 bNumConfigurations Число возможных конфигураций
  • bLength

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

  • bDescriptorType

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

  • bcdUSB

    Версия спецификации USB, которой соответствует устройство, в двоично-десятичном формате. Если рассматривать номер версии как десятичное число, то в старшем байте содержится целая часть, а в младшем - десятые и сотые доли. Версия 2.0 представляется числом 0x0200. Устройства, отвечающие версии 2.0, не обязаны быть высокоскоростными. Новые "full-speed" накопители данных следует согласовывать с самым последним вариантом спецификации.

  • bDeviceClass

    Для устройств, чья функция определяется на уровне устройства, данное поле определяет USB-класс устройства. Многие устройства, включая накопители данных, указывают свою принадлежность к какому-либо классу в описателе интерфейса и устанавливают данное поле в 0x00.

  • bDeviceSubclass

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

  • bDeviceProtocol

    Протокол, определяемый классом или подклассом. Для накопителей данных поле равно 0x00.

  • bMaxPacketSize0

    Максимальный размер пакета, передаваемого нулевой (управляющей) оконечной точке. "Full-speed" устройства могут использовать значения 0x08, 0x10, 0x20, или 0x40. Для "high-speed" устройств допустимо только значение 0x40.

  • idVendor

    Идентификатор производителя - уникальное число, получаемое участником ассоциации USB-IF после оплаты членских взносов. Каждое устройство обязано иметь действительный идентификатор производителя в этом поле.

  • idProduct

    Идентификатор изделия - назначается владельцем идентификатора производителя ("idVendor"). Данное число находится в ведении владельца "idVendor", таким образом, несколько производителей могут иметь в этом поле одинаковые значения без конфликтов.

  • bcdDevice

    Версия изделия в двоично-десятичном формате. Назначается владельцем "idVendor".

  • iManufacturer

    Индекс строкового описателя производителя. Равен нулю, если описатель отсутствует.

  • iProduct

    Индекс строкового описателя изделия. Равен нулю, если описатель отсутствует.

  • iSerialNumber

    Индекс строкового описателя серийного номера устройства. Каждый накопитель данных должен иметь серийный номер, 12 последних цифр которого не совпадают с 12-ю последними цифрами номера любого другого устройства с теми же значениями "idVendor" и "idProduct". Единственным исключением являются устройства, использующие CBI-протокол, серийного номера не требующий. [* Данное правило применимо не только к накопителям, но к любым устройствам, которые могут быть подключены к шине USB. ]

  • bNumConfigurations

    Число поддерживаемых устройством конфигураций. Почти всегда равно 0x01.

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