#ifndef WLED_ETHERNET_H #define WLED_ETHERNET_H #ifdef WLED_USE_ETHERNET #include "pin_manager.h" // The following six pins are neither configurable nor // can they be re-assigned through IOMUX / GPIO matrix. // See https://docs.espressif.com/projects/esp-idf/en/latest/esp32/hw-reference/esp32/get-started-ethernet-kit-v1.1.html#ip101gri-phy-interface const managed_pin_type esp32_nonconfigurable_ethernet_pins[6] = { { 21, true }, // RMII EMAC TX EN == When high, clocks the data on TXD0 and TXD1 to transmitter { 19, true }, // RMII EMAC TXD0 == First bit of transmitted data { 22, true }, // RMII EMAC TXD1 == Second bit of transmitted data { 25, false }, // RMII EMAC RXD0 == First bit of received data { 26, false }, // RMII EMAC RXD1 == Second bit of received data { 27, true }, // RMII EMAC CRS_DV == Carrier Sense and RX Data Valid }; // For ESP32, the remaining five pins are at least somewhat configurable. // eth_address is in range [0..31], indicates which PHY (MAC?) address should be allocated to the interface // eth_power is an output GPIO pin used to enable/disable the ethernet port (and/or external oscillator) // eth_mdc is an output GPIO pin used to provide the clock for the management data // eth_mdio is an input/output GPIO pin used to transfer management data // eth_type is the physical ethernet module's type (ETH_PHY_LAN8720, ETH_PHY_TLK110) // eth_clk_mode defines the GPIO pin and GPIO mode for the clock signal // However, there are really only four configurable options on ESP32: // ETH_CLOCK_GPIO0_IN == External oscillator, clock input via GPIO0 // ETH_CLOCK_GPIO0_OUT == ESP32 provides 50MHz clock output via GPIO0 // ETH_CLOCK_GPIO16_OUT == ESP32 provides 50MHz clock output via GPIO16 // ETH_CLOCK_GPIO17_OUT == ESP32 provides 50MHz clock output via GPIO17 typedef struct EthernetSettings { uint8_t eth_address; int eth_power; int eth_mdc; int eth_mdio; eth_phy_type_t eth_type; eth_clock_mode_t eth_clk_mode; } ethernet_settings; extern ethernet_settings ethernetBoards[]; #endif #endif