Ethernet

Application Example

PHY Interfaces

The configured PHY model(s) are set in software by configuring the eth_config_t structure for the given PHY.

Headers include a default configuration structure. These default configurations will need some members overriden or re-set before they can be used for a particular PHY hardware configuration. Consult the Ethernet example to see how this is done.

PHY Configuration Constants

const eth_config_t phy_tlk110_default_ethernet_config

Default TLK110 PHY configuration.

Note
This configuration is not suitable for use as-is, it will need to be modified for your particular PHY hardware setup.

const eth_config_t phy_lan8720_default_ethernet_config

Default LAN8720 PHY configuration.

Note
This configuration is not suitable for use as-is, it will need to be modified for your particular PHY hardware setup.

const eth_config_t phy_ip101_default_ethernet_config

Default IP101 PHY configuration.

Note
This configuration is not suitable for use as-is, it will need to be modified for your particular PHY hardware setup.

API Reference - Ethernet

Functions

esp_err_t esp_eth_init(eth_config_t *config)

Init ethernet mac.

Note
config can not be NULL, and phy chip must be suitable to phy init func.
Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • config: mac init data.

esp_err_t esp_eth_deinit(void)

Deinit ethernet mac.

Return
  • ESP_OK
  • ESP_FAIL
  • ESP_ERR_INVALID_STATE

esp_err_t esp_eth_init_internal(eth_config_t *config)

Init Ethernet mac driver only.

For the most part, you need not call this function directly. It gets called from esp_eth_init().

This function may be called, if you only need to initialize the Ethernet driver without having to use the network stack on top.

Note
config can not be NULL, and phy chip must be suitable to phy init func.
Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • config: mac init data.

esp_err_t esp_eth_tx(uint8_t *buf, uint16_t size)

Send packet from tcp/ip to mac.

Note
buf can not be NULL, size must be less than 1580
Return
  • ESP_OK
  • ESP_FAIL
Parameters
  • buf: start address of packet data.
  • size: size (byte) of packet data.

esp_err_t esp_eth_enable(void)

Enable ethernet interface.

Note
Should be called after esp_eth_init
Return
  • ESP_OK
  • ESP_FAIL

esp_err_t esp_eth_disable(void)

Disable ethernet interface.

Note
Should be called after esp_eth_init
Return
  • ESP_OK
  • ESP_FAIL

void esp_eth_get_mac(uint8_t mac[6])

Get mac addr.

Note
mac addr must be a valid unicast address
Parameters
  • mac: start address of mac address.

void esp_eth_smi_write(uint32_t reg_num, uint16_t value)

Write PHY reg with SMI interface.

Note
PHY base addr must be right.
Parameters
  • reg_num: PHY reg num.
  • value: value which is written to PHY reg.

uint16_t esp_eth_smi_read(uint32_t reg_num)

Read PHY reg with SMI interface.

Note
PHY base addr must be right.
Return
value that is read from PHY reg
Parameters
  • reg_num: PHY reg num.

esp_err_t esp_eth_smi_wait_value(uint32_t reg_num, uint16_t value, uint16_t value_mask, int timeout_ms)

Continuously read a PHY register over SMI interface, wait until the register has the desired value.

Note
PHY base address must be right.
Return
ESP_OK if desired value matches, ESP_ERR_TIMEOUT if timed out.
Parameters
  • reg_num: PHY register number
  • value: Value to wait for (masked with value_mask)
  • value_mask: Mask of bits to match in the register.
  • timeout_ms: Timeout to wait for this value (milliseconds). 0 means never timeout.

static esp_err_t esp_eth_smi_wait_set(uint32_t reg_num, uint16_t value_mask, int timeout_ms)

Continuously read a PHY register over SMI interface, wait until the register has all bits in a mask set.

Note
PHY base address must be right.
Return
ESP_OK if desired value matches, ESP_ERR_TIMEOUT if timed out.
Parameters
  • reg_num: PHY register number
  • value_mask: Value mask to wait for (all bits in this mask must be set)
  • timeout_ms: Timeout to wait for this value (milliseconds). 0 means never timeout.

void esp_eth_free_rx_buf(void *buf)

Free emac rx buf.

