Как правильно наносить декоративную штукатурку короед.
Локальное приложение узла получает следующие сообщения об особых событиях, происходящих на шине и в данном узле:
Возможность питания устройств от кабельной шины требует управления энергопотреблением узлов. В минимальном варианте, заложенном в изначальной спецификации, управление сводится к простому подсчету баланса мощности на основе классов питания узлов и включением LINK$уровня по команде от диспетчера. В IEEE 1394a управление было усовершенствовано, в частности:
Эти новые возможности потребовали введения дополнительных регистров CSR и элементов в памяти конфигурации.
В дополнении IEEE 1394b введено новое энергосберегающее состояние порта и узла — Standby, в котором PHY не обеспечивает взаимодействия своего узла с шиной.
Приостановка (suspend) — это переход пары портов, соединенных кабельным сегментом, в состояние малого энергопотребления. В этом состоянии передача трафика по данному сегменту невозможна. Однако приостановленный порт способен определять события отключения и подключения своего партнера. Для того чтобы стала возможной передача данных по приостановленному сегменту, порты должны выполнить возобновление (resume) нормальной работы. Приостановка и запрет портов меняют конфигурацию шины — она может оказаться разбитой на активные домены, изолированные друг от друга (в плане трафика). Возобновление опятьтаки меняет конфигурацию. В связи с этим приостановка и возобновление сопровождаются сигнализацией сброса (короткого) и реинициализацией шины.
Команда Suspend приводит к разделению шины на два фрагмента (домена): активный и приостановленный. Инициатор этой приостановки всегда остается в активном домене.
Команда Suspend принимается от удаленного узла с помощью расширенного физического пакета или от собственного LINK$уровня. В команде указывается идентификатор узла и номер его приостанавливаемого порта. В ответ на эту команду целевой узел приостановки посылает пакет подтверждения. Получив подтверждение команды приостановки, инициатор приостановки посылает сигнал TX_SUSPEND на тот порт, откуда пришло подтверждение. На остальные порты через короткий зазор узел посылает префикс данных, а за ним — короткий сигнал сброса шины. Это приводит к реконфигурированию активной части шины.
Получив сигнал приостановки RX_SUSPEND на одном из своих портов, целевой узел (которому посылали команду) прекращает подачу смещения (TpBias) на этот порт. На все свои остальные порты этот узел посылает сигнал TX_SUSPEND, инициируя приостановку и их партнеров. Таким образом, приостановка распространится на все порты и узлы шины, которые связаны с инициатором приостановки через приостанавливаемый порт.
Узел, обнаруживающий пропадание смещения, также прекращает подачу смещения на этот порт, что завершает согласование приостановки. С этого момента в приостановленных портах остаются работать только детекторы отключения.
Команда запрета порта (локальная или удаленная) переводит в приостановленное состояние только указанный порт и его партнера. Таким образом, в результате шина может оказаться разбитой на два не связанных между собой активных домена.
Получив пакет с командой запрета порта (Disable Port), узел посылает во все порты, кроме запрещенного, пакет подтверждения, а за ним — короткий сигнал сброса. На запрещенный порт узел посылает сигнал TX_DISABLE_NOTIFY. Его партнер, приняв сигнал RX_DISABLE_NOTIFY, посылает на остальные порты префикс данных, а за ним — короткий сброс. Этот порт переводится в приостановленное состояние (снятием смещения, на что ответом будет снятие смещения и у запрещенного порта).
Возобновление работы порта может инициироваться несколькими способами:
В IEEE 1394a введены понятия уровней потребления (Power States), относящиеся к узлу в целом и отдельным его блокам. Узел и блок могут поддерживать до четырех уровней (0…3), из которых нулевой (обязательный) соответствует функционированию в самом полном объеме.
Уровни потребления узла (Node Power States) N0…N3 определяют состояния уровней PHY и LINK:
Уровни потребления блока (Unit Power States) D0…D3 отражают функциональность и потребление блока:
Возможные состояния уровней потребления узла и входящих в него блоков связаны между собой: номер уровня потребления узла должен быть не больше, чем наименьший номер уровня потребления его блоков. Например, если в узле два блока и их текущие уровни потребления D1 и D2, то узел может находиться на уровне N0 или N1. Попытка (запрос) перевода уровня узла с N0 на N2 или N3 приведет к переводу только на уровень N1.
Для каждого поддерживаемого уровня потребления узла в памяти конфигурации имеются исчерпывающие описания условий питания и потребляемой (отдаваемой) мощности. Кроме того, введены регистры CSR, отражающие текущие уровни потребления для узла и блоков и управляющие их сменой. Смену уровней запрашивает диспетчер энергопотребления, который может выполнять удаленное управление любыми узлами шины и их блоками (как и своим собственным узлом и его блоками).
Узлы, участвующие в управлении энергопотреблением, должны иметь единичное значение бита pmc в информационном блоке последовательной шины. Новые регистры CSR, введенные для управления энергопотреблением, располагаются в начальном пространстве узла, начиная с адреса FFFF F001 0000h или выше. Регистры делятся на две группы:
Форматы регистров, относящихся к узлу, приведены на первом рисунке. На положение этого блока регистров указывает элемент 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 0… Set Level 3) — установка указанного уровня (отразится в поле lvl в регистре состояния питания узла).
Необязательный регистр адреса уведомления NOTIFICATION_ADDRESS (08h) содержит полный адрес, по которому следует посылать уведомление о смене уровня потребления (идентификатор узла в поле destination_node_id, адрес в полях destination_offset_hi и destination_offset_lo). Бит e разрешает узлу генерировать уведомление.
Необязательный регистр состояния кабельного питания CABLE_POWER_SOURCE_STATE (0Ch) имеет следующие поля:
Необязательный регистр управления кабельным питанием CABLE_POWER_SOURCE_CONTROL (10h) управляет отработкой команд. Значения поля func: 0 — резерв, 1 (grant) — разрешение смены состояния на последнее запрошенное; 2 (deny) — запрет смены состояния; 3 (wait) — выдержка 5 с перед отработкой последующей команды смены состояния; 4…7 (Set Level 0… Set Level 3) — установка указанного уровня (поле lvl в регистре состояния кабельного питания).
Регистр смены уровня потребления POWER_CHANGE, обязательный для узла, управляющего потреблением, позволяет его приложениям управлять состоянием энергопотребления любого узла или блока. Поле lvl задает желаемый (запрашиваемый) уровень потребления узла, заданного полем PHY_ID. Поле csr_offset задает конкретный блок или весь узел, для которого требуется смена уровня.
Форматы регистров, относящихся к блоку, аналогичны приведенным на первом рисунке а и б. На положение этого блока регистров указывает элемент Unit_Power_Management в конфигурационной памяти.
Регистр состояния питания блока UNIT_POWER_STATE (00h) имеет следующие поля:
Регистр управления питанием блока UNIT_POWER_CONTROL (04h) служит для установки уровня потребления с помощью поля func: 0…3 — резерв; 4…7 (Set Level 0… Set Level 3) — установка указанного уровня (поле lvl в регистре состояния питания блока).
Для описания возможностей управления потреблением узла в корневом каталоге памяти конфигурации введен элемент, ссылающийся на PM-каталог узла Node_Power_Directory. Аналогичный элемент, ссылающийся на PM-каталог блока, может присутствовать в каталоге блока. В PM-каталогах могут присутствовать элементы, приведенные на следующем рисунке.
Описатели уровней потребления узла Node_Power_Level должны присутствовать для всех уровней потребления, поддерживаемых устройством. Аналогичные описатели уровней потребления блока Unit_Power_Level могут присутствовать в PM-каталоге блока. В описателях содержатся следующие поля:
Описатели кабельного питания Cable_Power_Source_Level сообщают возможности поставки питания в шину на каждом уровне потребления. Описатели относятся только к узлу. В них содержатся следующие поля:
Указатель Node_Power_Management в поле csr_offset содержит смещение в области регистров CSR, по которому находится группа регистров управления энергопотреблением узла.
Указатель Unit_Power_Management в поле csr_offset содержит смещение в области регистров CSR, по которому находится группа регистров управления энергопотреблением блока.
Батареи питания (в том числе и аккумуляторные) могут относиться как к узлу в целом, так и к его отдельным блокам. К каждой батарее относится регистр состояния батареи BATTERY_STATE_REGISTER со следующими полями (см. рисунок ниже):
На местоположение регистров состояния батарей указывают элементы Battery_State, находящиеся в каталогах групп батарей Battery_Group. На каталоги групп батарей имеются ссылки в PM-каталоге узла Node_Power_Directory (для батарей узла) и/или в PM-каталогах блоков Unit_Power_Directory (для индивидуальных батарей блоков).