USB MSD. Часть 6. Команды SCSI (перевод)


Базовые команды

Все перечисленные ниже команды описываются в спецификации "Базовые команды SCSI" (SCSI Primary Commands - SPC).


INQUIRY

Команда "INQUIRY" запрашивает структуру с информацией об устройстве. Устройство должно возвращать ответ даже в случае неготовности носителя и невозможности отвечать на все остальные команды. Все блоковые устройства должны поддерживать команду "INQUIRY".

Ответ на команду, возвращаемый на этапе пересылки данных, имеет длину как минимум 36 байт (см. таблицу 6-3) и указывает периферийный тип устройства ("PDT"), версию набора базовых команд SPC, идентификаторы производителя и изделия, номер модификации изделия, а также данные о возможностях устройства и поддерживаемых протоколах.

В таблице 6-4 перечислены коды наиболее распространённых периферийных устройств ("PDT") по спецификации базовых команд SCSI (SPC). Жёсткие диски и флэш-карты относятся к типу "0x00" - блоковым устройствам с прямым доступом. Периферийные устройства типа "0x0E" используют усечённый набор блоковых команд (reduced block command - RBC), ориентированный на блоковые устройства с уменьшенными по сравнению со стандартными SBC устройствами требованиями и возможностями. RBC выглядит довольно соблазнительно для некоторых приложений, но редко используется на практике, ввиду отсутствия в Windows стандартных драйверов для них. Если вам нужен драйвер для нестандартного RBC-устройства, то, возможно, также понадобится отметить его особенности в описателе, чтобы исключить возможные конфликты со сторонними RBC-драйверами, загруженными пользователем для других задач.

Как объяснялось в главе 3, если поле "bInterfaceSubClass" описателя интерфейса не равно "0x06" (универсальный набор команд SCSI), то тип периферийного устройства ("PDT") должен соответствовать объявленному подклассу.

Отметим, что параметр "RMB" (бит 7 байта 1) указывает на использование в устройстве съёмного носителя. USB флэш-диски и им подобные устройства являются съёмными накопителями с несъёмным носителем. Тем не менее, некоторые документы Microsoft рекомендуют, чтобы такого рода устройства сообщали о наличии съёмного носителя (RMB = "1"), что многие устройства и делают.


Table 6-3. Ответ на команду "INQUIRY". 36 байт минимум
 
Byte Bit Description
0 7..5 PERIPHERAL QUALIFIER
("000b" = к данному LUN подключено устройство)
4..0 PDT (PERIPHERAL DEVICE TYPE)
Тип периферийного устройства
1 7 RMB (removable media)
"0" = несъёмный носитель
"1" = съёмный носитель
6..0 Зарезервированы
2   VERSION of SPC standard
"5" = SPC-3
"4" = SPC-2
3 7..6 Выведены из употребления
5 "0" = no normal ACA
4 "0" = no hierarchical addressing support
3..0 response data format
Формат ответа. Должен быть равен "0x02"
4   ADDITIONAL LENGTH
Объём дополнительных данных ответа в байтах. Равен длине ответа минус 4. Для длины 36 следует устанавливать в "0x20" [* На самом деле, ещё на единицу меньше - для 36 байт, т.е. без блока дополнительных параметров, длина данных равна "0x1F"]
5 7 "0" = no embedded storage array controller component present
6 "0" = no access controls coordinator present
5..4 "0" = no support or vendor-specific support for asymmetric LUN access
3 "0" = no support for third-party copy commands
2..1 Зарезервированы
0 "0" = no support for protection information
6 7 "0" = no support for basic task management
6 "0" = no support for embedded enclosure services
5 VS (vendor specific)
4 "0" = device has a single port
3 "0" = no support for media changer
2..1 Выведены из употребления
0 Не используется с интерфейсом USB
7 7..6 Выведены из употребления
5..6 Не используются с интерфейсом USB
3 "0" = no support for linked commands
2 Выведен из употребления
1 "0" = no support for full task management
0 VS (vendor specific)
8..15   T10 VENDOR IDENTIFICATION, MSB first
Обозначение производителя. Выдаётся старшим байтом вперёд
16..31   PRODUCT IDENTIFICATION, MSB first
Обозначение изделия. Выдаётся старшим байтом вперёд
32..35   PRODUCT REVISION LEVEL, MSB first
Версия изделия. Выдаётся старшим байтом вперёд

