USB MSD. Часть 3. USB класс накопителей данных (перевод)
- переводы |
- USB |
- MSD |
- Mass Storage Device
Описатель интерфейса
В описателе интерфейса указывается, что устройство выполняет функцию накопителя данных. Конфигурация может иметь несколько интерфейсов, активных одновременно. Каждый интерфейс имеет свой собственный описатель и связанные с ним подчинённые описатели. В таблице 3-3 приведены поля описателя интерфейса. Ниже приводится более подробное описание каждого поля и способ его использования в накопителях данных.
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
Индекс строкового описателя интерфейса. Устанавливается в нуль, если описатель отсутствует.
- блог пользователя teap0t
- 131005 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика 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
1 неделя 14 часов назад
1 неделя 3 дня назад
5 недель 1 час назад
7 недель 15 часов назад
9 недель 5 дней назад
12 недель 5 дней назад
12 недель 6 дней назад
16 недель 4 дня назад
17 недель 5 дней назад
6 лет 3 недели назад