Содержание

Ethernet Заметки

PCS - Physical Coding Sublayer. По документации на PHY блоки PCS отвечает за:

FIB - Forwarding Information Base (Таблица паршрутов, куда какой IP перенаправлять)
FDB - Forwarding Database Entry (Запись в таблице L2 маршрутизации: МАС+VLAN)
MDB - Multicast Group Database Entry
Linux Bridge


Если пинами подать аппаратный Reset на выводы двух микросхем PHY и эти микросхемы подключены кабелем друг к другу, то LinkUp не устанавливается! При Reset светодиоды гаснут и не больше загораются, пока не передернешь кабель в одном или обоих разъемах.

Если подавать Reset по очереди, то Link поднимается и светодиоды загораются после Autonegotiation.
Если PHY подключены не друг к другу, а к какому-то другому источнику, который не ресетится, то Link так-же поднимается.

(Выявлено на платах PHY для 1923КХ028, где на каждой плате расширения стоит по 2 PHY драйвера. Все разъемы, соединенные попарно, после одновременного аппаратного Reset не выходят в LinkUp. Приходится дополнительно подавать SotfReset, либо делать последовательный аппаратный сброс.)

Причина такого поведения не установлена. По питанию выбросов и просадок нет.

UPD: Активный уровень Reset (0) можно подать сразу на все микросхемы PHY. Но снимать Reset (1) c микросхем необходимо последовательно с некоторой паузой. По экспериментам, LinkUp стабильно происходит при задержке ~1мс. Светодиоды на разъеме загораются приблизительно на 7-9 секунду.


В демоплате 1923КХ028 блоки PHY подключены по SGMII, который использует свой SGMII Autonegotiation для обмена контрольной информацией с микросхемой PHY. Контрольная информация - это видимо трансляция значений регистров PHY в регистры MAC.

1923KX028.MACSGMII AutonegPHY(dp83867e TI) ←Autoneg→ — Cable — ←AutonegРС_PHY

Когда PHY выполнил по кабелю процедуру Autonegotiation с каким-то абонентом (РС), то PHY сохраняет в своих регистрах информацию о возможностях Линк-партнера (РС). Значения данных регистров доступны для чтения по MDIO и они показывают в каких режимах может работать РС и какие опции поддерживает (Advertisement, Supported). Например, см. регистр Auto-Negotiation Link Partner Ability Register (ANLPAR). Если оба партнера поддерживают процедуру Autonegotiation и она разрешена, то оба партнера настраиваются на работу в наилучшем режиме (самом быстром) сравнивая свои возможности и возможности партнера.

SGMII интерфейс имеет свою процедуру Autonegotiation, она позволяет передать информацию из блока PHY в блок MAC. Это позволяет настроить блок МАС на скорость, установленную между PHY и его абонентом на кабеле. SGMII всегда работает только на частоте 1ГБ/с, поэтому если скорость с абонентом установилась 100М, то SGMII транслирует каждый байт по 10 раз. Лишние байты на приемной стороне "выбрасываются". (Скорее всего прореживание происходит за счет разности частот PCS и приемного блока).

В режиме SGMII регистр EMAC_PCS_AN_LP_BASE(0x214) содержит полученную информацию о базовой странице линк-партнера блока PHY, т.е. РС. В этом регистре содержится информация о скорости и дуплексе связи установленной на кабеле. На основе этой информации, программное обеспечение хоста 1923КХ028 конфигурирует биты 10(1G_en) и 0 (SPD: 10М/100М) в регистре EMAC_NETCFG(0х0004).

Итого:
Автосогласование (Autonegotiatiоn) - это то, что происходит между PHY блоками. SGMII - это межсоединение MAC-PHY, и функция автосогласования (определенная в разделе 37 IEEE 802.3) используется для передачи информации о состоянии с PHY на MAC, а не для выполнения автосогласования.

Тоже самое из другого источника:
1000BASE-X Auto-Negotiation определен в Clause 37 IEEE802.3 спецификации. Он используется для согласования дуплекса и FlowControl по оптическому кабелю.

SGMII это де факто стандарт разработанный CISCO. SGMII использует 1000BASE-X кодирование для передачи данных и информации при Auto-Negotiation между PHY и МАС. Однако содержимое SGMII Auto-Negotiation отличается от 1000BASE-X Auto-Negotiation! SGMII Auto-Negotiation можно выключить, но тогда пользовательская программа должна сама настроить МАС, опираясь на значения регистров PHY.


Скремблер - это блок который перекодирует исходный сигнал в сигнал для передачи по линии. Например, если передается подряд много единиц 1111… (теряется синхронизация), или очередность 01010101… (большое излучение от кабеля), то такой сигнал плох для передачи по кабелю. Поэтому сигнал перекодируется с тем чтобы, распределить переключения равномерно во времени (Усреднение спектра сигнала, равновероятность 0 и 1). Это позволяет устранить всплески потребления и рассеивания энергии, сведя их к некоторому среднему уровню.

