Шина IEEE 1394 — FireWire

Взаимодействие с физическим уровнем шины IEEE 1394

Интерфейс с канальным уровнем

Физический уровень (PHY) обеспечивает LINK-уровню возможность обращения к шине для посылки и приема пакетов и исполнения некоторых служебных действий. Физический уровень имеет свои регистры, служащие для управления выполнением функций и определения состояния шины и узлов. К этим регистрам имеется возможность локального доступа — приложение узла через LINK-уровень может общаться с регистрами PHY. Содержимое некоторых регистров может изменяться по приему пакетов физического конфигурирования. В 1394a появилась возможность удаленного обращения к регистрам чужого узла на данной шине. Физический уровень не только обеспечивает передачу и прием пакетов для LINKуровня, но и сам является источником и получателем служебных пакетов.

Интерфейс с канальным уровнем

Физический и канальный уровни (PHY и LINK) в стандарте IEEE 1394 отделимы друг от друга. Это обеспечивает модульность построения устройств и возможность гальванической развязки основной (прикладной) части устройства от кабельного интерфейса. В устройствах физический и канальный уровни могут реализоваться раздельными микросхемами, причем даже разных производителей. Интерфейс между ними был описан в приложении к стандарту 1394, но в рекомендательной (необязательной) форме. В 1394a этот интерфейс (с небольшими изменениями) объявлен стандартом. Cвязь физического и канального уровней обеспечивается интерфейсом PHY-LINK. По этому интерфейсу канальный уровень получает сервисы доступа к шине для передачи и приема пакетов данных, а также доступ к внутренним регистрам PHY.

В IEEE 1394b в связи с особенностями бета-режима подход к организации интерфейса связи с физическими портами изменился. Здесь появился новый промежуточный интерфейс PIL-FOP, который позволяет соединять микросхему, в которой LINK интегрирован с однопортовым PHY, с многопортовым разветвителем. Таким образом, в 1394b имеются два варианта интерфейса:

  • параллельный интерфейс B PHY-LINK, являющийся развитием своего традиционного предшественника и обеспечивающий работу с портами на скоростях от S100 до S800 как в традиционном, так и в бета-режиме;
  • последовательный интерфейс PIL-FOP, по сигналам соответствующий электрическому интерфейсу порта в бета-режиме, подключающий многопортовый PHY-разветвитель (называемый FOP) к однопортовому PHY, интегрированному с LINK-уровнем (эта комбинация называется PIL). Последовательный интерфейс поддерживает все режимы и скорости (от S100 до S3200).

Интерфейс PHY-LINK 1394 и 1394a

Интерфейс PHY–LINK изображен на рисунке ниже, назначение сигналов раскрыто в следующей таблице. Интерфейс содержит небольшое количество сигналов, и именно для этих сигналов и возможно введение гальванической развязки.

На рисунке приведены сигналы для обоих вариантов шины — кабельной и кроссшины. Описание интерфейса, приведенное ниже, относится к самому распространенному варианту — кабельной шине. В этом варианте не используются (отсутствуют) сигналы Clk25 и Bacкlplane.

Для кросс-шины в интерфейсе LINK-PHY сигнал SClk имеет пониженную частоту (24,756 или 12,288 МГц для S50 и S25 соответственно); для идентификации используемой частоты введен сигнал Clk25 (0 — 12,288 МГц, 1 — 24,576 МГц). Признаком подключения LINK-уровня к Backplane PHY является дополнительный сигнал Backplane (от PHY к LINK’у).

Таблица. Сигналы интерфейса LINK-PHY

Сигнал Назначение
D[0:7] Двунаправленная шина данных. На S100 используются только линии D[0:1], на S200 — D[0:3], на S400 — D[0:7]
Ctl[0:1] Состояние интерфейса
LReq Link Request, последовательный интерфейс, по которому LINK инициирует запрос к PHY (для передачи пакетов и обращения к регистрам)
SClk Синхронизация (49,152 МГц) для вышеприведенных сигналов. Источник меняет состояние сигнала по спаду SClk, приемник фиксирует состояние по фронту SClk
LPS Link Power Status, признак активности (включения) LINK-уровня
LinkOn Сигнал для включения LINK-уровня
Direct Признак непосредственного соединения LINK-PHY (нет дифференцирования сигналов)

Интерфейсом управляет PHY; LINK может посылать запросы только в определенных состояниях интерфейса. Право передачи информации по двунаправленным линиям данных LINK получает от PHY. Текущее состояние интерфейса (использование шины данных) определяется сигналами Ctl[0:1] в соответствии с со следующей таблицей.

Таблица. Состояние интерфейса LINK-PHY

Ctl[0:1] Состояние интерфейса
  Линиями Ctl[0:1] управляет PHY:
00 Idle — нет активности (LINK может посылать запрос)
01 Status — PHY по шине данных посылает информацию о событиях или ответ на запрос чтения регистра
10 Receive — PHY передает LINK-уровню пакет, принимаемый с шины, или генерируемый им (PHY-пакет), или пакет ответа на запрос к регистрам PHY
11 Grant — PHY передает LINK’у право использования шины данных
   Линиями Ctl[0:1] управляет LINK:
00  Idle — нет активности: LINK завершил передачу и отдает управление интерфейсом уровню PHY
01  Hold — LINK удерживает шину, готовясь к передаче пакета (или после передачи пакета, собираясь послать следующий без повторного арбитража)
10  Transmit — LINK передает данные PHY (для передачи в шину или обращения к регистрам PHY)
11  Не используется

В состоянии Status PHY по линиям данных D[0:1] за два такта передает 4 бита состояния (Stat[0:1] в первом такте и Stat[2:3] во втором

Таблица. Состояние, сообщаемое PHY

Бит Значение
0 ARB_RESET_GAP — обнаружение зазора сброса арбитража (указание на начало нового интервала справедливости)
1 SUBACTION_GAP — обнаружение нормального зазора арбитража (можно запрашивать право посылки очередного асинхронного пакета)
2 BUS_RESET_START — обнаружение сброса на шине
3 PHY_INTERRUPT — прерывание от PHY, причина уточняется чтением PHY-регистра 0101b. Возможные события: обнаружение петли во время идентификации дерева; обнаружение снижения питающего напряжения (ниже 7,5 В); обнаружение тайм-аута арбитража; обнаружение изменения напряжения смещения

 

Доступ к регистрам PHY

Обращение к регистрам PHY (см. далее) через запросы от LINK разрешено в любом состоянии интерфейса, за исключением времени, когда PHY занят обработкой предыдущего запроса чтения. Запросы обращения к регистрам выполняются всегда, их может отменить только сигнал сброса. Запрос передается в последовательном коде по линии LReq. Для запросов обращения к регистрам PHY в теле передается адрес регистра, а в запросе записи — и сами данные записи. В запросе чтения в битах [4:7] передается адрес запрашиваемого регистра, бит 8=0 — стоп бит. В запросах записи после адреса в битах [8:15] передается записываемый байт. Ответ на запрос чтения регистра передается по линиям D[0:1] в состоянии Status за 8 тактов (передаются 16 бит). За первые 2 такта передается текущее значение состояния, далее передается 4-битный адрес регистра и 8 бит считанных данных.

Параллельный интерфейс B PHY-LINK 1394b

В IEEE 1394b параллельный интерфейс между физическим уровнем и LINK-уровнем модифицирован для поддержки высоких скоростей и бета-режима, и этот вариант интерфейса называется B PHY-LINK. Схема интерфейса приведена на следующем рисунке, назначение сигналов — в следующей таблице. Этот интерфейс обеспечивает передачу данных на скоростях вплоть до S800. Здесь в шине данных всегда используются все 8 бит, а при передаче на более низких скоростях байты данных растягиваются до 2, 4 или 8 тактов. Интерфейс может работать и в традиционном режиме (1394/1394a), при этом он синхронизируется от линии PClk (она будет играть роль SCLK), частота этого сигнала становится 49,152 МГц. Сигналы LClk и PInt при этом не используются.

 

Таблица. Сигналы интерфейса LINK-PHY 1394b

Сигнал Назначение
D[0:7] Двунаправленная шина, по которой передаются данные, код скорости и тип запроса. Данные от PHY синхронизируются по PClk, данные от LINK — по LClk
Pint PHY Interrupt, линия для последовательной передачи информации о состоянии PHY, содержимого регистров и прерываний по событиям
Ctl[0:1] Состояние (фаза) интерфейса синхронизируется по PClk, когда интерфейсом управляет PHY, и по LClk, когда интерфейсом управляет LINK
LReq Link Request, последовательный интерфейс, по которому LINK инициирует запрос к PHY (для передачи пакетов и обращения к регистрам) Синхронизируется по LClk
PClk Синхронизация (98,304 МГц) для сигналов, передаваемых от PHY. Источник синхронизации — PHY
LClk Синхронизация для сигналов, передаваемых от LINK. Сигнал вырабатывается LINK’ом из PClk и совпадает с ним по частоте
LPS Lint Power Status, признак активности (включения) LINK-уровня
LinkOn Сигнал для включения LINK-уровня
Beta_Mode_link Признак работы интерфейса в режиме 1394b (при отсутствии сигнала интерфейс работает в режиме 1394a)
Direct Признак непосредственного соединения LINK-PHY (нет дифференцирования сигналов)

Интерфейсом управляет PHY или LINK, текущее состояние интерфейса (использование шины данных) определяется сигналами Ctl[0:1] в соответствии с таблицей ниже. По сравнению с 1394a интерфейс изменен в том, что все обращения к регистрам PHY происходят без использования шины данных: записываемые данные передаются по линии LReq, а считываемые данные и прерывания от PHY приходят по линии PInt.

Таблица. Состояние интерфейса B PHY-LINK (1394b)

Ctl[0:1] Состояние интерфейса
  Линиями Ctl[0:1] управляет PHY:
00 Idle — нет активности (дежурное состояние)
01 Status — PHY по шине данных посылает информацию о состоянии шины
10 Receive — PHY передает LINK-уровню пакет, принимаемый с шины
11 Grant — PHY передает LINK’у право использования шины данных
  Линиями Ctl[0:1] управляет LINK:
00 Idle — нет активности: LINK завершил передачу и отдает управление интерфейсом уровню PHY
01 Transmit — LINK передает данные PHY
10 Не используется
11 Hold/More_Info — LINK удерживает шину, готовясь к передаче пакета. В конце передачи пакета указывает на передачу следующего запроса

Данные, принимаемые и передаваемые по параллельной шине, растягиваются на n-тактов, в зависимости от скорости передачи: для S100 n = 8, для S200 n = 4, для S400 n = 2, для S800 каждый байт передается только в одном такте (n = 1). Более высокие скорости данным интерфейсом не поддерживаются.

Запросы LINK к PHY в 1394b

Запрос от LINK к PHY посылается в последовательном виде по линии LReq. Обобщенный формат запроса приведен на рисунке, по сравнению с запросами традиционного интерфейса он усложнен. Запрос начинается с единичного старт-бита (LReq0 = 1) и завершается нулевым стоп-битом. За старт-битом следует код типа запроса (биты RT[0:3], см. таблицу), за которым следуют поля, необходимые для данного типа запроса:

  • бит RFMT (Request Format) определяет формат запроса: 0 — явно не задан, 1 — B-формат;
  • поле RS[0:3] (Request Speed) определяет скорость: 0000 — S100, 0010 — S200, 0100 — S400, 0110 — S800 (остальные значения зарезервированы);
  • поле RA[0:3] содержит адрес регистра PHY;
  • поле RD[0:7] (Request Data) содержит записываемые данные.

В ответ на запросы передачи PHY, выиграв арбитраж, предоставляет LINK’у право на передачу пакета. По запросу записи в регистр PHY выполняется соответствующая операция, никакого ответа не предусматривается. В ответ на запрос чтения регистра PHY данные (и адрес) будут переданы по линии Pint.

Таблица. Запросы LINK к PHY

Код запроса RT[0:3] Назначение Требуемые поля
0000 Резерв  
0001 PH_IMMED_REQ, немедленный запрос передачи (для посылки пакета квитирования) RF, RS
0010 PH_NEXT_EVEN, запрос очередной передачи асинхронного пакета в четной фазе интервала справедливости RF, RS
0011 PH_NEXT_ODD, запрос очередной передачи асинхронного пакета в нечетной фазе интервала справедливости RF, RS
0100 PH_CURRENT, запрос очередной передачи асинхронного пакета в текущей фазе интервала справедливости RF, RS
0101 Резерв  
0110 PH_ISOCH_REQ_EVEN, запрос передачи изохронного пакета в четном периоде RF, RS
0111 PH_ISOCH_REQ_ODD, запрос передачи изохронного пакета в нечетном периоде RF, RS
1000 PH_CYC_START_REQ, запрос передачи пакета начала цикла RF, RS
1001 Резерв  
1010 PH_REG_READ, запрос чтения регистра PHY RA
1011 PH_REG_WRITE, запрос записи в регистр PHY RA, RD
1100 PH_ISOCH_PHASE_EVEN, сообщение от LINK’а (не мастера циклов) о приеме пакета начала цикла с четной фазой, обеспечивает синхронизацию LINK’а и PHY, если последний изза ошибки не принял маркер Cycle Start  
1101 PH_ISOCH_PHASE_ODD, то же для нечетной фазы  
1110 PH_CYCLE_START_DUE, сообщение от LINK’а (не мастера циклов) о приеме уведомления о начале цикла  
1111 Резерв  

Прием и передача пакета

Прием пакета

Прием пакета иллюстрирует рисунке. После индикации начала приема (Data_On) принимается байт скорости SPD, определяющий также и формат (см. таблицу ниже). Далее принимаются байты данных — пакет, передаваемый по шине.

 

Во время индикации начала приема по шине данных передается байт ST, сообщающий состояние шины:

  • ST[0] — Bus Reset, сброс шины;
  • ST[1] — Arbitration Reset Gap Odd, признак зазора сброса арбитража и начала нового нечетного интервала справедливости;
  • ST[2] — Arbitration Reset Gap Even, признак зазора сброса арбитража и начала нового четного интервала справедливости;
  • ST[3] — Cycle Start Odd, признак начала нечетного цикла;
  • ST[4] — Cycle Start Even, признак начала четного цикла;
  • ST[5] — Subaction Gap, признак зазора арбитража. После сброса означает завершение сброса и инициализации шины.

Таблица. Кодирование скорости и формата принимаемого пакета

SPD[0:7] Скорость, формат
0000 0000 S100 Legacy
0000 0001 S100 Beta
0000 0100 S200 Legacy
0000 0101 S200 Beta
0000 1000 S400 Legacy
0000 1001 S400 Beta
0000 1101 S800 Beta
1111 1111 DATA_ON, признак начала приема
Остальные значения Резерв

 

Передача пакета

В ответ на запрос передачи пакета PHY, сигнализируя состояние Grant (Ctl[0:1] = 11), посылает LINK-уровню байт GT, в котором сообщает формат, скорость и тип разрешенной передачи. После этого он отдает управление интерфейсом LINK-уровню, указав состояние Grant (Ctl[0:1] = 11), а затем и прекращая управлять линиями Ctl[0:1] и D[0:7]. Теперь LINK устанавливает состояние Hold (Ctl[0:1] = 11), обозначая занятость интерфейса и шины, и начинает передавать пакет данных (состояние Transmit, Ctl[0:1] = 01). После передачи пакета LINK сигнализирует состояние MORE_INFO (Ctl[0:1] = 11), в котором по шине данных передается байт дополнительной информации AI[0:7]. В этом байте может присутствовать встроенный последующий запрос шины с указанием его формата, типа и скорости. После этого LINK указывает состояние Idle (Ctl[0:1] = 00), затем перестает управлять линиями Ctl[0:1] и D[0:7] и отдает управление PHY.

Получив право передачи пакета, LINK может послать только пакет, полностью удовлетворяющий свойствам, описанным байтом GT. Этот байт декодируется следующим образом:

  • бит GT[0] задает тип формата: 0 — произвольный, 1 — B-формат;
  • биты GT[1:3] задают тип гранта (пакета, разрешенного к передаче): 010 — изохронный, 101 — асинхронный, 110 — пакет начала цикла, 111 — немедленный (пакет квитирования), остальные значения зарезервированы;
  • биты GT[5:6] задают скорость: 00 — S100, 01 — S200, 10 — S400, 11 — S800.

Байт дополнительной информации AI[0:7]содержит следующие поля:

  • AI[0] — признак формата последующего запроса: 0 — произвольный, 1 — B-формат;
  • AI[1:3] — тип встроенного запроса: 000 — нет запроса, 001 — PH_ISOCH_REQ_ODD, 010 — PH_ISOCH_REQ_EVEN, 011 — PH_CURRENT, 100 — PH_NEXT_EVEN, 101 — PH_NEXT_ODD, 110 — PH_CYC_START_REQ, 111 — резерв;
  • AI[4] — признак последнего пакета в субакции;
  • AI[5:6] — скорость для встроенного запроса: 00 — S100, 01 — S200, 10 — S400, 11 — S800;
  • AI[7] — резерв.

Прием состояния PHY, прерываний и результатов чтения регистров

Состояние PHY, результаты чтения регистров и прерывания передаются последовательно по линии Pint (см. рисунок). Значения кодов индикации состояния раскрыты в таблице. Поля адреса считываемого регистра (RA) и считанных данных (RD) используются только при индикации результатов чтения. Индикация результатов чтения может быть как запрошенной LINK’ом, так и неожиданной для него (чтение по инициативе PHY).

Таблица. Посылки состояния PHY

Код индикации состояния
ST[0:2]
Назначение Требуемые поля
000 NOP, нет индикации состояния
001 PHY_INTERRUPT, прерывание от PHY (тайм-аут конфигурирования из-за петли, пропадание кабельного питания, событие порта или тайм-аут арбитража)
010 PHY_REGISTER_SOL, результат чтения регистра по запросу LINK’а RA, RD
011 PHY_REGISTER_UNSOL, результат неожидаемого чтения регистра RA, RD
100 PH_RESTORE_NO_RESET, инициализация интерфейса с сообщением об отсутствии сбросов шины, о которых не было сообщено LINK’у (или PHY начал процесс восстановления интерфейса)
101 PH_RESTORE_RESET, инициализация интерфейса с сообщением о сбросе шины, происшедшем за время пребывания интерфейса в состоянии Standby
110 Не используется (игнорируется LINK’ом)
111 Резерв
Яндекс.Метрика