Note
buf can not be null, and it is tcpip input buf.
Parameters
  • buf: start address of received packet data.

esp_err_t esp_eth_set_mac(const uint8_t mac[6])

Set mac of ethernet interface.

Note
user can call this function after emac_init, and the new mac address will be enabled after emac_enable.
Return
  • ESP_OK: succeed
  • ESP_ERR_INVALID_MAC: invalid mac address
Parameters
  • mac: the Mac address.

eth_speed_mode_t esp_eth_get_speed(void)

Get Ethernet link speed.

Return
eth_speed_mode_t ETH_SPEED_MODE_10M when link speed is 10Mbps ETH_SPEED_MODE_100M when link speed is 100Mbps

Structures

struct eth_config_t

ethernet configuration

Public Members

eth_phy_base_t phy_addr

PHY address (0~31)

eth_mode_t mac_mode

MAC mode: only support RMII now

eth_clock_mode_t clock_mode

external/internal clock mode selection

eth_tcpip_input_func tcpip_input

tcpip input func

eth_phy_func phy_init

phy init func

eth_phy_check_link_func phy_check_link

phy check link func

eth_phy_check_init_func phy_check_init

phy check init func

eth_phy_get_speed_mode_func phy_get_speed_mode

phy check init func

eth_phy_get_duplex_mode_func phy_get_duplex_mode

phy check init func

eth_gpio_config_func gpio_config

gpio config func

bool flow_ctrl_enable

flag of flow ctrl enable

eth_phy_get_partner_pause_enable_func phy_get_partner_pause_enable

get partner pause enable

eth_phy_power_enable_func phy_power_enable

enable or disable phy power

uint32_t reset_timeout_ms

timeout value for reset emac

bool promiscuous_enable

set true to enable promiscuous mode

Type Definitions

typedef void (*eth_phy_check_init_func)(void)
typedef eth_speed_mode_t (*eth_phy_get_speed_mode_func)(void)
typedef eth_duplex_mode_t (*eth_phy_get_duplex_mode_func)(void)
typedef esp_err_t (*eth_phy_func)(void)
typedef esp_err_t (*eth_tcpip_input_func)(void *buffer, uint16_t len, void *eb)
typedef void (*eth_gpio_config_func)(void)
typedef bool (*eth_phy_get_partner_pause_enable_func)(void)
typedef void (*eth_phy_power_enable_func)(bool enable)

Enumerations

enum eth_mode_t

Ethernet interface mode.

Values:

ETH_MODE_RMII = 0

RMII mode

ETH_MODE_MII

MII mode

enum eth_clock_mode_t

Ethernet clock mode.

Values:

ETH_CLOCK_GPIO0_IN = 0

RMII clock input to GPIO0

ETH_CLOCK_GPIO0_OUT = 1

RMII clock output from GPIO0

ETH_CLOCK_GPIO16_OUT = 2

RMII clock output from GPIO16

ETH_CLOCK_GPIO17_OUT = 3

RMII clock output from GPIO17

enum eth_speed_mode_t

Ethernet Speed.

Values:

ETH_SPEED_MODE_10M = 0

Ethernet speed: 10Mbps

ETH_SPEED_MODE_100M

Ethernet speed: 100Mbps

enum eth_duplex_mode_t

Ethernet Duplex.

Values:

ETH_MODE_HALFDUPLEX = 0

Ethernet half duplex

ETH_MODE_FULLDUPLEX

Ethernet full duplex

enum eth_phy_base_t

Ethernet PHY address.

Values:

PHY0 = 0

PHY address 0

PHY1

PHY address 1

PHY2

PHY address 2

PHY3

PHY address 3

PHY4

PHY address 4

PHY5

PHY address 5

PHY6

PHY address 6

PHY7

PHY address 7

PHY8

PHY address 8

PHY9

PHY address 9

PHY10

PHY address 10

PHY11

PHY address 11

PHY12

PHY address 12

PHY13

PHY address 13

PHY14

PHY address 14

PHY15

PHY address 15

PHY16

PHY address 16

PHY17

PHY address 17

PHY18

PHY address 18

PHY19

PHY address 19

PHY20

PHY address 20

PHY21

PHY address 21

PHY22

