USB MSD. Часть 3. USB класс накопителей данных (перевод)
- переводы |
- USB |
- MSD |
- Mass Storage Device
Описатели
Как уже говорилось в части 2, любое USB устройство имеет набор описателей, содержащих сведения о его возможностях. Каждый накопитель данных имеет описатели устройства, конфигурации, интерфейса, не менее двух описателей оконечных точек и один как минимум строковый описатель, в добавление к строковому описателю с нулевым индексом [* серийный номер].
Многозначные числа, содержащиеся в описателях, передаются в формате "little-endian" - младшим байтом (LSB) вперёд. Если идентификатор устройства равен, скажем, "0x1234", то в десятом байте описателя будет расположено число "0x34", а в одиннадцатом - "0x12".
Описатель устройства
Описатель устройства содержит общую информацию об устройстве, его конфигурации и сведения о принадлежности какому-либо классу USB. Таблица 3-1 показывает поля описателя. Ниже поля разбираются подробнее и поясняются особенности их использования в накопителях данных.
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.
- блог пользователя teap0t
- 128122 просмотра
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика Imprecise Bus Faults в микроконтроллерах Cortex-M3/M4/M4F
- Self-powered камера
- Фоновый модулятор: беспроводная связь из ничего (перевод)
- Texas Instruments Analog Applications Journal SLYT612 "Снижение искажений в аналоговых КМОП ключах" (перевод)
- USB MSD. Часть 6. Команды SCSI (перевод)
- USB MSD. Часть 3. USB класс накопителей данных (перевод)
- Texas Instruments Application Report SBAA042 "Кодовые схемы, используемые в аналогово-цифровых преобразователях" (перевод)
- 10 принципов правильного интерфейса
- Релиз SDK на русский микропроцессор КРОЛИК
Recent comments
5 лет 19 недель назад
5 лет 34 недели назад
5 лет 44 недели назад
5 лет 46 недель назад
6 лет 2 недели назад
6 лет 26 недель назад
6 лет 27 недель назад
6 лет 30 недель назад
6 лет 41 неделя назад
7 лет 21 неделя назад