Table 6-4. Некоторые типы периферийных устройств (Peripheral Device Types - PDT), определённых в спецификации SPC
 
PDT Тип периферийного устройства Спецификация
0x00 Блоковые устройства прямого доступа.
Магнитные и твёрдотельные диски.
SBC-2
0x05 CD/DVD MMC-4
0x07 Оптические устройства хранения (не CD диски) SBC
0x0E Блоковые устройства прямого доступа с сокращённым набором команд (Reduced block command - RBC) RBC
  1. Устройства могут использовать более поздние редакции спецификации.

Идентификационный номер производителя выдают в техническом комитете T10. Номер состоит из восьми или менее символов ASCII из диапазона 0x21..0x7E.

За первыми 36 байтами ответа на команду "INQUIRY" следуют необязательные поля, могущие включать области со специализированной информацией для нестандартных драйверов. Программное обеспечение устройства не должно предполагать, что хост всегда будет запрашивать именно 36 байт. Тринадцать вариантов развития событий, представленных в третьей части, объясняют необходимые шаги в случае наличия у устройства большего или меньшего количества данных, чем запрашивается хостом.

const rom InquiryResponse inq_resp = {
    0x00,               // direct access block device, connected
    0x80,               // device is removable
    0x04,               // SPC-2 compliance
    0x02,               // response data format
    0x20,               // response has 20h + 4 bytes
    0x00,               // additional fields, none set
    0x00,               // additional fields, none set
    0x00,               // additional fields, none set
    "Microchp",         // 8 -byte T10-assigned idVendor
    "Mass Storage   ",  // 16-byte product identification
    "0001"              // 4-byte product revision level
};

[* Freescale AN3927

	0x00;               // 00 device type
    0x80;               // 01 removable
    0x00;               // 02 SCSI 2 compatible
    0x02;               // 03 data format
    0x1F;               // 04 additional lenght=31
    0x00;               // 05
    0x00;               // 06
    0x00;               // 07
    'F','S','L',' ',' ','U','S','B',
    ' ','B','o','o','t','l','o','a',
    'd','e','r',' ',' ',' ',' ',' ',
    0x30;               // 32 '0'
    0x30;               // 33 '0'
    0x30;               // 34 '0'
    0x31;               // 35 '1'

]

[* Freescale DRM104

	0x00;               // 00 device type
    0x80;               // 01 removable
    0x00;               // 02 SCSI 2 compatible
    0x00;               // 03 data format
    0x1F;               // 04 additional lenght=31
    0x00;               // 05
    0x00;               // 06
    0x00;               // 07
    'J','M','6','0',' ','S','D',' ',
    'C','a','r','d',' ','R','e','a',
    'd','e','r';
    0x20;               // 27
    0x20;               // 28
    0x20;               // 29
    0x20;               // 30 ' '
    0x20;               // 31 ' '
    '1','.','0','0';

]

[* Silabs AN282

	Scsi_Standard_Inquiry_Data[36]= {
    0x00,               // Peripheral qualifier & device type
    0x80,               // Removable medium
    0x05,               // Version of the standard (5=SPC-3)
    0x02,               // No NormACA, No HiSup, data format=2
    0x1F,               // No extra parameters
    0x00,               // No flags
    0x80,               // Basic Task Management supported
    0x00,               // No flags
    'S','i','L','a','b','s',' ',' ',
    'M','a','s','s',' ',
    'S','t','o','r','a','g','e'
};

]

ПредпросмотрAttachmentSize
usb_msd_6.zip17.66 КБ