mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
Ethernet example: Add README, use menuconfig for all example pin assignments
This commit is contained in:
parent
453b5ded1d
commit
abe58c867e
@ -1,6 +1,56 @@
|
|||||||
# ethernet Example
|
# Ethernet Example
|
||||||
|
|
||||||
Init ethernet interface and enable it ,then you can ping it if it got ip address.
|
Initialises the ethernet interface and enables it, then sends DHCP requests and tries to obtain a DHCP lease. If successful then you will be able to ping the device.
|
||||||
|
|
||||||
|
# PHY Configuration
|
||||||
|
|
||||||
See the README.md file in the upper level 'examples' directory for more information about examples.
|
Use "make menuconfig" to set the PHY model and the PHY address, and configure the SMI I/O pins (see below). These configuration items will vary depending on the hardware configuration you are using.
|
||||||
|
|
||||||
|
The default example configuration is correct for Espressif's Ethernet board with TLK110 PHY. Other hardware will require different configuration and/or changes to the example.
|
||||||
|
|
||||||
|
## PHY Address
|
||||||
|
|
||||||
|
The PHY address depends on the hardware and the PHY configuration. Consult the documentation/datasheet for the PHY hardware you have.
|
||||||
|
|
||||||
|
* Default address 31 is correct for Espressif's Ethernet board with TLK110 PHY.
|
||||||
|
* Address 1 is correct for the common Waveshare LAN8720 PHY breakout.
|
||||||
|
* Other LAN8720 breakouts may take address 0.
|
||||||
|
|
||||||
|
If the PHY address is incorrect then the EMAC will initialise but all attempts to read/write configuration registers on the PHY will fail.
|
||||||
|
|
||||||
|
## RMII PHY Wiring
|
||||||
|
|
||||||
|
The following PHY connections are required for RMII PHY data connections. These GPIO pin assignments cannot be changed.
|
||||||
|
|
||||||
|
| GPIO | RMII Signal | ESP32 EMAC Function | Notes |
|
||||||
|
| ------- | ----------- | ------------------- | ----- |
|
||||||
|
| 0 | REF_CLK | EMAC_TX_CLK | Currently this must be a 50MHz reference clock input from the PHY (ext_osc configuration). |
|
||||||
|
| 21 | TX_EN | EMAC_TX_EN | |
|
||||||
|
| 19 | TX0 | EMAC_TXD0 | |
|
||||||
|
| 22 | TX1 | EMAC_TXD1 | |
|
||||||
|
| 25 | RX0 | EMAC_RXD0 | |
|
||||||
|
| 26 | RX1 | EMAC_RXD1 | |
|
||||||
|
| 27 | CRS_DV | EMAC_RX_DRV | |
|
||||||
|
|
||||||
|
## RMII PHY SMI Wiring
|
||||||
|
|
||||||
|
The following PHY connections are required for RMII PHY SMI (aka MDIO) management interface. These GPIO pin assignments can be changed to any unused GPIO pin.
|
||||||
|
|
||||||
|
For the example, these pins are configured via `make menuconfig` under the Example configuration.
|
||||||
|
|
||||||
|
| Default Example GPIO | RMII Signal | Notes |
|
||||||
|
| -------------------- | ----------- | ------------- |
|
||||||
|
| 23 | MDC | Output to PHY |
|
||||||
|
| 18 | MDIO | Bidirectional |
|
||||||
|
|
||||||
|
The defaults in the example are correct for Espressif's Ethernet development board.
|
||||||
|
|
||||||
|
## Note about GPIO0
|
||||||
|
|
||||||
|
Because GPIO0 is a strapping pin for entering UART flashing mode on reset, care must be taken when also using this pin as EMAC_TX_CLK. If the clock output from the PHY is oscillating during reset, the ESP32 may randomly enter UART flashing mode.
|
||||||
|
|
||||||
|
One solution is to use an additional GPIO as a "power pin", which either powers the PHY on/off or enables/disables the PHY's own oscillator. This prevents the clock signal from being active during a system reset. For this configuration to work, GPIO0 also needs a pullup resistor and the "power pin" GPIO will need a pullup/pulldown resistor - as appropriate in order to keep the PHY clock disabled when the ESP32 is in reset.
|
||||||
|
|
||||||
|
See the example source code to see how the "power pin" GPIO can be managed in software.
|
||||||
|
|
||||||
|
The example defaults to using GPIO 17 for this function, but it can be overriden. On Espressif's Ethernet development board, GPIO 17 is the power pin used to enable/disable the PHY oscillator.
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
menu "Example Configuration"
|
menu "Example Configuration"
|
||||||
|
|
||||||
choice PHY_MODEL
|
choice PHY_MODEL
|
||||||
prompt "Select the device used for the ethernet PHY"
|
prompt "Ethernet PHY"
|
||||||
default CONFIG_PHY_TLK110
|
default CONFIG_PHY_TLK110
|
||||||
help
|
help
|
||||||
Select the TI TLK110 or Microchip LAN8720 PHY
|
Select the PHY driver to use for the example.
|
||||||
|
|
||||||
config PHY_TLK110
|
config PHY_TLK110
|
||||||
bool "TI TLK110 PHY"
|
bool "TI TLK110 PHY"
|
||||||
@ -18,10 +18,37 @@ config PHY_LAN8720
|
|||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
config PHY_ID
|
config PHY_ADDRESS
|
||||||
int "Enter the PHY ID (0-31) for the selected PHY model"
|
int "PHY Address (0-31)"
|
||||||
default 31
|
default 31
|
||||||
|
range 0 31
|
||||||
help
|
help
|
||||||
Select the PHY ID (0-31) for the selected PHY model
|
Select the PHY Address (0-31) for the hardware configuration and PHY model.
|
||||||
|
|
||||||
|
config PHY_USE_POWER_PIN
|
||||||
|
bool "Use PHY Power (enable/disable) pin"
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Use a GPIO "power pin" to power the PHY on/off during operation.
|
||||||
|
Consult the example README for more details
|
||||||
|
|
||||||
|
config PHY_POWER_PIN
|
||||||
|
int "PHY Power GPIO"
|
||||||
|
default 17
|
||||||
|
depends on PHY_USE_POWER_PIN
|
||||||
|
help
|
||||||
|
GPIO number to use for powering on/off the PHY.
|
||||||
|
|
||||||
|
config PHY_SMI_MDC_PIN
|
||||||
|
int "SMI MDC Pin"
|
||||||
|
default 23
|
||||||
|
help
|
||||||
|
GPIO number to use for SMI clock output MDC to PHY.
|
||||||
|
|
||||||
|
config PHY_SMI_MDIO_PIN
|
||||||
|
int "SMI MDIO Pin"
|
||||||
|
default 18
|
||||||
|
help
|
||||||
|
GPIO number to use for SMI data pin MDIO to/from PHY.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
@ -44,10 +44,11 @@
|
|||||||
|
|
||||||
static const char *TAG = "eth_example";
|
static const char *TAG = "eth_example";
|
||||||
|
|
||||||
#define PIN_PHY_POWER 17
|
#define PIN_PHY_POWER CONFIG_PHY_POWER_PIN
|
||||||
#define PIN_SMI_MDC 23
|
#define PIN_SMI_MDC CONFIG_PHY_SMI_MDC_PIN
|
||||||
#define PIN_SMI_MDIO 18
|
#define PIN_SMI_MDIO CONFIG_PHY_SMI_MDIO_PIN
|
||||||
|
|
||||||
|
#ifdef CONFIG_PHY_USE_POWER_PIN
|
||||||
/* This replaces the default PHY power on/off function with one that
|
/* This replaces the default PHY power on/off function with one that
|
||||||
also uses a GPIO for power on/off.
|
also uses a GPIO for power on/off.
|
||||||
|
|
||||||
@ -81,6 +82,7 @@ static void phy_device_power_enable_via_gpio(bool enable)
|
|||||||
DEFAULT_ETHERNET_PHY_CONFIG.phy_power_enable(true);
|
DEFAULT_ETHERNET_PHY_CONFIG.phy_power_enable(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void eth_gpio_config_rmii(void)
|
static void eth_gpio_config_rmii(void)
|
||||||
{
|
{
|
||||||
@ -124,13 +126,15 @@ void app_main()
|
|||||||
|
|
||||||
eth_config_t config = DEFAULT_ETHERNET_PHY_CONFIG;
|
eth_config_t config = DEFAULT_ETHERNET_PHY_CONFIG;
|
||||||
/* Set the PHY address in the example configuration */
|
/* Set the PHY address in the example configuration */
|
||||||
config.phy_addr = CONFIG_PHY_ID;
|
config.phy_addr = CONFIG_PHY_ADDRESS;
|
||||||
config.gpio_config = eth_gpio_config_rmii;
|
config.gpio_config = eth_gpio_config_rmii;
|
||||||
config.tcpip_input = tcpip_adapter_eth_input;
|
config.tcpip_input = tcpip_adapter_eth_input;
|
||||||
|
|
||||||
|
#ifdef CONFIG_PHY_USE_POWER_PIN
|
||||||
/* Replace the default 'power enable' function with an example-specific
|
/* Replace the default 'power enable' function with an example-specific
|
||||||
one that toggles a power GPIO. */
|
one that toggles a power GPIO. */
|
||||||
config.phy_power_enable = phy_device_power_enable_via_gpio;
|
config.phy_power_enable = phy_device_power_enable_via_gpio;
|
||||||
|
#endif
|
||||||
|
|
||||||
ret = esp_eth_init(&config);
|
ret = esp_eth_init(&config);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user