Шины.PCI,.USB.и.FireWire
.pdf
Доступ к регистрам PHY
Обращение к регистрам PHY (см. далее) через запросы от LINK разрешено в лю$ бом состоянии интерфейса, за исключением времени, когда PHY занят обработ$ кой предыдущего запроса чтения. Запросы обращения к регистрам выполняются всегда, их может отменить только сигнал сброса. Запрос передается в последова$ тельном коде по линии LReq. Для запросов обращения к регистрам PHY в теле пе$ редается адрес регистра, а в запросе записи — и сами данные записи. В запросе чтения в битах [4:7] передается адрес запрашиваемого регистра, бит 8=0 — стоп бит. В запросах записи после адреса в битах [8:15] передается записываемый байт. Ответ на запрос чтения регистра передается по линиям D[0:1] в состоянии Status за 8 тактов (передаются 16 бит). За первые 2 такта передается текущее значение со$ стояния (см. табл. 23.3), далее передается 4$битный адрес регистра и 8 бит считан$ ных данных.
Параллельный интерфейс B PHY LINK 1394b
В IEEE 1394b параллельный интерфейс между физическим уровнем и LINK$уров$ нем модифицирован для поддержки высоких скоростей и бета$режима, и этот ва$ риант интерфейса называется B PHY LINK. Схема интерфейса приведена на рис. 23.2, назначение сигналов — в табл. 23.6. Этот интерфейс обеспечивает пере$ дачу данных на скоростях вплоть до S800. Здесь в шине данных всегда использу$ ются все 8 бит, а при передаче на более низких скоростях байты данных растягива$ ются до 2, 4 или 8 тактов. Интерфейс может работать и в традиционном режиме (1394/1394a), при этом он синхронизируется от линии PClk (она будет играть роль SCLK), частота этого сигнала становится 49,152 МГц. Сигналы LClk и PInt при этом не используются.
Таблица 23.6. Сигналы интерфейса LINK PHY 1394b
Сигнал |
Назначение |
D[0:7] |
Двунаправленная шина, по которой передаются данные, код скорости и тип |
|
запроса. Данные от PHY синхронизируются по PClk, данные от LINK — по LClk |
Pint |
PHY Interrupt, линия для последовательной передачи информации о состоянии |
|
PHY, содержимого регистров и прерываний по событиям |
Ctl[0:1] |
Состояние (фаза) интерфейса (табл. 23.7) синхронизируется по 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) |
Direct1 |
Признак непосредственного соединения LINK PHY (нет дифференцирования |
|
сигналов) |
|
|
1 В микросхемах этот вывод может называться Iso (изоляция).
Рис. 23.2. Интерфейс B PHY LINK 1394b
Интерфейсом управляет PHY или LINK, текущее состояние интерфейса (исполь$ зование шины данных) определяется сигналами Ctl[0:1] в соответствии с табл. 23.7. По сравнению с 1394a интерфейс изменен в том, что все обращения к регистрам PHY происходят без использования шины данных: записываемые данные переда$ ются по линии LReq, а считываемые данные и прерывания от PHY приходят по линии PInt.
Таблица 23.7. Состояние интерфейса B PHY LINK (1394b)
Ctl[0:1] |
Состояние интерфейса |
|
Линиями Ctl[0:1] управляет PHY: |
00 |
Idle — нет активности (дежурное состояние) |
01 |
Status — PHY по шине данных посылает информацию о состоянии шины |
10Receive — PHY передает LINK уровню пакет, принимаемый с шины
11Grant — PHY передает LINK’у право использования шины данных Линиями Ctl[0:1] управляет LINK:
00Idle — нет активности: LINK завершил передачу и отдает управление интерфейсом уровню PHY
01 |
Transmit — LINK передает данные PHY |
10Не используется
11Hold/More_Info — LINK удерживает шину, готовясь к передаче пакета. В конце передачи пакета указывает на передачу следующего запроса
Данные, принимаемые и передаваемые по параллельной шине, растягиваются на n$тактов, в зависимости от скорости передачи: для S100 n = 8, для S200 n = 4, для S400 n = 2, для S800 каждый байт передается только в одном такте (n = 1). Более высокие скорости данным интерфейсом не поддерживаются.
Запросы LINK к PHY в 1394b
Запрос от LINK к PHY посылается в последовательном виде по линии LReq. Обоб$ щенный формат запроса приведен на рис. 23.3, по сравнению с запросами тради$ ционного интерфейса он усложнен. Запрос начинается с единичного старт$бита (LReq0 = 1) и завершается нулевым стоп$битом. За старт$битом следует код типа запроса (биты RT[0:3], табл. 23.8 ), за которым следуют поля, необходимые для данного типа запроса:
бит 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) содержит записываемые данные.
Рис. 23.3. Формат запроса к PHY
В ответ на запросы передачи PHY, выиграв арбитраж, предоставляет LINK’у пра$ во на передачу пакета. По запросу записи в регистр PHY выполняется соответ$ ствующая операция, никакого ответа не предусматривается. В ответ на запрос чте$ ния регистра PHY данные (и адрес) будут переданы по линии Pint.
Таблица 23.8. Запросы 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 |
|
пакета в текущей фазе интервала справедливости |
|
|
|
|
Код запроса |
Назначение |
Требуемые |
RT[0:3] |
|
поля |
|
|
|
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 |
Резерв |
|
|
|
|
Прием пакета
Прием пакета иллюстрирует рис. 23.4. После индикации начала приема (Data_On) принимается байт скорости SPD, определяющий также и формат (табл. 23.9). Да$ лее принимаются байты данных — пакет, передаваемый по шине.
Рис. 23.4. Прием пакета по интерфейсу B PHY LINK
Во время индикации начала приема по шине данных передается байт 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, признак зазора арбитража. После сброса означает за$ вершение сброса и инициализации шины.
Таблица 23.9. Кодирование скорости и формата принимаемого пакета
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 (рис. 23.5). Значения кодов индикации состояния раскры$ ты в табл. 23.10. Поля адреса считываемого регистра (RA) и считанных данных (RD) используются только при индикации результатов чтения. Индикация результатов чтения может быть как запрошенной LINK’ом, так и неожиданной для него (чте$ ние по инициативе PHY).
|
Рис. 23.5. Формат посылки состояния PHY |
|
Таблица 23.10. Посылки состояния 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 начал процесс восстановления |
|
|
интерфейса) |
|
продолжение
Таблица 23.10 (продолжение)
Код инди |
Назначение |
Требуемые |
кации со |
|
поля |
стояния |
|
|
ST[0:2] |
|
|
|
|
|
101 |
PH_RESTORE_RESET, инициализация интерфейса |
– |
|
с сообщением о сбросе шины, происшедшем за время |
|
|
пребывания интерфейса в состоянии Standby |
|
110 |
Не используется (игнорируется LINK’ом) |
– |
111 |
Резерв |
– |
|
|
|
Последовательный интерфейс PIL FOP
Последовательный интерфейс подключает к однопортовому узлу с интегрирован$ ным портом, называемому PIL (Port Integrated Link), физический разветвитель FOP (Fan$Out PHY). Схема подключения с использованием этого интерфейса при$ ведена на рис. 23.6. Узел PIL содержит один бета$порт, соединяемый с разветвите$ лем FOP двумя дифференциальными однонаправленными сигнальными парами. В этих сигнальных парах может присутствовать и гальваническая развязка (кон$ денсаторная или трансформаторная). Дополнительно от FOP должен передавать$ ся сигнал LinkON, управляющий включением LINK$уровня по приему соответ$ ствующего пакета. Узел PIL и разветвитель FOP могут находиться в разных доменах питания. Внешние порты разветвителя FOP могут быть как бета$порта$ ми, так и универсальными, поддерживающими DS$сигнализацию.
Рис. 23.6. Интерфейс PIL FOP 1394b |
Логически уровень PHY комбинации PIL$FOP выглядит как один многопорто$ вый PHY, число его портов равно числу портов разветвителя с учетом дополни$ тельного порта, обращенного к PIL. Этому порту назначается самый большой но$ мер; он никогда не представляется как активный порт и его нельзя перевести в режим Standby. В пакетах самоидентификации этот порт отмечается как отсут$ ствующий, удаленное обращение к его регистрам дает тот же результат, как обра$ щение к отсутствующему порту.
PHY, предназначенный для роли FOP, может и не подключаться к PIL, а играть роль автономного повторителя$разветвителя (с отсутствующим LINK’ом). При этом порт, предназначенный для подключения PIL, может работать в традицион$ ном, бета$ или «двуязычном» режиме.
PIL и FOP обнаруживают присутствие (включение) друг друга, согласуют скоро$ сти и устанавливают синхронизацию так же, как и пара обычных бета$портов (см. главу 22). В посылках согласования скоростей FOP будет передавать бит FOP_ Capable, а порт интегрированного узла — бит PIL_Capable. Протокол согласова$ ния позволяет установить им друг с другом правильные взаимоотношения.
Для того чтобы порты FOP и PIL логически связались в единый набор портов многопортового узла, в интерфейсе PIL$FOP определен специальный двухточеч$ ный протокол обмена со своими специальными P2P$пакетами (point$to$point). Пакеты P2P передаются только по интерфейсу между PIL и FOP, на общую шину они не выходят. Пакеты P2P передаются между пакетами основного трафика шины. Если во время передачи пакета P2P требуется передача основного трафика, то па$ кеты P2P прерываются, а пакеты основного трафика передаются беспрепятствен$ но. Формат пакетов P2P приведен на рис. 23.7, назначение полей приведено ниже:
PP1 и PP2 — байты$префиксы пакетов (00011xx1 и 00111xx1 соответственно);
D1 — байт, определяющий операцию:
0000xxxx — нет операции;
0001aaaa — запись в регистр FOP, aaaa — адрес, D2 содержит данные;
0010aaaa — чтение регистра aaaa;
0011aaaa — неожидаемое (для PIL) чтение регистра aaaa, D2 содержит счи$ танные данные;
0100aaaa — ожидаемые (для PIL) результаты чтение регистра aaaa, D2 содер$ жит считанные данные;
0101iiii — уведомление о прерывании от FOP, iiii — код прерывания (0001 — прерывание от физического уровня, остальные коды пока не определены);
0110xxxx — Cycle Start Due, если в FOP установлен бит enab_accel, PIL посылает это уведомление после начала каждого изохронного периода (по своим часам);
0111xxxx — Restore_Notify, уведомление восстановления, посылает FOP, начинающий восстановление как «племянник»;
10000000 – 11111111 — резерв;
D2 — данные записи или чтения (присутствуют не во всех пакетах);
DE1, DE2 — маркеры конца данных DATA_END.
Рис. 23.7. Пакеты P2P интерфейса PIL FOP
Каждый байт пакета на рисунке представлен в виде одного символа, который пос$ ле кодирования 8B/10B представляется десятью битами сигнала на шине. Пакеты P2P могут быть прерваны в любом месте управляющими символами префикса данных или кода скорости, что означает начало пакета основного трафика, переда$ ваемого по шине. Если пакет прерывается до DE1, то он повторяется передатчиком и игнорируется приемником. Пакет, прерванный после DE1, используется по на$ значению, поскольку все его содержательные поля и разделитель уже переданы.
Регистры PHY
Регистры PHY предназначены для управления функциями физического уровня, определения возможностей и состояния узла и состояния его портов. Регистры PHY имеют разрядность 8 бит. Они не отображаются на адресное пространство шины IEEE 1394. Доступ к регистрам PHY осуществляется по запросам его ло$ кального приложения (запросами по интерфейсу LINK$PHY). Некоторые поля регистров могут быть удаленно модифицированы пакетами физического уровня от узлов$диспетчеров. В 1394a появилась возможность удаленного доступа к реги$ страм с помощью асинхронных транзакций.
В 1394 все регистры PHY отображаются на плоскую карту (рис. 23.8), в которой 4$битный адрес позволяет выбрать любой из 16 регистров. Реальное число исполь$ зуемых регистров зависит от числа портов, которые имеются в данном PHY. На$ значение полей регистров приведено ниже:
Physical_ID — 6$битный идентификатор узла на шине;
R (Root) — признак того, что данный узел является корневым;
PS (Power State) — состояние питания: 1 — питание от шины в норме (>7,5 В);
RHB (Root Hold Off Bit) — бит, принуждающий узел задерживать свое участие в идентификации дерева, чтобы стать корнем (управляется PHY$пакетом физи$ ческого конфигурирования от диспетчера);
IBR (Initiate Bus Reset) — инициирование сброса шины; установка бита вызы$ вает немедленную подачу сигнала сброса на 166 мкс, после чего бит автомати$ чески обнуляется;
Gap_cnt — значение счетчика, используемого для определения зазоров арбит$ ража (Subaction_gap) и сброса арбитража (Arb_reset_gap); по сбросу, связан$ ному с изменением топологии, устанавливается Gap_cnt = 63. Управляется PHY$ пакетом физического конфигурирования от диспетчера;
SPD (Speed) — поддерживаемая скорость: 00 — S100, 01 — S200, 10 — S400, 11 — резерв;
E (Enhanced) — признак использования регистров в расширенном пространстве (расположенных после адреса #ports + 0100);
#ports (5 бит) — число портов PHY;
AStat[i], BStat[i] — состояние линий TPA, TPB i$го порта: 11 — Z, 01 — «1», 10 — «0», 00 — недопустимо;
Ch[i] — признак дочернего i$го порта: 0 — p$порт, 1 — c$порт;
Con[i] — состояние i$го порта: 0 — не подключен, 1 — подключен;
ENV (Environment) — тип оборудования (используется только с регистрами в расширенном пространстве): 00 — кросс$шина (backplane), 01 — кабельная шина, 10 и 11 — резерв;
Reg_count — число регистров в расширенном пространстве.
Рис. 23.8. Карта регистров PHY 1394
Вварианте кросс$шины карта регистров имеет специфику. Здесь всегда имеется только один порт (#ports = 1), биты R, PS и RHB отсутствуют. В расширенном пространстве имеется один регистр (Reg_count = 1), в котором старший бит TD (Transceiver disable) запрещает работу приемопередатчика узла, младшие 4 бита Priority задают значение приоритета, вводимое узлом при арбитраже.
В1394a набор регистров PHY был расширен, и для того чтобы сохранить совме$ стимость с 4$битной адресацией, часть регистров адресуется косвенно. В этой кар$ те в 1394b определены дополнительные поля. Карта регистров PHY 1394a/b при$ ведена на рис. 23.9. Здесь адреса 1000–1111 отведены под восемь страничных регистров; какие именно регистры на них отображаются в данный момент, опреде$ ляется полем Page_select, а для портов — еще и полем Port_Select. Первые два регистра полностью совпадают с регистрами 1394; третий регистр несколько отли$ чается, и по нему можно определить, что остальные регистры являются регистра$ ми 1394a/b. Новые поля регистров приведены ниже:
Extended (3 бита) — признак формата 1394a/b (111);
Total_Ports (4 бита) — число портов;
Max_Speed (3 бита) — максимальная поддерживаемая скорость;
E_SB (Enable_Standby) — разрешение узлу$«племяннику» перейти в режим Standby;
Repeater_delay (4 бита) — максимальная задержка, вносимая повторите$ лем (T = 144 + Repeater_delay×20 нс);
Link_Act — активность LINK$уровня (соответствует биту L пакета самоиден$ тификации), в 1394b называется LCtrl;
Contend — признак кандидата на роль диспетчера (соответствует биту C пакета самоидентификации);