PHY address 22

PHY23

PHY address 23

PHY24

PHY address 24

PHY25

PHY address 25

PHY26

PHY address 26

PHY27

PHY address 27

PHY28

PHY address 28

PHY29

PHY address 29

PHY30

PHY address 30

PHY31

PHY address 31

API Reference - PHY Common

Functions

void phy_rmii_configure_data_interface_pins(void)

Common PHY-management functions.

Note
These are not enough to drive any particular Ethernet PHY. They provide a common configuration structure and management functions. Configure fixed pins for RMII data interface.
Note
This configures GPIOs 0, 19, 22, 25, 26, 27 for use with RMII data interface. These pins cannot be changed, and must be wired to ethernet functions. This is not sufficient to fully configure the Ethernet PHY. MDIO configuration interface pins (such as SMI MDC, MDO, MDI) must also be configured correctly in the GPIO matrix.

void phy_rmii_smi_configure_pins(uint8_t mdc_gpio, uint8_t mdio_gpio)

Configure variable pins for SMI ethernet functions.

Note
Calling this function along with mii_configure_default_pins() will fully configure the GPIOs for the ethernet PHY.
Parameters
  • mdc_gpio: MDC GPIO Pin number
  • mdio_gpio: MDIO GPIO Pin number

void phy_mii_enable_flow_ctrl(void)

Enable flow control in standard PHY MII register.

Check Ethernet link status via MII interface.

Return
true Link is on
Return
false Link is off

bool phy_mii_get_partner_pause_enable(void)

Check pause frame ability of partner via MII interface.

Return
true Partner is able to process pause frame
Return
false Partner can not process pause frame

API Reference - PHY TLK110

Functions

void phy_tlk110_dump_registers()

Dump TLK110 PHY SMI configuration registers.

void phy_tlk110_check_phy_init(void)

Default TLK110 phy_check_init function.

eth_speed_mode_t phy_tlk110_get_speed_mode(void)

Default TLK110 phy_get_speed_mode function.

Return
eth_speed_mode_t Ethernet speed mode

eth_duplex_mode_t phy_tlk110_get_duplex_mode(void)

Default TLK110 phy_get_duplex_mode function.

Return
eth_duplex_mode_t Ethernet duplex mode

void phy_tlk110_power_enable(bool)

Default TLK110 phy_power_enable function.

esp_err_t phy_tlk110_init(void)

Default TLK110 phy_init function.

Return
esp_err_t
  • ESP_OK on success
  • ESP_FAIL on error

API Reference - PHY LAN8720

Functions

void phy_lan8720_dump_registers()

Dump LAN8720 PHY SMI configuration registers.

void phy_lan8720_check_phy_init(void)

Default LAN8720 phy_check_init function.

eth_speed_mode_t phy_lan8720_get_speed_mode(void)

Default LAN8720 phy_get_speed_mode function.

Return
eth_speed_mode_t Ethernet speed mode

eth_duplex_mode_t phy_lan8720_get_duplex_mode(void)

Default LAN8720 phy_get_duplex_mode function.

Return
eth_duplex_mode_t Ethernet duplex mode

void phy_lan8720_power_enable(bool)

Default LAN8720 phy_power_enable function.

esp_err_t phy_lan8720_init(void)

Default LAN8720 phy_init function.

Return
esp_err_t
  • ESP_OK on success
  • ESP_FAIL on error

API Reference - PHY IP101

Functions

void phy_ip101_dump_registers()

Dump IP101 PHY SMI configuration registers.

void phy_ip101_check_phy_init(void)

Default IP101 phy_check_init function.

eth_speed_mode_t phy_ip101_get_speed_mode(void)

Default IP101 phy_get_speed_mode function.

Return
eth_speed_mode_t Ethernet speed mode

eth_duplex_mode_t phy_ip101_get_duplex_mode(void)

Default IP101 phy_get_duplex_mode function.

Return
eth_duplex_mode_t Ethernet duplex mode

void phy_ip101_power_enable(bool)

Default IP101 phy_power_enable function.

esp_err_t phy_ip101_init(void)

Default IP101 phy_init function.

Return
esp_err_t
  • ESP_OK on success
  • ESP_FAIL on error