Для 1000BASE-T (Gigabit Ethernet) например используется кодировка 8B/10B. Выходную последовательность бит генерит скремблер (шифровальщик).


1. SGMII Autonegotiation (МАС-PHY) нужен чтобы МАС получил от PHY режим работы, на который PHY ранее договорился со своим линк-партнером на кабеле в результате PHY-PHY Autonegotiation. Опираясь на эти данные, ПО хоста настраивает МАС на работу в заданном режиме. Если SGMII Autonegotiation выключить, то достаточно блок МАС настроить на работу в заданный режим Speed и Duplex!

2. Выключить PHY-PHY Autonegotiation в 1000BASE-T нельзя, процедура обязательно необходима согласно стандарта IEEE! При выключении Autonegotiation с ручной настройкой на 1000BASE-T:

Такое же поведение наблюдается если подключить PHY не к РС, а к соседнему порту 1923КХ028.

3. Autonegotiation для 1000BASE-T выполняет:

Регистры PHY позволяют включить ручной режим для выбора Master/Slave. (Master рекомендуется для многопортовых устройств, таких как switch и router. PC рекомендуется быть Slave.)

В процессе Autonegotiation, когда абоненты выбрали скорость, Master/Slave и Pause, происходит переключение на заданную скорость (1000BASE-T) и затем происходит Link Training, т.е. тестирование соединения на новой скорости. Max PHY trainitg time составляет 750-1000ms. В случае неудачи тестирования линии, выжидается некоторый период и Autonegotiation запускается заново.

4. Если установить Link на 1000BASE-T не удается за некоторое количество попыток, то существует опция перехода на 100BASE-T. (Такое может произойти, если подключен кабель только с 2-мя витыми парами.) В Marvell_88E1111 эта опция называется Downshift (Register 20.8), количество попыток (Register 20.11:9).

В TI_dp83867e эта опция называется Speed Optimization. SPEED_OPT_ATTEMPT_CNT (CFG2.11:10) - 1000BASE-T link establishment attempt failures prior to performing Speed Optimization. Флаг SPEED_OPT_STATUS (PHYSTS.7) показывает закончилась ли процедура Autonegotiation с понижением скорости или нет.


Опцию Autonegotiation выключают, когда необходимо вручную, принудительно настроить PHY на скорость 100Mbps или 10Mbps с необходимым дуплексом. Выключение производится в регистре PHY BMCR(0x0000) бит 12 (AUTO-NEGOTIATION ENABLE). Тогда в неподключенный кабель будет транслироваться сигнал IDLE. (Если Autonegotiation включен, то в кабеле наблюдается сигнал FLP (Fast Link Pulse).) Для 10BASE-T сигналом IDLE является сигнал NLP (Normal Link Pulse). Для Для 100BASE-T сигнал IDLE выглядит сложнее (кликабельно):

При подключении кабеля к абоненту, детекция Link_Up происходит благодаря механизму Parallel Detection. Приемник передает входной сигнал на оба тракта 10BASE-T и 100BASE-T. Тот тракт, блок PMA которого признает валидным полученный сигнал, выставляет Link_UP и становится рабочим. Схематично это показано на картинке для случая получения IDLE сигнала на 100Mbps.

Таким образом, без проведения Autonegotiation абоненты могут подключиться друг к другу на определенной скорости и успешно обмениваться данными. В устройствах не поддерживающих Autonegotiation обработка Link_UP производится блоком Parallel Detection.

Ручное выставление скорости 1000Mbps без Autonegotiation невозможно. 1000BASE-T требует обязательного проведения Autonegotiation! Parallel Detection для гигабитного режима не предусмотрен, по крайней мере официально.

Предположим, в качестве начальных условий, что два абонента соединены по кабелю и успешно обмениваются данными. Между фреймами обмена данными приемники каждого абонента транслируют фреймы IDLE, чтобы приемники видели что подключение есть и находились в состоянии Link_Up даже если абоненты ничего не посылают какое-то время.

