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.MAC ←SGMII Autoneg→ PHY(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. При этом:
Итого, основные задержки при 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
Литература: