Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шины.PCI,.USB.и.FireWire

.pdf
Скачиваний:
59
Добавлен:
19.03.2016
Размер:
6 Mб
Скачать

Поле sbp_status содержит дополнительную информацию:

0 — нет дополнительной информации;

1 — недопустимый тип запроса;

2 — указанная скорость не поддерживается;

3 — указанный размер страницы не поддерживается;

4 — доступ запрещен;

5 — не поддерживается данное логическое устройство;

6 — слишком мал допустимый размер поля данных;

7 — слишком много каналов;

8 — ресурс недоступен;

9 — функция отвергнута (rejected);

Ah — нераспознанный идентификатор входа;

FFh — неопределенная ошибка.

Поля ORB_offset_hi и ORB_offset_lo определяют адрес блока запроса, к которо$ му относится завершение (при u = 1 поля игнорируются).

Содержательная часть блока состояния (поле command set-dependent) определя$ ется набором команд устройства. Длина блока состояния (в квадлетах) равна len + 1.

Форматы пакетов для изохронных передач

Формат пакетов, в которых изохронные данные записываются на носитель уст$ ройства, происходит от формата изохронного пакета (см. рис. 18.8 на стр. 359), пе$ редаваемого по шине. Поле tcode (тип транзакции) в пакетах на носителе исполь$ зуется как поле type для определения типа пакета:

NULL (type = 0), пакет$заполнитель (рис. 26.9, а). В заголовке этого пакета ис$ пользуется только поле длины data_length, значение которого должно быть кратно четырем (допускается и нулевая длина). Поле data может содержать любые значения, при воспроизведении данные пакета NULL игнорируются. Пакеты$заполнители могут использоваться для предотвращения переполнения или опустошения буферов;

CYCLE MARK (type = 1), маркер цикла (рис. 26.9, б). Этот пакет записывается на носитель, когда на каком$либо разрешенном канале обнаруживается пакет начала цикла. Поля cycle_count и second_count соответствуют одноименным полям последнего пакета начала цикла. Для воспроизведения изохронного по$ тока эти маркеры не требуются; их используют лишь для приложений, в кото$ рых требуется навигация по времени;

DATA (type = 2), пакет изохронных данных (рис. 26.9, в). Его формат совпадает с форматом пакета изохронных данных, передаваемого по шине, но в поле chan-

nel указывается внутренний номер канала (int_channel), в который преобра$ зуется номер шинного канала (ext_channel). Преобразование (отображение) номеров задается управляющей функцией CONFIGURE PLUG. При воспроиз$ ведении потока выполняется обратное преобразование номеров. Использова$ ние поля sy, предназначенного для синхронизации, стандартом SBP$2 не рег$ ламентируется. Поле tag определяет формат данных: 0 — неформатированные данные; 1 —общий формат CIP (см. ниже); 2, 3 — резерв. Данные могут иметь произвольную длину, определяемую полем data_length; при необходимости в последний квадлет добавляются нулевые байты$заполнители.

Рис. 26.9. Форматы изохронных пакетов SBP 2: а — пакет заполнитель; б — маркер цикла; в — пакет данных

Остальные типы (3–Fh) зарезервированы.

В пакете общего формата (CIP$пакете) поле данных, длина которого указана в за$ головке пакета, содержит один или несколько блоков прикладных данных (application data block), каждому из которых предшествует свой CIP заголовок (CIP header). Один или несколько блоков прикладных данных составляют исходный изохрон ный пакет (isochronous source packet) — объект верхнего уровня, несущий специ$ фичные прикладные данные.

CIP$заголовок представляет собой цепочку квадлетов, длина заголовка произ$ вольна, хотя первоначально определен формат только двухквадлетного за$ головка (рис. 26.10, а). Признаком конца заголовка является квадлет, у кото$ рого бит eoh=1. Следующий за ним квадлет является началом блока данных.

Формат каждого квадлета заголовка определяется парой старших бит (eoh и form). Назначение полей двухквадлетного CIP$заголовка:

