Ethernet для микроконтроллера
Три пути в проводную сеть: SPI-контроллер с аппаратным стеком TCP/IP (WIZnet W5500), SPI-контроллер MAC + PHY без стека (Microchip ENC28J60) и встроенный MAC микроконтроллера STM32 или ESP32 с внешней микросхемой физического уровня по RMII. Сравниваем скорость, нагрузку на процессор, память и потребление, разбираем тактирование RMII, страп-выводы PHY, трансформатор и разводку — по даташитам WIZnet, Microchip, TI, ST и Espressif.
Обновлено Редакция GAW
Подключить микроконтроллер к проводной сети можно тремя способами, и они различаются не только набором микросхем. В первом весь сетевой стек живёт в отдельной микросхеме, а микроконтроллер лишь пишет и читает данные по SPI — так работает WIZnet W5500. Во втором отдельная микросхема берёт на себя только кадры Ethernet — Microchip ENC28J60, — а протоколы IP, TCP и UDP выполняет программа микроконтроллера. В третьем контроллер кадров (MAC) уже встроен в микроконтроллер — STM32F4, STM32F7, STM32H7, ESP32, — а снаружи ставят только микросхему физического уровня (PHY), трансформатор и разъём.
Как обжать кабель, какие контакты RJ-45 заняты в 100BASE-TX и как устроен PoE — на странице распиновки RJ-45. Здесь — сторона платы: от выводов микроконтроллера до разъёма.
Коротко
- W5500 — MAC, PHY 10/100 Мбит/с и аппаратный стек TCP/IP в одной микросхеме: 8 сокетов, 32 Кбайт буферов, SPI в режимах 0 и 3, гарантированно до 33,3 МГц.
- ENC28J60 — MAC и PHY только 10BASE-T, буфер 8 Кбайт, SPI до 20 МГц; стек TCP/IP — на микроконтроллере; у ревизии B7 16 ошибок кристалла из документа Microchip.
- Встроенный MAC + PHY — 10/100 Мбит/с, кадры идут в ОЗУ через собственный DMA контроллера; к PHY — 7 линий RMII плюс MDC и MDIO.
- RMII требует опорный такт 50 МГц, общий для MAC и PHY: от отдельного генератора, от PHY с умножителем (LAN8720A из кварца 25 МГц) или от MAC.
- Страп-выводы PHY защёлкиваются при сбросе: адрес на шине MDIO, режим, источник такта. Ошибочный уровень на них — частая причина «PHY не отвечает».
- Линия к разъёму — дифференциальные пары 100 Ом, трансформатор 1:1 со средней точкой, у PHY с токовым выходом — резисторы 49,9 Ом и средняя точка передающей обмотки к питанию; как подключать приёмную пару, смотрите по схеме конкретного PHY.
Три способа подключить Ethernet
Сеть Ethernet на плате делится на три слоя. PHY (физический уровень) превращает биты в сигналы на витой паре и обратно, следит за наличием связи и договаривается с коммутатором о скорости. MAC собирает кадры: добавляет преамбулу и контрольную сумму CRC, фильтрует чужие адреса, в полудуплексе разрешает коллизии. Выше работает стек TCP/IP: ARP, IP, ICMP, TCP, UDP, DHCP, а поверх них — HTTP, MQTT, Modbus TCP.
| W5500 | ENC28J60 | MAC микроконтроллера + PHY | |
|---|---|---|---|
| Что внутри внешней микросхемы | PHY + MAC + стек TCP/IP | PHY + MAC | только PHY |
| Скорость линии | 10 и 100 Мбит/с | 10 Мбит/с | 10 и 100 Мбит/с |
| Связь с микроконтроллером | SPI, режимы 0 и 3 | SPI, до 20 МГц | RMII (7 линий) или MII (16 линий) + MDC/MDIO |
| Стек TCP/IP | аппаратный: TCP, UDP, IPv4, ICMP, ARP, IGMP, PPPoE | программный на МК (lwIP, uIP и др.) | программный на МК (обычно lwIP) |
| Нагрузка на процессор | низкая: чтение и запись буферов сокетов | высокая: каждый кадр проходит через SPI и стек | средняя: кадры переносит DMA, протоколы — процессор |
| Память на стороне МК | только буферы приложения | буферы кадров и стека | дескрипторы DMA, буферы кадров и стека |
| Число соединений | 8 аппаратных сокетов | ограничено ОЗУ МК | ограничено ОЗУ МК |
| Требования к МК | любой с SPI | любой с SPI и ОЗУ под стек | МК с MAC Ethernet |
| Состав платы | W5500, кварц 25 МГц, трансформатор, RJ-45 | ENC28J60, генератор или кварц 25 МГц, трансформатор, RJ-45 | PHY, источник 50 МГц, трансформатор, RJ-45; МК в корпусе с выводами ETH |
Таблица сведена по даташитам из списка источников. Цен в ней нет намеренно: они меняются быстрее, чем статья. Качественно — у SPI-вариантов меньше требований к микроконтроллеру, у варианта со встроенным MAC — к внешней обвязке, но нужен более крупный микроконтроллер.
W5500: аппаратный стек TCP/IP по SPI
W5500 — контроллер WIZnet, в котором объединены PHY 10BASE-T/100BASE-TX, MAC и стек TCP/IP, реализованный логикой, а не программой. Микроконтроллер открывает сокет записью в регистры, указывает адрес и порт, кладёт данные в буфер передачи и даёт команду SEND — дальше TCP-сегменты, подтверждения и повторы W5500 обрабатывает сам.
Сокеты и память. Восемь независимых аппаратных сокетов работают одновременно. Под буферы — 32 Кбайт: 16 Кбайт на передачу и 16 Кбайт на приём. После сброса каждый сокет получает по 2 Кбайт в каждую сторону; регистры Sn_TXBUF_SIZE и Sn_RXBUF_SIZE перераспределяют память блоками 0, 1, 2, 4, 8 или 16 Кбайт, но сумма по восьми сокетам не должна превышать 16 Кбайт в каждую сторону, иначе даташит обещает ошибки приёма и передачи. Если нужно одно быстрое соединение, разумно отдать ему 8 или 16 Кбайт и уменьшить остальные.
Протоколы. Аппаратно поддержаны TCP, UDP, IPv4, ICMP, ARP, IGMP и PPPoE. Фрагментация IP не поддерживается, IPv6 в списке нет. Для своих протоколов есть режим MACRAW — сокет получает и отправляет сырые кадры Ethernet; по даташиту он доступен только сокету 0. В этом режиме поверх W5500 можно запустить и программный стек, но тогда теряется главное его преимущество.
SPI. W5500 — ведомое устройство SPI в режимах 0 и 3, данные старшим битом вперёд. Кадр SPI состоит из 16-битного адреса, управляющего байта (номер блока регистров или буфера, чтение или запись, режим) и данных; при последовательном чтении адрес увеличивается сам. Есть два режима:
- VDM (переменная длина) — линия выбора ведомого SCSn управляется микроконтроллером, длина данных любая, шину SPI можно делить с другими устройствами.
- FDM (фиксированная длина) — SCSn постоянно на земле, за одну посылку передаются 1, 2 или 4 байта, шина отдана W5500 целиком.
Таблица таймингов даёт тактовую частоту SCLK в виде «80/33,3 МГц»: 80 МГц — расчётный предел, а 33,3 МГц — частота, которую WIZnet проверила на стабильном сигнале и гарантирует. На длинных дорожках и при большой ёмкости линии MISO выше 33 МГц не рассчитывайте. Наша оценка сверху: 33,3 МГц SPI — это 33,3 Мбит/с сырого потока, из которых часть уходит на 3 байта заголовка каждой посылки. Значит, 100 Мбит/с на линии через SPI не прокачать — реальная скорость обмена определяется SPI и программой микроконтроллера.
Обвязка. Кварц 25 МГц (нагрузочная ёмкость 18 пФ, точность ±30 ppm), резистор 12,4 кОм 1 % от вывода EXRES1 к аналоговой земле, трансформатор с коэффициентом 1:1 и индуктивностью 350 мкГн для приёма и передачи. Питание 2,97–3,63 В, входы допускают 5 В. Режим PHY (автосогласование, фиксированная скорость и дуплекс, выключение) задают выводы PMODE[2:0] или регистр PHYCFGR. Автоматической смены пар (Auto-MDIX) у W5500 нет: по даташиту к коммутатору подключают прямым кабелем, к другому устройству без Auto-MDIX — перекрёстным. Современные коммутаторы Auto-MDIX умеют сами, поэтому на практике это всплывает при соединении двух плат напрямую.
ENC28J60: MAC и PHY 10BASE-T по SPI
ENC28J60 старше W5500: первая редакция его даташита вышла в 2006 году, W5500 — в 2013-м. Внутри — MAC и PHY 10BASE-T, буфер кадров 8 Кбайт с двумя портами, собственный DMA для копирования внутри буфера и аппаратный подсчёт контрольной суммы. Стека TCP/IP нет: микроконтроллер читает принятые кадры по SPI целиком и разбирает их сам — с помощью lwIP, uIP или похожей библиотеки. Поэтому ENC28J60 подходит микроконтроллерам с запасом ОЗУ под буферы и стек.
Главные ограничения — из первой страницы даташита:
- Только 10 Мбит/с. К сетям 100 и 1000 Мбит/с микросхема подключается, но работает на 10BASE-T.
- SPI до 20 МГц. Сырой поток SPI вдвое быстрее линии, но принятый кадр запроса нужно прочитать по SPI, кадр ответа — записать по SPI, а между ними ещё работает стек.
- Питание 3,1–3,6 В, входы допускают 5 В. Входы CS, SCK, SI и RESET допускают 5 В, а для микроконтроллера с питанием 5 В нужен однонаправленный сдвигатель уровня на выходах ENC28J60 — SO, INT и CLKOUT, если он используется: Microchip предлагает 74HCT08 или 74ACT125 (разд. 2.5, рис. 2-4–2-6 даташита). Буфер с третьим состоянием позволяет делить шину SPI с другими устройствами. Подробнее в статье о логических уровнях.
- Такт 25 МГц с точностью 50 ppm — кварц или внешний генератор.
Потребление. По таблице постоянных характеристик ENC28J60 при передаче потребляет 160 мА типично и 180 мА максимум (при 3,3 В), без передачи — 120 мА, в спящем режиме — 1,2 мА типично. Наш расчёт: 160 мА × 3,3 В ≈ 0,53 Вт. Сравнивать с другими микросхемами нужно осторожно: даташит не уточняет, входит ли в эту цифру ток передатчика через трансформатор, а Microchip для LAN8720A его прямо исключает.
Обвязка линии (разд. 2.4 и рис. 2-4 даташита): резистор 2,32 кОм 1 % от RBIAS к земле — он задаёт амплитуду передатчика; конденсатор 10 мкФ с малым ESR на VCAP (минимум 1 мкФ) — это выход внутреннего стабилизатора 2,5 В, внешнюю нагрузку к нему подключать нельзя; по два резистора 49,9 Ом 1 % на приёмную и передающую пары; трансформаторы 1:1 со средней точкой. К 3,3 В через ферритовую бусину не меньше чем на 80 мА идут только средняя точка передающей обмотки и общая точка резисторов TPOUT. Общая точка резисторов TPIN соединяется с землёй через конденсатор 0,1 мкФ, к питанию её не подключают. Требования к трансформатору (табл. 16-5): индуктивность первичной обмотки не меньше 350 мкГн при подмагничивании 8 мА, изоляция 1,5 кВ. Синфазный дроссель между выводами TPOUT и трансформатором Microchip ставить не рекомендует — только между трансформатором и разъёмом.
Ошибки кристалла ENC28J60
У ENC28J60 длинный список ошибок кристалла: документ DS80349C перечисляет 19 ошибок для ревизий B1, B4, B5 и B7 и ещё 3 несоответствия стандарту IEEE 802.3. Ревизию читают из регистра EREVID (банк 3, адрес 12h): у B7 там 0000 0110. К текущей ревизии B7 относятся 16 ошибок, все три несоответствия стандарту исправлены. Самые важные для драйвера:
| № | Что происходит | Обход по Microchip |
|---|---|---|
| 2 | После команды сброса по SPI бит CLKRDY не сбрасывается, и опрос его не показывает готовность | после сброса ждать не меньше 1 мс |
| 5 | При записи ERXST или ERXND внутренний указатель записи иногда становится 0000h | буфер приёма размещать с адреса 0000h, передачу — после него |
| 6 | Флаг PKTIF (есть принятый кадр) ненадёжен | проверять счётчик кадров EPKTCNT; вывод INT при этом срабатывает правильно |
| 7 | Автоматическое исправление полярности приёмной пары не работает | на плате не путать TPIN+ и TPIN− |
| 12 | В полудуплексе после аварийного прерывания передачи логика передачи может зависнуть, TXRTS остаётся установленным | перед каждой передачей сбрасывать логику передачи битом ECON1.TXRST |
| 13 | В полудуплексе импульс проверки связи иногда принимается за коллизию; если передано больше MACLCON2 байт, кадр теряется без повтора | программный повтор при поздней коллизии, ожидать и TXIF, и TXERIF |
| 14 | Чётное значение в ERXRDPT портит кольцевой буфер приёма | записывать только нечётные адреса: указатель следующего кадра минус 1 |
| 17 | Подсчёт контрольной суммы через DMA во время приёма обрывает принимаемый кадр | не считать контрольную сумму через DMA, только программно; копирование через DMA не затронуто |
Только ревизий B1 и B4 касаются три ошибки (1, 3 и 8) и все три несоответствия стандарту. Две из них часто пересказывают в описаниях ENC28J60 как актуальные. Ненадёжная работа с регистрами MAC при частоте SPI ниже 8 МГц (ошибка 1) по таблице Microchip затрагивает только B1 и B4. Резистор RBIAS 2,7 кОм вместо 2,32 кОм (ошибка 8) тоже нужен только старым ревизиям: для B5 и B7 верно значение из даташита. Из остальных ошибок B7 для драйвера важна № 15: бит поздней коллизии LATECOL может не устанавливаться, и её признак берут из слова состояния передачи (бит 29) — вместе с обходом ошибки 13. Прочие касаются светодиодов, внутренней петли, фильтра по шаблону и энергосберегающего режима; обходы для всех приведены в DS80349C.
Встроенный MAC и внешний PHY
Если в микроконтроллере есть MAC Ethernet, внешняя часть сводится к микросхеме PHY. Кадры между MAC и памятью переносит собственный DMA контроллера Ethernet по цепочке дескрипторов, поэтому процессор не копирует каждый байт, а работает только со стеком. Скорость линии — полные 100 Мбит/с, но сколько из них достанется приложению, зависит от стека, частоты ядра и размера буферов.
STM32: блок ETH
MAC Ethernet по данным ST есть, например, у STM32F107, STM32F207/217, STM32F407/417, F427/437, F429/439 и F469/479, у STM32F745/746/750/756, F765/767/769 и F777/779, у части STM32H5 и STM32H7 — линейки и корпуса смотрите в обзоре семейств STM32 и на страницах STM32F1, STM32F2, STM32F4, STM32F7 и STM32H7. Ниже — блок ETH по RM0090, который описывает STM32F405–F439. По RM0090 (гл. 33) блок ETH у STM32F4 поддерживает 10 и 100 Мбит/с в полудуплексе и дуплексе, интерфейсы MII и RMII, аппаратную вставку и проверку контрольных сумм IPv4, TCP, UDP и ICMP, отметки времени IEEE 1588-2008. Между MAC и DMA стоят FIFO по 2 Кбайт на приём и передачу, один дескриптор DMA описывает до 8 Кбайт данных.
Несколько требований, которые легко пропустить:
- Частота шины AHB — не меньше 25 МГц, пока работает Ethernet.
- MII или RMII выбирают битом MII_RMII_SEL в регистре SYSCFG_PMC, пока блок ETH в сбросе или до включения его тактирования. Поставить бит после запуска — частая ошибка самописной инициализации.
- Такт RMII 50 МГц приходит на вывод RMII_REF_CLK — тот же, что MII_RX_CLK. По RM0090 его дают от внешнего генератора 50 МГц или от PHY со встроенным умножителем (PLL). Вывод MCO RM0090 описывает как источник 25 МГц для PHY в режиме MII.
- Частоту MDC задаёт делитель частоты AHB (табл. 188 RM0090: AHB/16, /26, /42, /62 или /102 в зависимости от диапазона частот). Делитель выбирают так, чтобы MDC не превышала предел PHY — у LAN8720A это 2,5 МГц.
Стек TCP/IP поверх MAC — программный, обычно lwIP; про уровни абстракции HAL и LL — в статье «HAL, LL и регистры STM32».
ESP32: EMAC
У ESP32 есть свой MAC Ethernet (в даташитах ESP32-S2, ESP32-S3, ESP32-C3 и ESP32-C6 его нет): 10 и 100 Мбит/с, интерфейсы MII (17 сигналов) и RMII (9 сигналов), отдельный DMA, FIFO по 512 32-битных слов на приём и передачу, аппаратный PTP по IEEE 1588-2008. ESP-IDF поддерживает только RMII. Линии данных RMII закреплены за определёнными выводами через IO MUX, а MDC и MDIO можно вывести на любые свободные GPIO через матрицу GPIO.
Тактирование RMII у ESP32 — главный источник проблем, и документация ESP-IDF разбирает его подробно:
- Внешний такт (EMAC_CLK_EXT_IN) — 50 МГц от PHY или генератора. Вход возможен только на GPIO0, а GPIO0 — страп-вывод ESP32: если при включении на нём низкий уровень, чип уходит в режим загрузки прошивки. Поэтому источник такта на время загрузки отключают: генератор с выводом разрешения или PHY, удерживаемый в сбросе (Espressif предупреждает, что не каждый PHY в сбросе молчит).
- Внутренний такт (EMAC_CLK_OUT) — 50 МГц от звуковой PLL (APLL), которая тогда недоступна для I²S. Такт выводится на GPIO0 (напрямую, в обход EMAC — с некоторыми PHY это работает плохо) или на GPIO16 и GPIO17 (через EMAC, но эти выводы заняты, если на плате есть PSRAM). Ограничение ESP32 из документации: если вместе с Ethernet работают Wi-Fi или Bluetooth, ESP32 не должен быть источником REF_CLK — такт становится нестабильным. Тогда такт даёт PHY или внешний генератор.
Адрес PHY в драйвере ESP-IDF задают числом от 0 до 15 или −1 для автоматического поиска, если на шине MDIO один PHY. Буферы кадров — в ОЗУ, доступной DMA, каждый дескриптор занимает 32 байта; размер буфера по умолчанию — 512 байт. Если трафик состоит из коротких частых кадров, документация советует увеличить число буферов. Стек — lwIP. Кроме встроенного EMAC, драйвер Ethernet в ESP-IDF работает и с внешними SPI-контроллерами: в документации пример с DM9051, драйверы других SPI-модулей Espressif распространяет через репозиторий esp-eth-drivers.
Интерфейс RMII
RMII (Reduced MII) соединяет MAC и PHY семью сигнальными линиями вместо 16 у MII:
| Сигнал | Направление | Назначение |
|---|---|---|
| REF_CLK | от источника к MAC и PHY | опорный такт 50 МГц, общий для приёма и передачи |
| TX_EN | MAC → PHY | разрешение передачи |
| TXD[1:0] | MAC → PHY | данные передачи, по 2 бита за такт |
| CRS_DV | PHY → MAC | несущая есть / данные приёма действительны |
| RXD[1:0] | PHY → MAC | данные приёма |
| RX_ER | PHY → MAC | ошибка приёма (необязательный) |
| MDC, MDIO | MAC ↔ PHY | шина управления (SMI): такт и данные |
Наш расчёт: 2 бита × 50 МГц = 100 Мбит/с. На 10 Мбит/с такт тот же, а данные меняются раз в 10 тактов (так описывает RMII в даташите DP83848). Такт должен быть одним и тем же для MAC и PHY: передатчик PHY работает прямо от REF_CLK, а на приёме PHY выравнивает восстановленный из линии такт с REF_CLK через эластичный буфер. Требования LAN8720A к REF_CLK (табл. 5-12): 50 МГц ±50 ppm, скважность 40–60 %, джиттер не больше 150 пс от пика до пика.
MDC и MDIO — шина управления, общая для PHY с разными адресами. По ней читают регистры состояния (есть ли связь, какая скорость и дуплекс согласованы) и пишут настройки. Набор основных регистров стандартный (IEEE 802.3, clause 22), поэтому базовые функции работают даже с «чужим» драйвером PHY — ESP-IDF так и предлагает универсальный драйвер. Предел частоты MDC зависит от PHY: у LAN8720A период не меньше 400 нс, то есть до 2,5 МГц, у DP83848 — до 25 МГц.
PHY: LAN8720A и DP83848
LAN8720A
Microchip LAN8720A — PHY 10/100 Мбит/с в корпусе QFN 4×4 мм с 24 выводами, только с RMII. Есть автоматическая смена пар HP Auto-MDIX, встроенный стабилизатор 1,2 В, питание ввода-вывода от 1,6 до 3,6 В. Особенность — два режима такта, переключаемые страп-выводом nINTSEL:
| REF_CLK In (nINTSEL = 1) | REF_CLK Out (nINTSEL = 0) | |
|---|---|---|
| Источник 50 МГц | внешний генератор на XTAL1/CLKIN, им же тактируется MAC | сам LAN8720A из кварца 25 МГц, им тактируется и MAC |
| Вывод nINT/REFCLKO | выход прерывания | выход 50 МГц для MAC |
| Соответствие RMII | да — «традиционная» схема | нет: Microchip требует проверить тайминги MAC и PHY расчётом |
| По умолчанию | да, через внутреннюю подтяжку | нужна внешняя подтяжка к земле |
Режим REF_CLK Out экономит генератор 50 МГц: Microchip подчёркивает, что кварц 25 МГц на основной гармонике дешевле кварца 50 МГц на третьей гармонике. Платить за это приходится прерыванием: вывод nINT превращается в выход такта.
Страп-выводы LAN8720A совмещены с другими функциями и защёлкиваются при включении питания и по фронту nRST:
- PHYAD0 на выводе RXER — младший бит адреса на шине MDIO: 0 или 1 (по умолчанию 0).
- MODE[2:0] на RXD0, RXD1 и CRS_DV — режим после сброса: 111 — автосогласование со всеми скоростями, остальные коды фиксируют скорость и дуплекс или выключают PHY.
- REGOFF на LED1 — выключение встроенного стабилизатора 1,2 В (тогда 1,2 В подают снаружи на VDDCR).
- nINTSEL на LED2 — режим такта, см. таблицу выше.
Подтяжки страпов делают к VDDIO, а REGOFF и nINTSEL — к VDD2A. Полярность светодиодов LED1 и LED2 зависит от уровня страпа: если вывод подтянут вверх, светодиод включается низким уровнем, и наоборот, — поэтому схему светодиода рисуют с учётом страпа. Микросхема берёт значения страпов при сбросе с внутренних резисторов, и Microchip предупреждает: если внешняя нагрузка не даёт уровню установиться к моменту защёлкивания, PHY запомнит не то. Наш вывод: выводы RXD0, RXD1, CRS_DV и RXER подключены к микроконтроллеру, и если в момент сброса PHY вывод МК уже настроен как выход или с подтяжкой, страп будет испорчен. Безопасно держать PHY в сбросе выводом nRST, пока микроконтроллер не настроит свои выводы.
Внешние компоненты: резистор 12,1 кОм 1 % от RBIAS к земле, по два резистора 49,9 Ом на пары TXP/TXN и RXP/RXN, трансформатор 1:1, со стороны кабеля — цепь из резисторов 75 Ом и конденсатора 1000 пФ на 3 кВ (рис. 3-18 даташита).
DP83848
TI DP83848 — PHY 10/100 Мбит/с в корпусе на 48 выводов с интерфейсами MII и RMII, Auto-MDIX и потреблением меньше 270 мВт типично. В режиме RMII ему нужен генератор 50 МГц на входе X1: кварц 50 МГц не поддерживается. Удобная деталь — вывод CLK_OUT: в режиме RMII на нём 50 МГц, которыми можно тактировать MAC без второго генератора.
Страпы DP83848:
- MII_MODE на RX_DV: высокий уровень — RMII (при SNI_MODE = 0), по умолчанию (внутренняя подтяжка вниз) — MII. Для RMII подтяжка вверх обязательна.
- PHYAD[4:0] на COL и RXD0–RXD3: адрес от 0 до 31, по умолчанию 00001 (0x01). Адрес 0 переводит PHY в режим изоляции от MII.
- AN_EN, AN1, AN0 на выводах светодиодов — автосогласование или фиксированный режим; TI требует подключать их через резисторы 2,2 кОм, никогда напрямую к земле или питанию.
- MDIX_EN на RX_ER — подтяжка вниз выключает Auto-MDIX.
В руководстве по разводке TI объясняет выбор 2,2 кОм: внутренние резисторы страпов — порядка 10–20 кОм, и внешний 2,2 кОм надёжно их перебивает. В шумных условиях TI советует ставить внешние 2,2 кОм и для значений по умолчанию.
Трансформатор, средняя точка и разъём
Между PHY и разъёмом всегда стоит трансформатор (в терминах даташитов — magnetics). Он обеспечивает гальваническую развязку от кабеля — у ENC28J60 требование 1,5 кВ, у TI 1500 В (среднеквадратичное значение) — и подавляет синфазную помеху. Обмотки 1:1 со средней точкой; хорошие сборки содержат и синфазный дроссель, TI его прямо рекомендует. Отдельные трансформаторы в корпусе SMD или разъём RJ-45 со встроенными трансформаторами (TI допускает его ради экономии места) — электрически одно и то же, но назначение выводов у разъёмов не стандартизовано: схему берут из даташита конкретного разъёма.
Как подключить среднюю точку, зависит от выходного каскада PHY.
- Токовый выход — ENC28J60, LAN8720A, DP83848. Передатчик втягивает ток через обмотку, и средняя точка передающей обмотки подключается к питанию: у ENC28J60 «Transformer Center Tap = 3.3V» (табл. 16-5) и ток постоянно течёт через оба вывода TPOUT, на схеме DP83848 — пометка «center tap is pulled to VDD». У LAN8720A и DP83848 к питанию идут все четыре резистора 49,9 Ом, рядом — конденсаторы 0,1 мкФ. У ENC28J60 к 3,3 В подключены только резисторы передающей пары, а общая точка приёмных резисторов идёт через 0,1 мкФ на землю (рис. 2-4). Ток через трансформатор не входит в потребление самой микросхемы: у LAN8720A Microchip отдельно указывает около 41 мА в режиме 100BASE-TX и 100 мА в 10BASE-T.
- Выход в режиме напряжения — например, TI DP83825I. Терминаторы MDI у него встроены, а схему подключения витой пары TI даёт свою. Схема для токового PHY с подтяжкой средней точки к питанию к такому PHY не подходит — перенося обвязку с одной микросхемы на другую, сверяйтесь с её даташитом.
Со стороны кабеля средние точки обмоток и неиспользуемые пары гасят цепью Боба Смита: резисторы 75 Ом и общий конденсатор 1000 пФ на землю корпуса, рассчитанный не меньше чем на 2 кВ (TI) или 3 кВ (схема LAN8720A). Цепь уменьшает шум от синфазных токов. Для PoE она в таком виде не подходит — TI оговаривает это отдельно; что такое PoE и какие пары он занимает — на странице RJ-45.
Разводка платы
Советы ниже — из руководства TI AN-1469 по разводке PHY, разделов разводки DP83825I и рекомендаций Microchip для ENC28J60.
Пары к трансформатору (MDI):
- Волновое сопротивление — 100 Ом дифференциально и 50 Ом каждой линии относительно земли. Для ENC28J60 Microchip требует 100 Ом, если пары не удаётся сделать короткими.
- Провода пары идут рядом и одной длины: разница длин превращает дифференциальный сигнал в синфазный и увеличивает излучение.
- Без отводов, по возможности без переходных отверстий и на одном слое: каждое переходное отверстие — скачок импеданса.
- Пары не пересекают разрывы опорного полигона — обратный ток пойдёт в обход.
- Резисторы 49,9 Ом и конденсатор 0,1 мкФ — у выводов PHY, переходным отверстием прямо к полигону питания (AN-1469 для PHYTER; у ENC28J60 приёмная пара подключается иначе, см. выше).
- Под трансформатором не прокладывают сигналы, под отдельным трансформатором вырезают полигоны.
- Земля корпуса (экран RJ-45) — отдельный остров, не перекрывающийся с землёй схемы. TI предлагает соединить их двумя резисторами 0 Ом типоразмера 1206 через зазор по обе стороны от RJ-45, а для DP83825I — конденсатором 1206: корпуса меньше 0805 могут дать пробой по воздуху при электростатическом разряде.
RMII и такт:
- Линии RMII — несимметричные, по даташиту DP83825I — 50 Ом относительно земли. Длина — как можно меньше: в AN-1469 TI рекомендует меньше 6 дюймов (около 15 см), а длины внутри шины — с разницей не больше 2 дюймов (около 5 см).
- На выходах MII TI рекомендует последовательные резисторы 50 Ом у источника сигнала.
- Такт 50 МГц — самая чувствительная линия. Espressif просит вести её как можно короче и подальше от радиочасти и катушек; TI в AN-1469 допускает последовательный резистор у выхода генератора: он может помочь по излучению.
Слои. Для PHY TI рекомендует плату минимум из четырёх слоёв со сплошными полигонами земли и питания. Мнение редакции: на двухслойной плате PHY обычно работает, но запас по излучению и помехоустойчивости меньше.
Питание и нагрев
| Микросхема | Ток или мощность по даташиту | Условия |
|---|---|---|
| W5500 | 128 мА — связь 100 Мбит/с, 132 мА — передача на 100 Мбит/с, 75–79 мА на 10 Мбит/с, 65 мА без связи, 13 мА в выключенном режиме | 3,3 В, 25 °C, типичные значения |
| ENC28J60 | 160 мА типично, 180 мА максимум при передаче; 120 мА без передачи; 1,2 мА во сне | 3,3 В |
| LAN8720A | 45 мА / 148 мВт в 100BASE-TX, 22 мА / 70 мВт в 10BASE-T (REF_CLK In, типично) | VDDIO = 1,8 В, стабилизатор выключен; без тока трансформатора, к нему добавляется около 41 мА (100BASE-TX) или 100 мА (10BASE-T) |
| DP83848 | меньше 270 мВт типично; в таблице постоянных характеристик 81 мА (Idd100) и 92 мА (Idd10), типичные значения | 3,3 В; обе строки в даташите подписаны «100BASE-TX», но по обозначению Idd10 — это 10 Мбит/с |
Наши расчёты по таблице; условия измерения у производителей разные, в первую очередь по току через трансформатор, поэтому сравнение приблизительное. W5500 при 3,3 В потребляет 0,42–0,44 Вт со связью 100 Мбит/с. ENC28J60 при передаче — около 0,53 Вт, хотя работает на 10 Мбит/с. Цифры LAN8720A сняты в самом экономичном режиме (ввод-вывод 1,8 В, внешний 1,2 В), и к ним прибавляется ток через трансформатор. Если питать всё от 3,3 В со встроенным стабилизатором, получается около 45 мА × 3,3 В + 41 мА × 3,3 В ≈ 0,28 Вт в 100BASE-TX и около 22 мА × 3,3 В + 100 мА × 3,3 В ≈ 0,4 Вт в 10BASE-T — оценка без учёта ввода-вывода и светодиодов. Для батарейного устройства Ethernet вообще неудобен — это прямо отмечено и в документации ESP-IDF; у всех микросхем из таблицы есть режимы выключения, но связь при этом пропадает.
Типичные ошибки
- Нет такта RMII или он не там. PHY с генератором 50 МГц, а MAC ждёт такт на другом выводе; у LAN8720A в REF_CLK Out такт выходит на nINT/REFCLKO, а не на XTAL. Симптом — кадры не ходят, а если такта нет у самого PHY, он не отвечает и по MDIO.
- Кварц вместо генератора. DP83848 в режиме RMII работает только от генератора 50 МГц.
- ESP32: такт на GPIO0 при старте. Генератор 50 МГц, подключённый к GPIO0 без отключения на время загрузки, отправляет чип в режим прошивки или в случайное состояние.
- ESP32 даёт REF_CLK при работающем Wi-Fi. Документация ESP-IDF прямо запрещает это сочетание.
- Неправильный адрес PHY. Адрес задан страпами, а драйвер ищет PHY по другому. У DP83848 по умолчанию 0x01, у LAN8720A — 0 или 1, адрес 0 у DP83848 означает изоляцию.
- Страпы испорчены микроконтроллером. Вывод МК на линии RXD или CRS_DV тянет уровень в момент сброса PHY — PHY стартует не в том режиме или с другим адресом.
- DP83848 остался в MII. Без подтяжки MII_MODE вверх PHY работает в MII, а MAC — в RMII.
- STM32: MII_RMII_SEL поставлен поздно — после включения такта ETH. Частота AHB ниже 25 МГц — тоже отказ.
- MDC быстрее, чем допускает PHY. У LAN8720A предел 2,5 МГц.
- Нет резисторов 49,9 Ом или неверная средняя точка. Пары без терминаторов отражают сигнал; у токового PHY без питания средней точки передатчик вообще не работает.
- Перепутана полярность приёмной пары у ENC28J60. Автоисправление полярности у него не работает (ошибка 7).
- W5500 и две платы напрямую. Без Auto-MDIX у W5500 нужен перекрёстный кабель, если у второй стороны тоже нет Auto-MDIX.
- Сумма буферов W5500 больше 16 Кбайт — ошибки приёма или передачи.
Как выбрать
- Микроконтроллер без MAC, несколько соединений, мало ОЗУ — W5500: стек в микросхеме, драйвер — работа с регистрами по SPI. Скорость ограничит SPI, а не линия.
- Нужен свой протокол или полный контроль над кадрами при 10 Мбит/с — ENC28J60 с программным стеком, но только с драйвером, в котором учтены ошибки кристалла. Для новой разработки чаще берут W5500 в режиме MACRAW или микроконтроллер с MAC.
- Нужны 100 Мбит/с, много соединений, TLS, веб-сервер — микроконтроллер с MAC (STM32F4/F7/H7) и PHY LAN8720A или DP83848, стек lwIP.
- Wi-Fi и проводная сеть в одном устройстве — ESP32 с LAN8720A, но с тактом RMII от PHY или генератора, не от ESP32.
Другие интерфейсы и сравнение по дальности и скорости — в разделе «Интерфейсы», протокол SPI, режимы и тайминги — в статье «SPI».
Частые вопросы
Что выбрать для микроконтроллера: W5500 или ENC28J60?
Для нового устройства обычно W5500. Он работает на 10 и 100 Мбит/с, сам ведёт TCP, UDP, ARP и ICMP в восьми аппаратных сокетах с буфером 32 Кбайт, и микроконтроллеру остаётся читать и писать данные по SPI. ENC28J60 — только MAC и PHY 10BASE-T: стек TCP/IP (lwIP, uIP) работает на микроконтроллере, нужна его ОЗУ и процессорное время, а у текущей ревизии кристалла B7 по документу Microchip 16 известных ошибок, которые обходят программно.
Можно ли подключить LAN8720 к любому микроконтроллеру?
Нет. LAN8720A — только физический уровень (PHY) с интерфейсом RMII: кадры Ethernet формирует MAC, а он должен быть в микроконтроллере. MAC с RMII есть, например, у STM32F107, STM32F207/217, STM32F407/417, F427/437, F429/439 и F469/479, у части STM32F7 и STM32H7 и у ESP32. К микроконтроллеру без MAC подключают SPI-контроллер вроде W5500 или ENC28J60.
Откуда брать такт 50 МГц для RMII?
Варианты три: отдельный генератор 50 МГц, который тактирует и PHY, и MAC; PHY, который сам делает 50 МГц из кварца 25 МГц (у LAN8720A — режим REF_CLK Out, но Microchip предупреждает, что его временные параметры не соответствуют спецификации RMII); или MAC, который выдаёт такт PHY — так умеет ESP32 через свою APLL, но Espressif не рекомендует этот режим при работающих Wi-Fi или Bluetooth. Кварц 50 МГц DP83848 в режиме RMII не поддерживает — только генератор.
Нужен ли трансформатор, если взять разъём RJ-45 со встроенными трансформаторами?
Отдельный — нет: такие разъёмы содержат те же трансформаторы 1:1 со средней точкой, часто и синфазные дроссели. TI в руководстве по разводке PHY прямо допускает их для экономии места. Важно, чтобы разводка средних точек и параметры трансформатора подходили к вашему PHY: у PHY с токовым выходом средняя точка передающей обмотки подключается к питанию — обычно 3,3 В, а у LAN8720A допускается и 2,5 В; точное значение — в даташите PHY.
Почему ENC28J60 теряет кадры или передача зависает?
Чаще всего это известные ошибки кристалла из документа Microchip DS80349. В полудуплексе логика передачи может зависнуть после аварийного прерывания передачи — перед каждой отправкой сбрасывают её битом TXRST. Флагу PKTIF нельзя верить — число принятых кадров берут из счётчика EPKTCNT. Чётное значение в ERXRDPT портит кольцевой буфер приёма, а сам буфер приёма должен начинаться с адреса 0000h. Хорошие драйверы уже содержат эти обходы.
Источники
- WIZnet. W5500 Datasheet, Version 1.1.0 — 2022; возможности, гл. 2 — SPI, режимы VDM и FDM, гл. 3.3 — память, Sn_RXBUF_SIZE и Sn_TXBUF_SIZE, Sn_MR — MACRAW, гл. 5.3–5.5 — питание, потребление, кварц, тайминги SPI (80 МГц расчётные, 33,3 МГц гарантированные), трансформатор, отсутствие Auto-MDIX
- Microchip. ENC28J60 Stand-Alone Ethernet Controller with SPI Interface, DS39662E — 2006–2012; возможности, разд. 2.4 — трансформатор, терминаторы, RBIAS, VCAP, рис. 2-4; разд. 16 — ток потребления, табл. 16-5 — требования к трансформатору, табл. 16-6 — SPI до 20 МГц
- Microchip. ENC28J60 Silicon Errata and Data Sheet Clarification, DS80349C — 2010; табл. 1–3 — ревизии B1–B7 и сводка 19 ошибок кристалла и 3 несоответствий IEEE 802.3, пп. 1–19 — описания и обходы
- Microchip. LAN8720A/LAN8720Ai Small Footprint RMII 10/100 Ethernet Transceiver with HP Auto-MDIX and flexPWR Technology, DS00002165C — 2024; разд. 3.7 — страп-выводы PHYAD0, MODE[2:0], REGOFF, nINTSEL, режимы REF_CLK In и REF_CLK Out; разд. 3.9 — схемы питания и подключения витой пары; табл. 5-2, 5-3 — потребление; табл. 5-12, 5-13 — требования к REF_CLK и тайминги SMI
- Texas Instruments. DP83848C/I/VYB/YB PHYTER QFP Single Port 10/100 Mb/s Ethernet Physical Layer Transceiver, SNLS266E — 2015; назначение выводов и страпов (MII_MODE, PHYAD, AN_EN, MDIX_EN), разд. 6.4 — RMII и SMI, разд. 7 — типовая схема витой пары, потребление
- Texas Instruments. AN-1469 PHYTER Design & Layout Guide, SNLA079D — 2006, ред. 2013; разд. 2 — разводка MDI, импеданс 100 Ом, терминация Боба Смита; разд. 5 — MII/RMII, длины дорожек; разд. 6 — такт; разд. 7 — страпы 2,2 кОм; разд. 8 — слои платы; разд. 10.2 — трансформаторы
- Texas Instruments. DP83825I Low Power 10/100Mbps Ethernet Physical Layer Transceiver, SNLS638C — 2018, ред. 2026; пример PHY с выходом в режиме напряжения и встроенными терминаторами MDI; разд. 8.2.2 — разводка RMII и MDI
- STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439, Rev 21 — гл. 33 — Ethernet: возможности MAC и DMA, FIFO по 2 Кбайт, частота AHB не ниже 25 МГц, SMI и делители MDC (табл. 188), MII и RMII, источники такта RMII, бит MII_RMII_SEL
- Espressif. ESP32 Series Datasheet, Version 5.3 — разд. 4.8.13 — Ethernet MAC: MII и RMII, DMA, FIFO по 512 слов, IEEE 1588; табл. выводов — сигналы EMAC
- Espressif. ESP-IDF Programming Guide v6.1: Ethernet (ESP32) — режимы REF_CLK (EMAC_CLK_EXT_IN, EMAC_CLK_OUT), GPIO0, GPIO16 и GPIO17, ограничение при Wi-Fi и Bluetooth, адрес PHY, буферы DMA, драйверы SPI-Ethernet, lwIP
Нашли ошибку?
Смотрите также
- RJ-45T568A и T568B, Ethernet, PoE, обжим
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR
- STM32F4Cortex-M4 с FPU: от F401 и F411 до F429 и F469 — линейки и распиновки
- ESP32: выводы и GPIO34 GPIO: функции, свободные выводы, только входы, флеш-память, strapping, JTAG, токи
- ИнтерфейсыUART, RS-232, RS-485, I²C, SPI, CAN: уровни, схемы, выбор
- PHY EthernetМикросхема физического уровня между MAC и кабелем
- MII и RMIIПараллельные интерфейсы между MAC и PHY Ethernet