Перейти к содержанию

Автосогласование (auto-negotiation) в Ethernet

Когда вставляют кабель, два устройства Ethernet за пару секунд договариваются, на какой скорости и в каком режиме работать. Этим занимаются их PHY, без участия программы, — но настройки и результат видны в регистрах.

Обновлено Редакция GAW

Автосогласование (auto-negotiation) — механизм Ethernet на витой паре, по которому два PHY на концах кабеля обмениваются сведениями о своих возможностях и выбирают наилучший общий режим: скорость 10 или 100 Мбит/с и дуплекс или полудуплекс. Механизм описан в IEEE 802.3, clause 28; сведения передаются пачками импульсов FLP (fast link pulse) до того, как пойдут данные (DP83848, разд. 6.3.1).

Как выбирается режим

Каждая сторона объявляет набор поддерживаемых режимов, и обе выбирают лучший общий по приоритету (DP83848, разд. 6.3.1.2):

  1. 100BASE-TX, дуплекс;
  2. 100BASE-TX, полудуплекс;
  3. 10BASE-T, дуплекс;
  4. 10BASE-T, полудуплекс.

Пачки FLP у DP83848 идут каждые 16 мс, каждая длится около 2 мс и состоит из импульсов по 100 нс с тактовыми импульсами через 125 мкс; вся процедура занимает около 2–3 с. Если связь пропала, PHY начинает согласование заново; при программном перезапуске DP83848 сначала прекращает передачу и импульсы связи примерно на 1,5 с, чтобы партнёр тоже заметил обрыв (разд. 6.3.1.4).

Регистры

Набор регистров стандартный и доступен по шине MDIO: в BMCR (0x00) автосогласование включают и перезапускают, в BMSR (0x01) видно, завершилось ли оно и есть ли связь, в ANAR (0x04) — что объявляет свой PHY, в ANLPAR (0x05) — что объявил партнёр. Записав в ANAR не все возможности, программа может ограничить скорость. Начальный набор задают страп-выводы: у DP83848 это AN_EN, AN1 и AN0 (подключаются через резисторы 2,2 кОм, а не напрямую — SNLA079, разд. 7), у LAN8720A — MODE[2:0], где 111 означает автосогласование со всеми скоростями.

Параллельное определение

Если партнёр не поддерживает автосогласование и работает в фиксированном режиме, PHY определяет его скорость по виду сигнала — это параллельное определение (parallel detection). Узнать так можно только скорость: дуплекс по сигналу не виден, и DP83848 записывает в ANLPAR признак режима без дуплекса (разд. 6.3.1.3, табл. 6-14). Поэтому смешивать автосогласование на одной стороне и ручной дуплекс на другой не стоит. Ручной режим отключает и Auto-MDIX: в принудительном режиме у DP83848 автоматическая смена пар не работает (разд. 6.3.2). Подключение PHY к микроконтроллеру разобрано в статье «Ethernet для микроконтроллера».

Частые вопросы

Сколько длится автосогласование?

У DP83848 — около 2–3 секунд, и столько же при параллельном определении (разд. 6.3.1.6). Поэтому сразу после включения программа не должна ждать связи в коротком цикле: состояние читают из регистра BMSR, пока не установится бит завершения автосогласования.

Что будет, если на одной стороне скорость задана вручную?

Сторона с автосогласованием попробует определить режим партнёра по его сигналу — это параллельное определение. Так узнаётся только скорость: у DP83848 в регистр ANLPAR записывается 0081h или 0021h, то есть объявленный партнёром режим 100BASE-TX или 10BASE-T без признака дуплекса. Наш вывод: если партнёр жёстко настроен на дуплекс, стороны окажутся в разных режимах — один в дуплексе, другой в полудуплексе.

Как переключить PHY с фиксированного режима на автосогласование программно?

У DP83848 недостаточно просто установить бит 12 (Auto-Negotiation Enable) регистра BMCR, если PHY стартовал в фиксированном режиме: TI требует сначала сбросить этот бит, а потом установить (разд. 6.3.1.5). Перезапуск уже идущего согласования — бит 9 того же регистра.

Источники

  1. Texas Instruments. DP83848C/I/VYB/YB PHYTER QFP Single Port 10/100 Mb/s Ethernet Physical Layer Transceiver, SNLS266E — разд. 6.3.1 — обмен возможностями пачками FLP, IEEE 802.3 clause 28, выбор лучшего общего режима; табл. 6-1 — выводы AN_EN, AN1, AN0: фиксированные режимы и объявляемые возможности; разд. 6.3.1.2 — приоритет 100BASE-TX FD, 100BASE-TX HD, 10BASE-T FD, 10BASE-T HD; регистры BMCR 0x00, BMSR 0x01, ANAR 0x04, ANLPAR 0x05, ANER, PHYSTS 0x10; разд. 6.3.1.3 — параллельное определение, ANLPAR 0081h или 0021h; разд. 6.3.1.4 — перезапуск битом 9 BMCR, break_link_timer около 1500 мс; разд. 6.3.1.5 — после принудительного режима бит 12 BMCR сначала сбросить, затем установить; разд. 6.3.1.6 — около 2–3 с; разд. 5, рис. 5-22 и таблица временных параметров FLP: импульс 100 нс, такты через 125 мкс, пачка 2 мс, период пачек 16 мс; табл. 6-14 — биты ANLPAR
  2. Microchip. LAN8720A/LAN8720Ai Small Footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX and flexPWR Technology, DS00002165C — разд. 1.2 — автосогласование для выбора лучшей скорости и дуплекса; разд. 3.7 — страп MODE[2:0] = 111: автосогласование со всеми скоростями
  3. Texas Instruments. AN-1469 PHYTER Design & Layout Guide, SNLA079D — разд. 7 — страп-выводы через резисторы 2,2 кОм

Нашли ошибку?