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


Выбрать режим (MODE SELECT)

Хост может использовать команду "MODE SELECT" для указания параметров, относящихся к носителю, логическому накопителю или собственно устройству. Параметры располагаются в структурах, называемых блочными описателями и страницами режима. Имеются две команды, различающиеся длиной и форматом заголовка, предваряющего передаваемые данные. Команда "MODE SELECT(6)" имеет 4-х байтовый заголовок, а "MODE SELECT(10)" - 8-байтовый. Поддержка этих команд опциональна, за исключением случаев использования устройством команды "MODE SENSE", описанной ниже.

Страница режима за номером "0x08" - это страница режима кэширования. Драйвер накопителей данных операционной системы Windows пытается прочитать эту страницу и, если она поддерживается, переводит страницу в режим запрета кэширования. Исключением является ситуация, при которой пользователь выбирает для диска режим оптимизации по производительности (Device Manager > Properties > Policies > optimize for performance).


Сообщить режим (MODE SENSE)

Команда "MODE SENSE" дополняет команду "MODE SELECT". Хост может посылать "MODE SENSE" для выяснения параметров, относящихся к носителю, логическому накопителю или собственно устройству. Как и в случае с командой "MODE SELECT", имеется две команды, различающиеся длиной и форматом заголовка, предваряющего возвращаемые данные. В команде "MODE SENSE(6)" заголовок занимает 4 байта, а в "MODE SENSE(10)" - 8 байт.

Спецификация SPC говорит, что устройство, использующее команду "MODE SENSE" должно также поддерживать соответствующую команду "MODE SELECT", и, наоборот, устройство, использующее "MODE SELECT", должно поддерживать парную ей "MODE SENSE". Команда "MODE SENSE" опциональна для многих SBC устройств, но операционная система Windows и другие хосты её используют. Загрузочные устройства обязаны поддерживать команду "MODE SENSE(10)".

Каждый командный блок MODE SENSE содержит коды страницы и подстраницы, которые вместе конкретизируют запрашиваемые хостом данные. Спецификация SBC определяет семейство страниц, определяющих режим работы. Если поле "SUBPAGE CODE" равно "0x00", страница режима использует формат "page_0", который включает поля кода страницы, длины страницы и параметров режима. При других значениях поля "SUBPAGE CODE" к формату "page_0" добавляются поля, характерные для данной подстраницы.

При обмене с блоковыми устройствами прямого доступа (PDT = "0x00") драйвер накопителей данных операционной системы Windows обычно запрашивает следующие страницы режима:

PAGE CODE = "0x3F"
список всех поддерживаемых страниц.
PAGE CODE = "0x1C"
информационное сопровождение исключений. Содержит сведения о том, как устройство сообщает о специфичных для данного производителя исключениях и результатах самотестирования устройства, выполняющихся в фоновом режиме (то есть без загрузки шины).
PAGE CODE = "0x08"
режим кэширования. Определяет параметры, относящиеся к способу использования кэша устройством.
PAGE CODE = "0x05"
режимы гибких дисков (FDMP). Содержит параметры, используемые при преобразованиях режимов адресации LBA и CHS. Некоторые хосты отказываются загружать операционную систему с устройств, у которых данная страница отсутствует. Наверное, потому, что загрузчик использует CHS адресацию. Спецификация, определяющая параметры загрузочных USB носителей, требует поддержки этой страницы во всех устройствах, имеющих значение PDT отличное от "0x05" (CD/DVD приводы) и декларирующих возможность загрузки. Указанный документ переопределяет страницу "0x05", как упрощённую версию страницы из спецификации SBC. (Отметим, что, начиная с версии SBC-2, эта страница отмечена, как выведенная из употребления, но USB версия остаётся обязательной для загрузочных USB устройств).

Ответ на команду "MODE SENSE" начинается с заголовка параметров (см. таблицу 6-5). Отметим, что бит "WP" сообщает о защите носителя от записи.

Вслед за заголовком блоковое устройство (SBC) может отправить описатель параметров режима, сообщающий ёмкость раздела в логических блоках и размер каждого блока. Ответ может также содержать одну и более страниц режима, включая подстраницы.

Получив команду "MODE SENSE" для неподдерживаемой страницы конфигурации, устройство должно прекратить выполнение команды и присвоить полю "SENSE KEY" значение "ILLEGAL REQUEST", а полю "ADDITIONAL SENSE CODE" - "INVALID FIELD IN COMMAND PACKET". Некоторые устройства, у которых нет данных для передачи, передают только заголовок. В ответ на команду "MODE SENSE(6)" такие устройства возвращают заголовок с полем "MODE DATA LENGTH" равным "3", а полем "BLOCK DESCRIPTER LENGTH" равным "0".


Table 6-5. Заголовок ответа на команду "MODE SENSE(6)"
 
Byte Bit Description
0   MODE DATA LENGTH
Длина блока данных в байтах
1   MEDIUM TYPE
Тип носителя. Для SBC устройств равно "0x00"
2 7 WP
Устанавливается в "1" если носитель защищён от записи
6..5 Зарезервированы
4 Устанавливается в "1" если устройство поддерживает биты "DPO" и "FUA"б используемые при кэшировании
3..0 Зарезервированы
3   BLOCK DESCRIPTOR LENGTH
Длина всех блоковых описателей из списка параметров режима в байтах
msd_buffer[0] = 0x03; // The number of bytes that follow.
    msd_buffer[1] = 0x00; // The media type is SBC.
    msd_buffer[2] = 0x00; // Not write-protected, no cache-control-bit support.
    msd_buffer[3] = 0x00; // No mode-parameter block descriptors.

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