поле sid (source ID) содержит физический идентификатор источника (PHY_ID), при воспроизведении в него заносится идентификатор узла, передающего дан$ ные в шину;

поле dbs (data block size) указывает размер блока данных в квадлетах (dbs = 0 соответствует 256 квадлетам);

поле fn (fraction number) задает число блоков, составляющих исходный пакет. Это число определяется как 2fn, при fn = 0 каждый блок данных представляет один исходный пакет;

поле qpc (quadlet padding count) определяет, сколько квадлетов$заполнителей добавлено к исходному пакету перед его делением на блоки;

бит s (sph, source packet header) является признаком начала исходного пакета. Если s = 1, то последующий блок данных начинается с квадлета$заголовка ис ходного пакета (Source packet header, рис. 26.10, б). В этом заголовке передает$ ся метка времени — поля cycle_count и cycle_offset, соответствующие 25 младшим битам регистра CYCLE TIME;

поле dbc (data block continuity counter) определяет последовательный номер блока данных в исходном пакете;

поле fmt определяет формат остальной части данного квадлета заголовка и формат прикладных данных в блоке. Для данных с кодами формата fmt = 0– 1Fh в заголовке присутствует метка времени syt (Synchronization time), состо$ ящая из полей cycle_count и cycle_offset (рис. 26.10, в), соответствующий 16 младшим битам регистра CYCLE TIME. Для данных с кодами формата fmt =

Рис. 26.10. Форматы CIP заголовков: а — двухквадлетный заголовок; б — заголовок исходного пакета; в — квадлет заголовка с меткой времени

20–3Eh формато$зависимая часть заголовка не определена. Значение fmt = 3Fh означает отсутствие прикладных данных и недействительность полей dbs, fn,

qpc, sph и dbc.

Формат сообщений об ошибках изохронных потоков

Сообщения о событиях, регистрируемых в журнале ошибок изохронных передач, имеют формат, приведенный на рис. 26.11. Поля second_count_hi, second_count и cycle_count представляют метку времени — цикл, во время которого произош$ ло событие. Поле stream_error раскрывает само событие:

0 — первый цикл с действительными изохронными данными после прерывания потока;

1 — начало прерывания потока из$за неизвестной ошибки;

2 — начало прерывания потока из$за невозможности приема или передачи дан$ ных целевым устройством;

3 — начало прерывания потока из$за пропуска пакета (только для принимаю$ щего устройства);

4 — начало прерывания потока из$за CRC$ошибки данных (только для прини$ мающего устройства);

5–FFh — резерв.

Рис. 26.11. Формат сообщения об ошибке изохронного потока

Описание блоков в памяти конфигурации

Каждый блок узла и его логические устройства описываются в памяти конфигура$ ции. В корневом каталоге памяти конфигурации имеется ссылка на каталог блока (Unit Directory). Каталог блока содержит элементы, перечисленные в табл. 26.1. Элементы, описывающие логическое устройство (command_set_spec_ID, command_

set_version, Logical_Unit_Characteristics, Logical_Unit_Number), присут$ ствуют в каталогах простых блоков (состоящих из одного логического устройства). Для сложных блоков, состоящих из нескольких логических устройств, создаются каталоги логических устройств (Logical Unit Directory). Каждый из этих катало$ гов содержат элементы command_set_spec_ID, command_set_version, Logical_ Unit_Characteristics, Logical_Unit_Number, описывающие логическое устрой$ ство.

Таблица 26.1. Элементы каталогов блока и логических устройств

Ключ

Назначение

12h

Unit_Spec_ID, идентификатор спецификации блока (00 609h — блок

 

поддерживает протокол SBP 2),

13h

Unit_SW_Version, идентификатор версии ПО (01 048h для протокола SBP 2)

38h

command_set_spec_ID, идентификатор спецификации системы команд блока,

 

назначается IEEE/RAC

39h

command_set_version, версия системы команд

54h

Management_Agent, смещение (в квадлетах) базового адреса управляющего

 

агента относительно адреса начального пространства регистров

3Bh

Logical_Unit_Characteristics, характеристики логического устройства

 

