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

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

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

CRC — контрольный код;

generation_number — номер генерации карты (увеличивается с каждой ее мо$ дификацией);

node_count — число узлов сети;

self_id_count — число пакетов самоидентификации в карте (может быть боль$ ше числа узлов, поскольку некоторые узлы могут посылать и по несколько па$ кетов самоидентификации;

self_id_packet[i] — собственно пакеты самоидентификации (см. главу 23).

Рис. 21.2. Формат карты топологии

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

вкоторой каждой паре узлов с идентификаторами m и n соответствует байт кода скорости (speed_code). Младшие 3 бита этого байта соответствует коду скорости

вформате поля xspd пакета самоидентификации. Фактически карта — это после$ довательность байтов speed_code[i], где I = 64×m + n. Формат карты скоростей при$ веден на рис. 21.3, ее заголовок аналогичен заголовку карты топологии. Доступ к карте скоростей выполняется аналогично карте топологий, с проверкой поля дли$ ны до и после обращения.

Рис. 21.3. Формат карты скоростей

Сервисы управления шиной

Прикладные драйверы на каждом узле предоставляют специальный интерфейс управления шиной (Bus Management Interface), который взаимодействует с «уров$

нем» управления последовательной шиной (Serial Bus Management Layer). Этот «уровень» проходит по всем этажам архитектуры (рис. 17.4). Он включает:

контроллер узла, управляющий уровнями PHY и LINK;

мастер циклов;

диспетчер изохронных ресурсов;

диспетчер шины.

Взаимодействие происходит через сервисы управления последовательной шиной

(Serial Bus Management Services) при помощи:

запросов управления шиной — SB_CONTROL.request;

подтверждений запросов — SB_CONTROL.confirmation, сообщающих результа$ ты их выполнения;

индикаторов событий шины, происходящих неожиданно для данного узла, —

SB_EVENT.indication.

Запросы и подтверждения сервисов управления

Для функций управления и определения состояния предусмотрен ряд запросов, (SB_CONTROL.request), перечисленных ниже. На все запросы уровень управле$ ния отвечает подтверждениями (SB_CONTROL.confirmation), указывающими на успех или неудачу выполнения запроса. Сервисы управления включают следую$ щие запросы:

сброс шины (Bus Reset) — указание своему PHY подать сигнал сброса и реини$ циализироваться самому; LINK и уровень транзакций отбрасывают все ожида$ ющие транзакции и субакции;

инициализация узла — LINK и уровень транзакций данного узла отбрасывают все ожидающие транзакции и субакции и становятся готовыми к работе;

включение LINK$уровня заданного узла. Этот запрос предоставляет только диспетчер шины и диспетчер изохронных ресурсов;

конфигурирование физического уровня шины, предоставляют только диспет$ чер шины и диспетчер изохронных ресурсов:

принудительное назначение роли корня (Set Root Force) — установка бита RHB в указанном узле и сброс во всех остальных;

установка зазора арбитража (Set Gap Count);

посылка расширенных пакетов физического конфигурирования — пробных пакетов ping, удаленного доступа к регистрам PHY, пакета resume;

Опрос состояния (Present Status), по которому в подтверждениях (SB_CONTROL confirmation) сообщается следующая информация:

идентификатор корневого узла (3Fh — корневой узел не является мастером циклов);

идентификатор (физический адрес) данного узла (0…3Eh);

состояние бита RHB, обеспечивающего победу данному узлу в состязаниях на роль корня;

текущее значение зазора арбитража (gap_cnt);

идентификатор диспетчера шины (3Fh — нет диспетчера);

идентификатор диспетчера изохронных ресурсов (3Fh — нет диспетчера);

идентификатор мастера циклов (3Fh — нет мастера);

значение, которое можно вычесть из содержимого регистра BANDWIDTH_ AVAILABLE при перераспределении полосы между изохронным и асинхрон$ ным трафиком.

Последние четыре параметра доступны только у узла, являющегося диспетчером шины или диспетчером изохронных ресурсов.

Индикация событий управления шиной

Локальное приложение узла получает следующие сообщения об особых событи$ ях, происходящих на шине и в данном узле:

нарушение соглашений о времени занятия шины (регистр MAX_BUS_OCCUPANCY, переименованный в MAX_DATA_TIME в IEEE 1394a);

начало сброса шины;

завершение сброса шины (выполнен сброс, идентификация дерева и самоиден$ тификация всех узлов). При этом сообщается ряд параметров и признаков:

идентификаторы данного узла, корня, мастера циклов, диспетчеров шины и изохронных ресурсов;

ошибки тайм$аута конфигурирования, топологии, самоидентификации, оп$ ределения зазора, перегрузки питания;

значение зазора арбитража;

значение остатка полосы (bandwidth set$aside);

слишком длинный цикл (только для диспетчеров);

понижение питания в кабеле (ниже 7,5 В);

обнаружение дублирования номеров изохронных каналов;

обнаружение ошибки CRC$кода заголовка;

обнаружение ошибки CRC$кода данных;

отсутствие квитанции на переданный пакет ответа;

получение квитанции с указанием на ошибку данных в пакете ответа;

ошибка формата ответа (получен пакет квитирования с указанием неверного типа ответа);

ошибка повтора ответа (исчерпан предел повторов или ожидания);

обнаружен неожиданный канал (диспетчер изохронных ресурсов услышал па$ кет не выделенного им канала);

обнаружен неизвестный код транзакции (не поддерживаемой данным узлом);

обнаружен приход ответа, не ожидаемого данным узлом (проверяется по метке транзакции).

Управление энергопотреблением

Возможность питания устройств от кабельной шины требует управления энерго$ потреблением узлов. В минимальном варианте, заложенном в изначальной специ$ фикации, управление сводится к простому подсчету баланса мощности на основе классов питания узлов и включением LINK$уровня по команде от диспетчера. В IEEE 1394a управление было усовершенствовано, в частности:

появилась возможность приостановки и возобновления работы узлов (suspend

и resume);

появилась возможность управлять уровнем потребления узлов и блоков;

расширились возможности расчета баланса мощности с учетом батарейного питания и уровней питания узлов и блоков.

Эти новые возможности потребовали введения дополнительных регистров CSR и элементов в памяти конфигурации.

В дополнении IEEE 1394b введено новое энергосберегающее состояние порта и уз$ ла — Standby, в котором PHY не обеспечивает взаимодействия своего узла с ши$ ной (см. главу 22).

Приостановка и возобновление (Suspend и Resume)

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

Приостановка по команде Suspend

Команда Suspend приводит к разделению шины на два фрагмента (домена): актив$ ный и приостановленный. Инициатор этой приостановки всегда остается в актив$ ном домене.

Команда Suspend принимается от удаленного узла с помощью расширенного фи$ зического пакета или от собственного LINK$уровня. В команде указывается иден$ тификатор узла и номер его приостанавливаемого порта. В ответ на эту команду целевой узел приостановки посылает пакет подтверждения. Получив подтверж$ дение команды приостановки, инициатор приостановки посылает сигнал TX_ SUSPEND на тот порт, откуда пришло подтверждение. На остальные порты через

короткий зазор узел посылает префикс данных, а за ним — короткий сигнал сброса шины. Это приводит к реконфигурированию активной части шины.

Получив сигнал приостановки RX_SUSPEND на одном из своих портов, целевой узел (которому посылали команду) прекращает подачу смещения (TpBias, см. гла$ ву 22) на этот порт. На все свои остальные порты этот узел посылает сигнал TX_ SUSPEND, инициируя приостановку и их партнеров. Таким образом, приостанов$ ка распространится на все порты и узлы шины, которые связаны с инициатором приостановки через приостанавливаемый порт.

Узел, обнаруживающий пропадание смещения, также прекращает подачу смеще$ ния на этот порт, что завершает согласование приостановки. С этого момента в приостановленных портах остаются работать только детекторы отключения (см. главу 22).

Приостановка по команде запрета порта

Команда запрета порта (локальная или удаленная) переводит в приостановленное состояние только указанный порт и его партнера. Таким образом, в результате шина может оказаться разбитой на два не связанных между собой активных домена.

Получив пакет с командой запрета порта (Disable Port), узел посылает во все пор$ ты, кроме запрещенного, пакет подтверждения, а за ним — короткий сигнал сбро$ са. На запрещенный порт узел посылает сигнал TX_DISABLE_NOTIFY. Его парт$ нер, приняв сигнал RX_DISABLE_NOTIFY, посылает на остальные порты префикс данных, а за ним — короткий сброс. Этот порт переводится в приостановленное состояние (снятием смещения, на что ответом будет снятие смещения и у запре$ щенного порта).

Возобновление нормальной работы

Возобновление работы порта может инициироваться несколькими способами:

по приему пакета RESUME, который может быть послан широковещательно (или направленно) от узла, находящегося в активном домене шины. Этот пакет вос$ принимается и отрабатывается узлами активного домена, у которых имеются приостановленные порты. Все эти порты переводятся в активное состояние;

по приему командного пакета с командой Resume Port, с указанием ранее приос$ тановленного или запрещенного порта. Адресованный узел подает на указан$ ный порт смещение, что приведет к возобновлению работы всего приостанов$ ленного домена (или возобновит работу запрещенного порта);

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

Уровни потребления узла и блоков

В IEEE 1394a введены понятия уровней потребления (Power States), относящиеся к узлу в целом и отдельным его блокам. Узел и блок могут поддерживать до четы$

рех уровней (0…3), из которых нулевой (обязательный) соответствует функцио$ нированию в самом полном объеме.

Уровни потребления узла (Node Power States) N0N3 определяют состояния уров$ ней PHY и LINK:

N0 — состояние полной дееспособности узла: PHY$уровень запитан (может принимать, посылать и транслировать пакеты и сигналы), LINK$уровень спо$ собен отвечать на транзакции, обращенные к узлу. Контекст узла (все его кон$ фигурационные регистры CSR и PHY) действителен. При этом возможны два варианта:

LINK$уровень полностью запитан — полная функциональность узла (нор$ мальные ответы на все транзакции);

LINK$уровень находится в состоянии Standby (с пониженным потреблени$ ем). Узел способен декодировать адрес обращенных к нему транзакций и ответить на них квитанцией Ack_TRDY, что вызовет повтор транзакции инициатором в следующем интервале справедливости. За это время LINK$ уровень узла успеет включиться, и на следующую попытку узел ответит нор$ мальным образом;

N1 — состояние со включенным PHY (узел транслирует сигналы и пакеты) и отключенным LINK$уровнем. Это соответствует состоянию узла после сброса до получения пакета Link On. Состояние контекста узла стандартом не регла$ ментировано;

N2 — состояние с приостановленным (suspended) PHY и отключенным LINK$ уровнем. Узел не транслирует пакеты и сигналы, он может только реагировать на внешние сигналы, вызывающие возобновление (или на сигнал от своего при$ ложения). Контекст не определен; информация, связанная с топологией, недей$ ствительна (после возобновления будет сброс);

N3 — полностью обесточенный узел, контекст потерян.

Уровни потребления блока (Unit Power States) D0D3 отражают функциональность и потребление блока:

D0 — состояние полной функциональности и полного потребления, обязатель$ ное для всех блоков;

D1 — состояние пониженного потребления, контекст блока сохраняется, но функциональность может быть ограничена. Переход D1D0 может совершаться довольно быстро;

D2 — состояние еще меньшего потребления, с меньшей функциональностью и, возможно, потерей контекста блока. Переход в D0 (или D1) может занимать большее время, чем D1D0;

D3 — полное обесточивание блока.

Возможные состояния уровней потребления узла и входящих в него блоков связа$ ны между собой: номер уровня потребления узла должен быть не больше, чем наи$ меньший номер уровня потребления его блоков. Например, если в узле два блока и их текущие уровни потребления D1 и D2, то узел может находиться на уровне N0

или N1. Попытка (запрос) перевода уровня узла с N0 на N2 или N3 приведет к пе$ реводу только на уровень N1.

Для каждого поддерживаемого уровня потребления узла в памяти конфигурации имеются исчерпывающие описания условий питания и потребляемой (отдавае$ мой) мощности. Кроме того, введены регистры CSR, отражающие текущие уровни потребления для узла и блоков и управляющие их сменой. Смену уровней запра$ шивает диспетчер энергопотребления, который может выполнять удаленное уп$ равление любыми узлами шины и их блоками (как и своим собственным узлом и его блоками).

Регистры и структуры данных для управления энергопотреблением

Узлы, участвующие в управлении энергопотреблением, должны иметь единичное значение бита pmc в информационном блоке последовательной шины. Новые ре$ гистры CSR, введенные для управления энергопотреблением, располагаются в на$ чальном пространстве узла, начиная с адреса FFFF F001 0000h или выше. Регист$ ры делятся на две группы:

регистры, относящиеся к узлу (node$specific CSR);

регистры, относящиеся к блоку (unit$specific CSR).

Рис. 21.4. Регистры управления питанием узла: а — регистр состояния питания узла

NODE_POWER_STATE; б — регистр управления питанием узла NODE_POWER_CONTROL

ирегистр управления кабельным питанием CABLE_POWER_SOURCE_CONTROL;

в— регистр адреса уведомления NOTIFICATION_ADDRESS; г — регистр состояния кабельного питания CABLE_POWER_SOURCE_STATE;

д— регистр смены состояния потребления POWER_CHANGE

Форматы регистров, относящихся к узлу, приведены на рис. 21.4. На положение этого блока регистров указывает элемент Node_Power_Management в конфигура$ ционной памяти. Ниже в скобках указано смещение регистров от начала блока.

Обязательный регистр состояния питания узла NODE_POWER_STATE (00h) предназ$ начен для сообщения текущего уровня потребления.

Обязательный регистр управления питанием узла NODE_POWER_CONTROL (04h) слу$ жит только для управления сменой уровня потребления (поле lvl). Значения поля func: 0 — резерв, 1 (grant) — разрешение смены состояния на последнее запрошен$ ное; 2 (deny) — запрет смены состояния; 3 (wait) — выдержка 5 с перед отработкой последующей команды смены состояния; 4…7 (Set Level 0Set Level 3) — установ$ ка указанного уровня (отразится в поле lvl в регистре состояния питания узла).

Необязательный регистр адреса уведомления NOTIFICATION_ADDRESS (08h) содер$ жит полный адрес, по которому следует посылать уведомление о смене уровня потребления (идентификатор узла в поле destination_node_id, адрес в полях destination_offset_hi и destination_offset_lo). Бит e разрешает узлу гене$ рировать уведомление.

Необязательный регистр состояния кабельного питания CABLE_POWER_SOURCE_ STATE (0Ch) имеет следующие поля:

power — мощность, отдаваемая узлом в кабель (в десятых долях ватта);

voltage — напряжение питания (в десятых долях вольта);

rlvl — текущий запрашиваемый уровень потребления (0…3);

src — текущее состояние питания узла: 0 — от шины, 1 — от батареи, 2 — от сети, 3 — резерв;

v — признак действительности полей power и voltage;

lvl — текущий уровень потребления узла (0…3), соответствует состояниям

N0N3.

Необязательный регистр управления кабельным питанием CABLE_POWER_SOURCE_ CONTROL (10h) управляет отработкой команд. Значения поля func: 0 — резерв, 1 (grant) — разрешение смены состояния на последнее запрошенное; 2 (deny) — запрет смены состояния; 3 (wait) — выдержка 5 с перед отработкой последующей команды смены состояния; 4…7 (Set Level 0Set Level 3) — установка указанного уровня (поле lvl в регистре состояния кабельного питания).

Регистр смены уровня потребления POWER_CHANGE, обязательный для узла, управ$ ляющего потреблением, позволяет его приложениям управлять состоянием энер$ гопотребления любого узла или блока. Поле lvl задает желаемый (запрашивае$ мый) уровень потребления узла, заданного полем PHY_ID. Поле csr_offset задает конкретный блок или весь узел, для которого требуется смена уровня.

Форматы регистров, относящихся к блоку, аналогичны приведенным на рис. 21.4, а и б. На положение этого блока регистров указывает элемент Unit_Power_Management в конфигурационной памяти.

Регистр состояния питания блока UNIT_POWER_STATE (00h) имеет следующие поля:

power — мощность, отдаваемая блоком в кабель или потребляемая (в десятых долях ватта);

voltage — напряжение питания (в десятых долях вольта);

k — признак того, что блок является источником события пробуждения;

rlvl — текущий запрашиваемый уровень потребления (0…3);

src — текущее состояние питания блока: 0 — от узла, 1 — от собственной бата$ реи, 2 — от сети, 3 — блок подает питание в кабель;

v — признак действительности полей power и voltage;

lvl — текущий уровень потребления (0…3), соответствует состояниям D0D3.

Регистр управления питанием блока UNIT_POWER_CONTROL (04h) служит для уста$ новки уровня потребления с помощью поля func: 0…3 — резерв; 4…7 (Set Level 0Set Level 3) — установка указанного уровня (поле lvl в регистре состояния пита$ ния блока).

Для описания возможностей управления потреблением узла в корневом каталоге памяти конфигурации введен элемент, ссылающийся на PM каталог узла Node_ Power_Directory. Аналогичный элемент, ссылающийся на PM каталог блока, мо$ жет присутствовать в каталоге блока. В PM$каталогах могут присутствовать эле$ менты, приведенные на рис. 21.5.

Рис. 21.5. Элементы PM каталогов: а — описатели уровней потребления узла и блока; б — описатели кабельного питания; в — указатели на блоки регистров

Описатели уровней потребления узла Node_Power_Level должны присутствовать для всех уровней потребления, поддерживаемых устройством. Аналогичные опи сатели уровней потребления блока Unit_Power_Level могут присутствовать в PM$ каталоге блока. В описателях содержатся следующие поля:

power_requrements — мощность, потребляемая узлом или блоком на данном уровне (в десятых долях ватта);

voltage — требуемое напряжение: 0 — в соответствии с 1394–1995 (8–40В), 1 — 3,3 В, 2 — 5 В, 3 — 12 В, 4–Fh — резерв;

lvl — уровень потребления (0–3), описываемый данным элементом (соответ$ ствует N0N3 для узла и D0D3 для блока);

w — способность приостановки (standby) LINK$уровня (бит действителен только в описателе нулевого уровня);

v — признак действительности описателя.

Описатели кабельного питания Cable_Power_Source_Level сообщают возможности поставки питания в шину на каждом уровне потребления. Описатели относятся только к узлу. В них содержатся следующие поля:

power_requrements — мощность, подаваемая узлом в кабель на данном уровне (в десятых долях Вт);

voltage — подаваемое напряжение: 0 — в соответствии с 1394–1995 (8–40 В), 1 — 12 В, 2–Fh — резерв;

lvl — уровень потребления (0–3), описываемый данным элементом;

v — признак действительности описателя.

Указатель Node_Power_Management в поле csr_offset содержит смещение в об$ ласти регистров CSR, по которому находится группа регистров управления энерго потреблением узла.

Указатель Unit_Power_Management в поле csr_offset содержит смещение в об$ ласти регистров CSR, по которому находится группа регистров управления энерго потреблением блока.

Батареи питания (в том числе и аккумуляторные) могут относиться как к узлу в целом, так и к его отдельным блокам. К каждой батарее относится регистр со стояния батареи BATTERY_STATE_REGISTER со следующими полями (рис. 21.6):

capacity — емкость полностью заряженной батареи в ватт$часах;

available — текущий уровень заряженности (в процентах от полной емкости);

voltage — напряжение батареи (в десятых долях вольта);

st — состояние: 0 — батарея отсутствует, 1 — резерв, 2 — батарея установлена и используется, 3 — батарея заряжается.

Рис. 21.6. Регистр состояния батареи

На местоположение регистров состояния батарей указывают элементы Battery_ State, находящиеся в каталогах групп батарей Battery_Group. На каталоги групп батарей имеются ссылки в PM$каталоге узла Node_Power_Directory (для бата$ рей узла) и/или в PM$каталогах блоков Unit_Power_Directory (для индивиду$ альных батарей блоков).