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