(рис. 26.12, а):

 

i (isochronous) — признак поддержки изохронных операций;

 

o (ordered) — упорядоченность асинхронных операций: 0 — порядок исполнения

 

команд произвольный, 1 — строгий;

 

q (queuing) — поддерживаемая модель управления заданиями: 0 — базовая,

 

1 — полная;

 

prot (sequrity protocol) — протокол безопасности: 0 — резервирование

 

логических устройств, 1 — пароль на носитель, 2 — резервирование носителя,

 

3 — резерв на будущее.

 

login_timeout — тайм аут выполнения (успешного или нет) процедуры входа

 

(в 0,5 секундных интервалах);

 

ORB_size — размер (в квадлетах) блока запроса, выбираемого целевым

 

устройством из памяти инициатора

D4h

Logical_Unit_Directory, относительное смещение каталога логического

 

устройства

14h

Logical_Unit_Number, описание логического устройства (рис. 26.12, б):

 

lun — логический номер устройства, к которому относится описание;

 

device_type — тип устройства (по SPC)

8Dh

Unit_Unique_ID, смещение уникального идентификатора блока (необязательный

 

элемент), формат идентификатора приведен на рис. 26.12, в.

Тело блока имеет длину 2 квадлета, что указано в его заголовке; оно защищено 16 битным полем CRC. Сам идентификатор состоит из идентификатора производителя узла (node_vendor_ID) и идентификатора блока (unit_ID_hi, unit_ID_lo)

Регистры агентов целевого устройства

Регистры агентов целевого устройства обеспечивают инициатору доступ к серви$ сам целевого устройства. Регистр управляющего агента обеспечивает подключе$ ние к сервисам (и отключение) и управление заданиями; регистры выбирающих агентов позволяют ставить задания в очереди на выполнение. Адрес регистра уп$ равляющего агента (MANAGEMENT_AGENT) инициатор узнает из элемента Management_Agent памяти конфигурации целевого устройства. Базовые адреса реги$ стров выбирающих агентов сообщаются инициатору по запросам входа (secure login

Рис. 26.12. Элементы каталогов блока и логических устройств: а — характеристики логического устройства; б — описание логического устройства; в — уникальный идентификатор блока

и isochronous login). Регистры агентов располагается в целевом устройстве по адре$ су FFFF F001 0000h или выше.

Регистр управляющего агента

Регистр управляющего агента целевого устройства MANAGEMENT_AGENT предназна$ чен для записи 64$битного адреса управляющего запроса. Эту запись выполняет инициатор в виде одной 8$байтной транзакции записи. Успешная запись в регистр приводит к тому, что управляющий агент целевого устройства считает управляю$ щий ORB из памяти инициатора (по указанному адресу) и исполнит его. Если агент оказался занят, то запись не удастся; инициатор об этом получит уведомле$ ние (в коде возврата) и должен будет повторить попытку позже. Неудавшиеся по$ пытки записи целевым устройством игнорируются.

Регистры выбирающих агентов

Регистры агентов, выбирающих командные запросы (нормальные и потоковые) и запросы управления потоками, располагаются по адресам FFFF F001 0000h или выше. Каждый выбирающий агент имеет следующие регистры:

AGENT_STATE (смещение 00), регистр состояния. Поле st (младшие 2 бита) оп$ ределяют текущее состояние агента:

0 — RESET, сброшен;

1 — ACTIVE, активен (выполняет запросы);

2 — SUSPENDED, приостановлен (последний запрос цепочки исполнен);

3 — DEAD, «умер» (прекращает выборку заданий);

AGENT_RESET (смещение 04), регистр сброса. Запись любого значения в регистр вызывает сброс агента;

CURRENT_ORB (смещение 08), адрес текущего ORB. Запись в регистр вызывает выборку ORB по указанному адресу (в состоянии DEAD запись игнорируется);

DOORBELL (смещение 10h), регистр сигнализации обновления списка запросов. Записью любого значения в регистр инициатор указывает агенту целевого уст$ ройство на обновление списка;

