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


Обработка команд и событий

Приняв команду, программное обеспечение устройства должно её декодировать и подготовить адекватный ответ.


Состояние UNIT ATTENTION

Когда происходит событие о котором хост должен знать перед обращением к носителю, устройство должно сформировать состояние "UNIT ATTENTION". Обстоятельства, требующие состояния "UNIT ATTENTION", включают изменение данных структуры "INQUIRY", подключение съёмного носителя и сброс устройства или логического накопителя.

В состоянии "UNIT ATTENTION" устройство должно отвергать все команды за исключением "INQUIRY", "REPORT LUNS" и "REQUEST SENSE". Приняв любую другую команду, устройство должно возвратить значение "0x01" ("Ошибка исполнения") в поле "bCSWStatus" (CSW), после чего хост сделает запрос "REQUEST SENSE", чтобы получить информацию о состоянии.

В процессе подготовки к ответу на команду "REQUEST SENSE" устройство присваивает полю "SENSE KEY" значение "0x06" ("UNIT ATTENTION") и инициализирует поля "ADDITIONAL SENSE CODE" и "ADDITIONAL SENSE CODE QUALIFIER" значениями, поясняющими причину смены состояния. Устройство выходит из состояния "UNIT ATTENTION" сразу после передачи хосту поясняющей информации.


Оповещение хоста о смене носителя

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

Для оповещения хоста о появлении съёмного носителя устройство должно перейти в состояние "UNIT ATTENTION" и присвоить полю "ADDITIONAL SENSE CODE" значение "0x28", а полю "ADDITIONAL SENSE CODE QUALIFIER" - "0x00", определённые в спецификации для блоковых устройств (SPC) как "NOT READY TO READY CHANGE, MEDIUM MAY HAVE CHANGED" ("Переход из состояния "не готов" в состояние "готов", возможна смена носителя").

По приёме команды, обращающейся к отсутствующему носителю, устройство должно присвоить полю "SENSE KEY" значение "0x02" (NOT READY), полю "ADDITIONAL SENSE CODE" значение "0x3A", а "ADDITIONAL SENSE CODE QUALIFIER" - "0x00", определённых в спецификации SPC как "MEDIUM NOT PRESENT" ("Носитель отсутствует").

После сообщения "MEDIUM NOT PRESENT" хост может делать циклический запрос "TEST UNIT READY" для обнаружения момента появления носителя. После сообщения о смене носителя хост может запросить его параметры.

Аналогично, если самому устройству необходимо получить доступ к содержимому собственного диска (напрямую, а не через USB хост), оно должно уведомить хост обо всех внесённых в содержимое диска изменениях. Сделать это можно через состояние "UNIT ATTENTION", как было описано выше. Другим вариантом является разрешение на доступ к собственному носителю только в отключенном от шины USB состоянии. Например, регистрирующее устройство может собирать и записывать данные в полевых условиях. По возвращении устройство подключается к шине USB, процесс сбора данных прекращается, а вместо него начинается выполнение команд хоста. Выяснить возможность самостоятельной работы с носителем устройство может по наличию напряжения "VBUS" или успешному завершению процедуры опознания хостом.

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