USB MSD. Часть 6. Команды SCSI (перевод)
- переводы |
- USB |
- MSD |
- Mass Storage Device |
- AN3927
Базовые команды
Все перечисленные ниже команды описываются в спецификации "Базовые команды 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"), что многие устройства и делают.
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 Версия изделия. Выдаётся старшим байтом вперёд |
PDT | Тип периферийного устройства | Спецификация |
0x00 |
Блоковые устройства прямого доступа. Магнитные и твёрдотельные диски. |
SBC-2 |
0x05 | CD/DVD | MMC-4 |
0x07 | Оптические устройства хранения (не CD диски) | SBC |
0x0E | Блоковые устройства прямого доступа с сокращённым набором команд (Reduced block command - RBC) | RBC |
- Устройства могут использовать более поздние редакции спецификации.
Идентификационный номер производителя выдают в техническом комитете 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' };
]
- блог пользователя teap0t
- 177312 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика 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 лет 45 недель назад
5 лет 46 недель назад
6 лет 2 недели назад
6 лет 26 недель назад
6 лет 28 недель назад
6 лет 31 неделя назад
6 лет 42 недели назад
7 лет 21 неделя назад