STATUS_ACKNOWLEDGE (смещение 14h), записью в этот регистр инициатор под$ тверждает прием неожиданного блока состояния.

Регистры со смещением 18h–1Ch зарезервированы на будущее.

Подключение

нестандартных периферийных устройств

В этой главе подразумевается знакомство читателя с организацией шин PCI, USB и FireWire, их особенностями, проблемами и путями их решения. Все эти вопросы достаточно подробно описаны в предыдущих главах книги, их можно найти по со$ держанию и предметному указателю. В этой главе рассматриваются общие вопро$ сы взаимодействия программного обеспечения с периферийными устройствами, интересующие разработчиков нестандартной (несистемной) периферии. В данном контексте нестандартными и несистемными устройствами будем называть те, ко$ торые привносят в компьютер новые полезные функции, не имеющие поддержки стандартными средствами операционных систем. Так, например, к системным ус$ тройствам относятся устройства хранения данных, коммуникационные устройства (сетевые адаптеры, модемы), принтеры, сканеры, клавиатура, указатели (мыши). Эти устройства могут использоваться любыми приложениями, для чего ОС пре$ доставляет стандартные сервисы, позволяющие приложениям абстрагироваться от конкретных устройств. К нестандартным устройствам можно отнести, напри$ мер, различные измерительные приборы и комплексы, устройства связи с техно$ логическим оборудованием и прочие устройства, выполняющие ввод$вывод ин$ формации в различных вариантах представления. Как правило, для использования этих устройств требуется специальное прикладное ПО и драйверы. Заметим, что драйверы устройств для современных ОС являются весьма сложными кон$ струкциями. При этом сложность написания драйвера обусловлена отнюдь не реализацией функций оперативного взаимодействия приложения и устрой$ ства — идеология организации транзакций в рассматриваемых шинах доста$ точно проста и понятна. Более сложной (и объемной) задачей является реа$ лизация вспомогательных функций, чтобы устройство со своим драйвером органично включилось в систему PnP, управления потреблением и прочие подсистемы современных ОС.

Выбор интерфейса

При разработке нестандартных устройств возникает вопрос выбора подходящего интерфейса подключения. Этот вопрос следует решать исходя из принципа ра$ зумной достаточности, по возможности отдавая предпочтение внешним интерфей$ сам. Следует помнить, что разработка аппаратной части устройства (hardware) тесно связана и с программной поддержкой устройств — как модулями ПО, ис$ полняемыми процессором компьютера (software), так и программами встроенного микроконтроллера (firmware), на базе которого, как правило, строятся все совре$ менные устройства. Промышленностью выпускается множество моделей микро$ контроллеров, имеющих популярные периферийные интерфейсы (USB, FireWire, RS$232, I2C и другие). Однако в ряде случаев приходится использовать и стандар$ тизованные шины расширения ввода/вывода (ISA, PCI). Эти шины предоставля$ ют более широкие возможности для взаимодействия процессора с аппаратурой, не скованные жесткими ограничениями внешних интерфейсов. Однако за универ$ сальность и производительность внутренних шин расширения приходится распла$ чиваться более замысловатой реализацией интерфейсных схем и сложностями при обеспечении совместимости с другим установленным в компьютер оборудовани$ ем. Здесь ошибки могут приводить к потере работоспособности компьютера (хо$ рошо, если временной). Недаром серьезные производители компьютеров гаранти$ руют работоспособность своих изделий только при установке сертифицированных (ими или независимыми лабораториями) карт расширения. При использовании внешних интерфейсов неприятности в случае ошибок чаще всего имеют отноше$ ние только к подключаемому устройству.

