RCM — ESP32 Room Controller
WT32-ETH01 firmware
Loading...
Searching...
No Matches
ethernet.c File Reference

Драйвер и сетевой стек Ethernet для WT32-ETH01 (LAN8720A, RMII). More...

#include "ethernet.h"
#include "driver/gpio.h"
#include "esp_check.h"
#include "esp_eth.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_netif.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "mqtt_app.h"
#include "web_server.h"

Go to the source code of this file.

Macros

#define ETH_PHY_ADDR   1
 Адрес PHY на шине SMI (MDC/MDIO), для LAN8720 на этой плате — 1.
 
#define ETH_MDC_GPIO   23
 GPIO линии MDC (Management Data Clock) для SMI.
 
#define ETH_MDIO_GPIO   18
 GPIO линии MDIO (Management Data I/O) для SMI.
 
#define ETH_PHY_POWER_GPIO   16
 GPIO включения питания PHY (активный уровень — высокий)
 
#define ETH_RMII_CLK_GPIO   0
 GPIO внешнего тактового сигнала RMII (50 МГц от PHY на GPIO0)
 

Functions

static void eth_event_handler (void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
 Обработчик событий Ethernet (линк, отключение и т.
 
static void got_ip_event_handler (void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
 Обработчик получения IP-адреса по DHCP (или статической конфигурации).
 
static esp_err_t wt32_eth_driver_init (esp_eth_handle_t *eth_handle_out)
 Инициализация драйвера Ethernet под конкретную плату WT32-ETH01.
 
esp_err_t ethernet_start (void)
 Инициализирует и запускает Ethernet на плате WT32-ETH01.
 

Variables

static const char * TAG = "ethernet"
 
static esp_eth_handle_t s_eth_handle
 Дескриптор драйвера Ethernet (MAC + PHY)
 
static esp_netif_t * s_eth_netif
 Сетевой интерфейс LwIP для Ethernet.
 
static esp_eth_netif_glue_handle_t s_eth_glue
 Связка между esp_eth и esp_netif.
 
static httpd_handle_t s_http_server
 Дескриптор HTTP-сервера; NULL, если сервер не запущен
 

Detailed Description

Драйвер и сетевой стек Ethernet для WT32-ETH01 (LAN8720A, RMII).

Схема работы:

  1. Включение питания PHY через GPIO.
  2. Инициализация EMAC ESP32 и generic PHY (LAN8720).
  3. Создание esp_netif и «склейки» с драйвером Ethernet.
  4. По событию IP_EVENT_ETH_GOT_IP — запуск веб-сервера и MQTT-клиента.
  5. При обрыве линка (ETHERNET_EVENT_DISCONNECTED) — остановка веб-сервера и MQTT.

Definition in file ethernet.c.

Macro Definition Documentation

◆ ETH_MDC_GPIO

#define ETH_MDC_GPIO   23

GPIO линии MDC (Management Data Clock) для SMI.

Definition at line 34 of file ethernet.c.

Referenced by wt32_eth_driver_init().

◆ ETH_MDIO_GPIO

#define ETH_MDIO_GPIO   18

GPIO линии MDIO (Management Data I/O) для SMI.

Definition at line 37 of file ethernet.c.

Referenced by wt32_eth_driver_init().

◆ ETH_PHY_ADDR

#define ETH_PHY_ADDR   1

Адрес PHY на шине SMI (MDC/MDIO), для LAN8720 на этой плате — 1.

Definition at line 31 of file ethernet.c.

Referenced by wt32_eth_driver_init().

◆ ETH_PHY_POWER_GPIO

#define ETH_PHY_POWER_GPIO   16

GPIO включения питания PHY (активный уровень — высокий)

Definition at line 40 of file ethernet.c.

Referenced by wt32_eth_driver_init().

◆ ETH_RMII_CLK_GPIO

#define ETH_RMII_CLK_GPIO   0

GPIO внешнего тактового сигнала RMII (50 МГц от PHY на GPIO0)

Definition at line 43 of file ethernet.c.

Referenced by wt32_eth_driver_init().

Function Documentation

◆ eth_event_handler()

static void eth_event_handler ( void * arg,
esp_event_base_t event_base,
int32_t event_id,
void * event_data )
static

Обработчик событий Ethernet (линк, отключение и т.

д.).

Parameters
argНе используется (передаётся NULL при регистрации).
event_baseБаза событий (ожидается ETH_EVENT).
event_idETHERNET_EVENT_CONNECTED или ETHERNET_EVENT_DISCONNECTED.
event_dataДанные события (для GOT_IP не используется здесь).

Definition at line 65 of file ethernet.c.

References mqtt_app_stop(), s_eth_handle, s_http_server, TAG, and web_server_stop().

Referenced by ethernet_start().

◆ ethernet_start()

esp_err_t ethernet_start ( void )

Инициализирует и запускает Ethernet на плате WT32-ETH01.

Выполняет:

  • esp_netif_init() и создание цикла событий;
  • настройку GPIO питания PHY и драйвера EMAC/PHY;
  • привязку netif к драйверу Ethernet;
  • регистрацию обработчиков ETH_EVENT и IP_EVENT_ETH_GOT_IP;
  • esp_eth_start() — ожидание линка и DHCP на стороне esp_netif.
Returns
ESP_OK при успехе, код ошибки ESP-IDF при сбое.

Definition at line 174 of file ethernet.c.

References eth_event_handler(), got_ip_event_handler(), s_eth_glue, s_eth_handle, s_eth_netif, TAG, and wt32_eth_driver_init().

Referenced by app_main().

◆ got_ip_event_handler()

static void got_ip_event_handler ( void * arg,
esp_event_base_t event_base,
int32_t event_id,
void * event_data )
static

Обработчик получения IP-адреса по DHCP (или статической конфигурации).

Вызывается при IP_EVENT_ETH_GOT_IP. После успешного назначения адреса один раз запускается HTTP-сервер и MQTT-клиент.

Definition at line 99 of file ethernet.c.

References mqtt_app_start(), s_http_server, TAG, and web_server_start().

Referenced by ethernet_start().

◆ wt32_eth_driver_init()

static esp_err_t wt32_eth_driver_init ( esp_eth_handle_t * eth_handle_out)
static

Инициализация драйвера Ethernet под конкретную плату WT32-ETH01.

Последовательность:

  1. Питание PHY через GPIO16.
  2. Конфигурация EMAC: RMII, внешний clock на GPIO0, MDC/MDIO.
  3. Создание MAC (esp32) и generic PHY (LAN8720).
  4. Установка драйвера esp_eth.
Parameters
eth_handle_outВыход: дескриптор установленного драйвера.
Returns
ESP_OK или код ошибки (GPIO, MAC, PHY, install).

Definition at line 127 of file ethernet.c.

References ETH_MDC_GPIO, ETH_MDIO_GPIO, ETH_PHY_ADDR, ETH_PHY_POWER_GPIO, ETH_RMII_CLK_GPIO, and TAG.

Referenced by ethernet_start().

Variable Documentation

◆ s_eth_glue

esp_eth_netif_glue_handle_t s_eth_glue
static

Связка между esp_eth и esp_netif.

Definition at line 52 of file ethernet.c.

Referenced by ethernet_start().

◆ s_eth_handle

esp_eth_handle_t s_eth_handle
static

Дескриптор драйвера Ethernet (MAC + PHY)

Definition at line 46 of file ethernet.c.

Referenced by eth_event_handler(), and ethernet_start().

◆ s_eth_netif

esp_netif_t* s_eth_netif
static

Сетевой интерфейс LwIP для Ethernet.

Definition at line 49 of file ethernet.c.

Referenced by ethernet_start().

◆ s_http_server

httpd_handle_t s_http_server
static

Дескриптор HTTP-сервера; NULL, если сервер не запущен

Definition at line 55 of file ethernet.c.

Referenced by eth_event_handler(), and got_ip_event_handler().

◆ TAG

const char* TAG = "ethernet"
static