USB MSD. Часть 6. Команды SCSI (перевод)
- переводы |
- USB |
- MSD |
- Mass Storage Device |
- AN3927
Какие команды следует реализовывать ?
У многих проектировщиков возникает вопрос о том какие команды SCSI следует реализовывать. Каждое устройство обозначает свой набор [* из числа имеющихся стандартных наборов] в ответе на SCSI-команду "INQUIRY", при этом спецификация для указанного набора перечисляет обязательные к исполнению команды. Например, устройство, сообщающее, что его тип - "блоковое устройство прямого доступа" (поле "PDT" равно "0x00") и "версия 05" (поле "VERSION" равно "0x05"), что соответствует спецификации "SPC-3", должно реализовать все команды, объявленные обязательными в спецификации "SPC-3" и все команды, объявленные обязательными в спецификации блоковых команд SCSI ("SBC-2" или "SBC-3"). В таблице 6-1 показаны все обязательные и некоторые опциональные блоковые команды SCSI. В реальной жизни далеко не все устройства реализуют обязательный набор команд целиком.
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 |
- Обязательны для некоторых типов загрузочных устройств.
- Проектировщики периферийных устройств должны переходить на "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").
Эта процедура поясняется в следующем параграфе.
- блог пользователя teap0t
- 192965 просмотров
Новые записи в блогах
- Устранение дребезга контактов на основе вертикальных счетчиков
- Диагностика 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
7 лет 43 недели назад
8 лет 6 недель назад
8 лет 16 недель назад
8 лет 18 недель назад
8 лет 26 недель назад
8 лет 50 недель назад
8 лет 51 неделя назад
9 лет 2 недели назад
9 лет 13 недель назад
9 лет 45 недель назад