Существенным свойством при выборе интерфейса является возможность «горя$ чего» подключения/отключения или замены устройств (Hot Swap), причем в двух аспектах. Во$первых, это безопасность переключений «на ходу» как для самих ус$ тройств (их интерфейсных схем), так и для целостности хранящихся и передавае$ мых данных и, наконец, для человека. Во$вторых, это возможность использования вновь подключенных устройств без перезагрузки системы, а также продолжения устойчивой работы системы при отключении устройств. Далеко не все внешние интерфейсы поддерживают «горячее подключение» в полном объеме: так, напри$ мер, зачастую сканер с интерфейсом SCSI должен быть подключен к компьютеру и включен до загрузки ОС, иначе он не будет доступен системе. С новыми шинами USB и FireWire проблем «горячего подключения» не возникает. Для внутренних интерфейсов «горячее подключение» не свойственно. Это касается и шин расши$ рения, и модулей памяти, и даже большинства дисков ATA и SCSI. «Горячее под$ ключение» поддерживается для шин расширения промышленных и блокнотных компьютеров, а также в специальных конструкциях массивов устройств хранения.

ВНИМАНИЕ

Карты расширения, модули памяти и процессоры можно устанавливать и извле кать только при выключенном питании компьютера. Но выключения блока питания ATX основной кнопкой недостаточно, поскольку при этом на системной плате оста ется напряжение 3,3 В. Эти блоки должны обесточиваться по входу (посредством отсоединения питающего кабеля).

Все рассматриваемые в книге интерфейсы имеют достаточно сложные протоколы обмена. Для их аппаратной реализации ряд фирм выпускают специализирован$ ные микросхемы. При разработке собственного устройства (и, естественно, его про$ граммной поддержки) следует обратить внимание на принципиальное различие возможностей взаимодействия программ и устройств, которые предоставляет под$ ключение по шинам PCI, USB и FireWire.

Реализация интерфейса PCI

При рассмотрении шины PCI становится ясно, что разработка собственных PCI$ устройств на логике малой и средней степени интеграции (как это можно было сделать для шины ISA) — занятие неблагодарное. Собственно протокол шины не так уж и сложен, но реализация требований к конфигурационным регистрам про$ блематична. Серийные устройства PCI, как правило, являются однокристальны$ ми — в одной микросхеме размещается и интерфейсная, и функциональная части устройства. Разработка таких микросхем весьма дорогостояща и имеет смысл лишь с перспективами массового выпуска. Для создания отладочных образцов и мелко$ серийных изделий ряд фирм выпускают интерфейсные микросхемы PCI различ$ ного назначения. Довольно широкий выбор микросхем представлен на сайтах www.ti.com, www.plxtech.com, этой темой занимаются и иные фирмы. Со стороны PCI практически все эти микросхемы поддерживают одиночные целевые транзак$ ции (target transactions), более совершенные модели допускают и пакетные цик$ лы. Более сложные микросхемы выполняют и функции ведущего устройства шины, организуя каналы DMA для обмена с системной памятью. Обмены по этим кана$ лам могут инициироваться как программно со стороны хоста (host initiated DMA), так и с периферийной стороны микросхемы (target initiated DMA), в зависимости от возможностей микросхем. С периферийной стороны встречаются интерфейсы для подключения периферийных микросхем, микроконтроллеров и распростра$ ненных семейств микропроцессоров, универсальных и сигнальных. Отметим, что реализовать потенциально высокую скорость обмена по PCI возможно только в ре$ жиме прямого управления шиной (bus mastering), организуя длинные пакетные обмены с памятью.

Интересно решение построения интерфейса PCI на конфигурируемой логике FPGA (Field Programmable Gate Array — программируемый массив вентилей). Здесь PCI$ядро, а также функции целевого и ведущего устройств занимают 10– 15 тысяч вентилей в зависимости от требуемых функций (см. www.xilink.com, www. altera.com). Микросхемы FPGA выпускаются на 20, 30 и 40 тысяч вентилей — ос$ тавшаяся часть может быть использована для реализации функциональной части устройства, буферов FIFO и т. п.

Быстро перевести старые разработки для шины ISA на PCI можно с помощью мик$ росхем$мостов PCI$ISA (см., например, www.iss us.com).

Подключение устройства к шине PCI/PCI$X позволяет организовать для устрой$ ства программное управление в реальном времени (по отношению к исполняемому программному коду). Обращением к регистрам устройства можно организовывать