Описание сообщений и управление интерфейсом

в начало

Для управления интерфейсом служит система сообщений - Message System, которыми обмениваются ИУ и ЦУ. Обмен происходит в фазах Message IN/OUT (см. выше), в одной фазе может передаваться несколько сообщений. Одно сообщение не может расщепляться на несколько фаз. Форматы сообщений стандартизованы; каждое сообщение начинается с кода. Существуют однобайтные (коды 00h, 02h-1Fh, 80h-FFh), двухбайтные (коды 20h-2Fh) и расширенные сообщения (код 0lh). В двухбайтном сообщении второй байт является аргументом сообщения. В расширенных сообщениях второй байт задает длину, а последующие байты несут код и аргументы сообщения. Коды сообщений приведены в таблице 3.12.

 

Таблица 3.12. Сообщения шины SCSI

Код Направление Сообщение Назначение
00h In Command Complete Процесс ввода/вывода завершен, информация о состоянии послана в сообщении Status
02h In Save Data Pointer Сохранение указателя данных
03h In Restore Pointers Восстановление указателей.
04h In Disconnect Текущее соединение разрывается, но для продолжения процесса потребуется повторное соединение (не вызывает сохранения текущих указателей)
04h Out Disconnect Инструкция ЦУ на разрыв соединения
05h Out Initiator Detected Error ИУ обнаружило ошибку нашине
06h Out Abort Сброс всех процессов, связанных с данной парой I_T, и освобождение шины
07h In/Out Message Reject Сообщение (или его параметры) недействительны для получателя
08h Out No Operation ИУ нечего ответить на запрос сообщения
09h Out Message Parity Error Последний байт сообщения принят с неверным паритетом
0Ah In Linked Command Complete Цепочка команд завершена. ИУ может инициализировать указатели для новой цепочки
0Bh In Linked Command Complete (With Flag) То же, но ИУ между цепочками команд вызывает прерывание в хост-системе
0Ch Out Bus Device Reset Аппаратный сброс ЦУ и освобождение шины
0Dh Out Abort Tag Сброс текущего процесса, связанного с данной парой I_T, и освобождение шины
0Eh Out Clear Queue Сброс всех процессов и освобождение тины (эквивалентно серии сообщений Abort, принятых от всех ИУ)
0Fh In/Out Initiate Recovery Сообщение для уведомления об асинхронных событиях (ЦУ временно становится ИУ)
10h Out Release Recovery Завершение обработки асинхронных событий
11h Out Terminate I/O Process Принудительное завершение текущего процесса безлогического повреждения носителя у ЦУ
12h- 1F, 30h-7Fh Зарезервированы для 1-байтных сообщений
80h -FFh Out Identify Установление связи типа I_Т_L или I_Т_R
80h -FFh In Identify Восстановление связи типа I_T_L или I_T_R при повторном соединении. Вызывает восстановление сохраненных указателей
2-байтные сообщения
20h In Simple Queue Tag Процесс помещен в очередь, аргумент - тег (00h-FFh)
20h Out Simple Queue Tag Обращение к конкретному процессу маркированной очереди, аргумент - тег (00h-FFh)
21h Out Head Of Queue Tag Помещение процесса в начало маркированной очереди для данного LUN, аргумент - тег(00h-FFh)
22h Out Ordered Queue Tag Помещение процесса в конец маркированной очереди для данного LUN, аргумент - тег (00h-FFh)
23h In Ignore Wide Residue Последние байты последнего переданного слова недействительны (аргумент см. в таблице 3.13)
24h-2Fh Зарезервированы для 2-байтных сообщений
Расширенные сообщения. Первый байт - 0lh, в поле "код" первым байтом указана длина, вторым - расширенный код
05h, 00h In Modify Data Pointer Запрос модификации указателя данных - суммирование текущего указателя с 4-байтным аргументом сообщения
03h, 0lh In/Out Synchronous Data Transfer Request Параметры синхронного режима обмена, 1-й байт аргумента определяет периодпосылки, 2-й - допустимое смещение REQ/ACK
02h, 03h In/Out Wide Data Transfer Request Разрядность передач в фазах данных. Аргумент задает число байт: 0 -1 байт, 1 - 2 байта, 2 - 4 байта

 

Таблица 3.13. Игнорирование лишних данных

Значение 2-го байта Игнорировать биты данных при разрядности обмена
32 бит 16 бит
0lh DB[31:24] DB[15:8]
02h DB[31:16] Зарезервировано
03h DB[31:8] Зарезервировано
00h, 04h - FFh Зарезервировано Зарезервировано

 

В SCSI-2 для установления связи процесса с конкретным логическим устройством I_T_L (lnitiator_Target_LUN) или с конкретной целевой программой I_T_R (lnitiator_Target_TRN), а также предоставления права разрыва соединения служат сообщения Identify. В байте их кодов биты [2:0] в зависимости от бита 5 LUNTAR задают номер LUN (LUNTAR=0) или TRN (LUNTAR=1). Каждый процесс может быть адресован только одному LUN или TRN. Если ЦУ во время выполнения процесса обнаружит сообщение с иным адресом связи, оно обязано освободить шину (ситуация неожиданного разрыва). Единичным значением бита 6 DiscPriv при передаче сообщения ИУ наделяет ЦУ правом разрыва соединения.

ИУ может проинструктировать ЦУ на разрыв соединения, послав ему сообщение Disconnect. Получив сообщение, ЦУ посылает одноименное сообщение (предварительно ЦУ может потребовать сохранения указателя данных, послав сообщение Save Data Pointer) и освобождает шину. Если ЦУ не поддерживает эту возможность, оно отвечает сообщением Message Reject. Когда процесс, продолжающийся в устройстве, потребует передачи данных, через фазу арбитража ЦУ обратится к ИУ за продолжением обмена.

С помощью сообщений согласуются параметры синхронного режима и разрядность данных. Процесс согласования синхронного обмена называется Synchronous Negotiation. Устройство, запрашивающее синхронный обмен, посылает сообщение Synchronous Data Transfer Request с указанием допустимого периода цикла и отставания REQ/ACK. Если другой участник обмена поддерживает синхронный режим, он предложит свои параметры. Согласованными параметрами будут максимальный период и минимальное отставание (нулевое отставание эквивалентно асинхронному режиму). Выбранный режим будет относиться только к фазам передачи между данной парой устройств. Отвергнутое сообщение является требованием асинхронного режима. Поскольку старые хост-адаптеры не поддерживали согласование синхронного режима, на ЦУ запрос синхронного режима может быть заблокирован. О возможности работы в синхронном режиме хост может узнать, послав команды Request Sense и Inquiry.

Разрядность передач согласуется аналогично посредством сообщений Wide Data Transfer Request. Согласованные режимы будут действовать до сброса устройств по сообщению Bus Device Reset или "жесткого" сброса, что приведет к установке предопределенных режимов по включению. Согласование режимов не должно инициироваться в каждом процессе, поскольку затраты времени на эту процедуру сведут на нет выигрыш в производительности.