Skip to Content

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


Какие команды следует реализовывать ?

У многих проектировщиков возникает вопрос о том какие команды SCSI следует реализовывать. Каждое устройство обозначает свой набор [* из числа имеющихся стандартных наборов] в ответе на SCSI-команду "INQUIRY", при этом спецификация для указанного набора перечисляет обязательные к исполнению команды. Например, устройство, сообщающее, что его тип - "блоковое устройство прямого доступа" (поле "PDT" равно "0x00") и "версия 05" (поле "VERSION" равно "0x05"), что соответствует спецификации "SPC-3", должно реализовать все команды, объявленные обязательными в спецификации "SPC-3" и все команды, объявленные обязательными в спецификации блоковых команд SCSI ("SBC-2" или "SBC-3"). В таблице 6-1 показаны все обязательные и некоторые опциональные блоковые команды SCSI. В реальной жизни далеко не все устройства реализуют обязательный набор команд целиком.


Таблица 6-1. Обязательные и некоторые опциональные SCSI команды для USB накопителей данных, соответствующих спецификации SBC-2 или SBC-3
 
Command Code Required? Document CY4640 AN3927 DRM104 AN282
TEST UNIT READY 0x00 yes SPC + + + +
REQUEST SENSE 0x03 yes SPC + + +  
FORMAT UNIT 0x04 yes SBC        
READ(6) 0x08 yes 2 SBC        
WRITE(6) 0x0A yes 2 SBC        
INQUIRY 0x12 yes SPC + + + +
MODE SELECT(6) 0x15 no SPC        
MODE SENSE(6) 0x1A no SPC   + + +
START STOP UNIT 0x1B no SBC +     +
SEND DIAGNOSTIC 0x1D yes SPC        
PREVENT ALLOW MEDIUM REMOVAL 0x1E no SPC       +
EAD FORMAT CAPACITIESR 0x23 no MMC     +  
READ CAPACITY(10) 0x25 yes SBC + + + +
READ(10) 0x28 yes SBC + + + +
WRITE(10) 0x2A no SBC + + + +
VERIFY(10) 0x2F no SBC       +
SYNCHRONIZE CACHE(10) 0x35 no SBC        
READ TOC/PMA/ATIP 0x43 no MMC        
MODE SELECT(10) 0x55 no SPC +      
MODE SENSE(10) 0x5A no 1 SPC +      
REPORT LUNS 0xA0 yes (SPC-3) SPC        
READ(12) 0xA8 no SBC        
WRITE(12) 0xAA no SBC        
  1. Обязательны для некоторых типов загрузочных устройств.
  2. Проектировщики периферийных устройств должны переходить на "READ(10)" и "WRITE(10)".

USB-IF разрабатывает спецификацию для тестирования на соответствие USB-классу накопителей данных (USB Mass Storage Class Compliance Test Specification), которая перечисляет требуемые и опциональные SCSI и мультимедийные команды для различных типов периферийных устройств. В момент написания этого текста спецификация была доступна в виде предварительной версии. В таком же предварительном варианте доступно приложение "Тестер команд" (Command Verifier software - USBCV), содержащее тесты на совместимость для накопителей данных. За последними версиями следует обращаться по адресу "www.usb.org".

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

На самом деле, для начала взаимодействия с хостом устройство должно поддерживать как минимум следующие команды SCSI:

  • INQUIRY
  • READ CAPACITY(10)
  • READ(10)
  • REQUEST SENSE
  • TEST UNIT READY
  • WRITE(10) (для записываемых устройств)

Впрочем, какой-либо конкретный хост или устройство, вероятно, потребуют расширить этот набор. Если устройство заявляет о реализации набора команд, со стороны хоста будет разумно предполагать, что все команды указанного набора, помеченные как обязательные, устройством поддерживаются.

В случае получения неизвестной команды устройство не должно "зависать" или аварийно завершать работу. Правильный ответ на неподдерживаемую команду выглядит так:

  • возвратить значение "0x01" (ошибка выполнения) в поле "bCSWStatus" (CSW);
  • установить в блоке пояснительных данных ("SENSE DATA") параметр "SENSE KEY" в "0x05" ("Недопустимый запрос" - "ILLEGAL REQUEST"), а параметр "ADDITIONAL SENSE CODE" в "0x20" ("Неверный код операции" - "INVALID COMMAND OPERATION CODE").

Эта процедура поясняется в следующем параграфе.

ПредпросмотрВложениеРазмер
usb_msd_6.zip17.66 КБ