Введение	Описание команд
Описание сигналов	Типы ПУ
Описание сообщений	Конфигурирование устройств SCSI

Описание сообщений

Управление интерфейсом
Сообщения шины SCSI
Игнорирование лишних данных

Управление интерфейсом

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

Таблица 1.4 Сообщения шины 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	Последние байты последнего переданного слова недействительны (аргумент см. в табл. 1.5)
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 байта

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

Значение 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 или "жесткого" сброса, что приведет к установке предопределенных режимов по включению. Согласование режимов не должно инициироваться в каждом процессе, поскольку затраты времени на эту процедуру сведут на нет выигрыш в производительности.