Теперь, если отключить кабель от одного из разъемов, то оба партнера должны перейти в состояние Link_Down и запустить процедуру Autonegotiation. При этом:

  1. Сначала отрабатывает break_link_timer, осуществляющий задержку на 1,2 - 1,5 сек. На это время передатчик прекращают какое-либо вещание на линию. Цель этого в том, чтобы возможно подключенные 10BASE-T абоненты заметили что активность на линии пропала и перешли в Link_Down.
  2. После отработки break_link_timer передатчик начинает транслировать FLP (Fast Link Pulse) bursts. Это пачки по 17 NLP импульсов, с периодом ~16мс между пачками. Между 17-тью основными импульсами внутри пачки, дополнительными импульсами передаются биты возможностей устройства по Autonegotiation, т.е. биты 16-ти разрядного Link Code Word (LCW, также называются страницами Page). Биты передаются нулевым битом вперед. Наличие промежуточного испульса это "1", отсутствие - это "0". Таким образом, в пачке может быть от 17 до 33 импульсов. Значения, полученные из LCW, сохраняются в "Link-Partner" регистрах PHY.
    (17 импульсов занимает передача NormalPage в стандарте 802.3. В стандарте IEEE 802.3ap-2007 обмен происходит Extended Page: 49 основных испульсов позволяют передать 48 бит данных)
  3. Когда приемник считывает подряд три одинаковых пачки импульсов, он считает что получил достоверное LCW и сохраняет его в свой текущий "Link-Partner" регистр. После этого абонент в своем LCW транслирует бит подтверждения acknowledge. LCW c подтверждением посылается от 6-ти до 8 раз. Первым словом транслируется Base Link Code Word:
    • 0–4: Стандарт в котором передается LCW, это IEEE 802.3 или IEEE 802.9;
    • 5–12: Возможности абонента в режимах 100BASE-T и 10BASE-T. "1" - режим поддерживается, "0" - не поддерживается:
      • 5: 10BASE-T
      • 6: 10BASE-T Full Duplex
      • 7: 100BASE-TX
      • 8: 100BASE-TX Full Duplex
      • 9: 100BASE-T4
      • 10: Pause - приостановка передатчика при приеме фрейма паузы от партнера
      • 11: Ассимметричная Pause pause для Full Duplex
      • 12: reserved
    • 13: remote fault: "1" - обнаружен сбой связи
    • 14: acknowledge: Получено не менее 3-х одинаковых LCW. (LCW принято и можно переходить к трансляции следующего слова.)
    • 15: next page: "1" - у абонента ест следующее LCW (Page) для обмена. "0" - у абонента нет следующей страницы, Autonegotiation пора заканчивать.
  4. Если у обоих абонентов выставлен 15-й бит (next page), то начинается трансляция следующей страницы. И так далее до тех пор, пока у кого-то из абонентов не будет следующей страницы. Полученные значения LCW сохраняются в регистрах "Link-Partner".
  5. После окончания обмена рекомендациями и поддерживаемыми возможностями, абоненты устанавливают обоюдно поддерживаемую скорость и дуплекс согласно таблице приоритетов:
    • 1000BASE-T Full Duplex (highest)
    • 1000BASE-T
    • 100BASE-T2 Full Duplex
    • 100BASE-T2
    • 100BASE-TX Full Duplex
    • 100BASE-T4
    • 100BASE-TX
    • 10BASE-T Full Duplex
    • 10BASE-T (lowest)
  6. После этого выполняется Link Trainig (PHY Training), т.е. проверка что линия (PHY, кабель и т.д.) работает на установленной скорости. См. "Startup protocol for 1000BASE-T" и про настройку "глаза" в статье "What is link training and when should I use it?"
  7. Устанавливается статус Link_UP, абонент готов к обмену данными на установленной скорости и дуплексе. Если сетевой стек данные не посылает, то прередатчик транслирует IDLE фреймы чтобы показать партнеру свое присутствие на линии.

Итого, основные задержки при Autonegotiation складываются из break_link_timer, задержки на обмен страницами, Link Trainig. Типовые значения:

PHY break_link_timer Pages Exchange Max Link Trainig
100BASE-T 1200 - 1500 ms ~210 ms 750 - 1000 ms
1000BASE-T 1200 - 1500 ms ~850 ms 750 - 1000 ms

Для 100BASE-T важен обмен следующими регистрами:

Для 1000BASE-T к предыдущим регистрам добавляется обмен страницами, отображаемыми в регистрах:

ИТОГО, в 1000BASE-T Autonegotiation выполняет следущие согласования:

Для наглядности того, что после Autonegotiation, при переходе на 1000BASE-T еще много всего происходит, приведу картинку из IEEE - "Startup protocol for 10GBASE-T".

Все эти операции относятся к пункту Link Trainig (PHY Training) в нашем перечне операций при Autonegotiation. Т.е. когда Autonegotiation заканчивается тем, что абоненты договорились работать в 1000BASE-T и определились кто Master и Slave, то

В Training настраиваются эквалайзеры, АЦП, фильтры, фазы…, необходимо серьезно погружаться в аналоговую специфику чтобы в этом разбираться.

Типовые сигналы

Вид типовых сигналов для разных скоростей, взято из TI: DP83869HM High Immunity 10/100/1000 Ethernet Physical Layer Transceiver With Copper and Fiber Interface

Литература: