Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ethernet Link Down--ESP32S3 with W5500 to establish an Ethernet connection (IDFGH-13341) #14257

Closed
3 tasks done
Chillimeat opened this issue Jul 27, 2024 · 16 comments
Closed
3 tasks done
Assignees
Labels
Resolution: Won't Do This will not be worked on Status: Done Issue is done internally

Comments

@Chillimeat
Copy link

Answers checklist.

  • I have read the documentation ESP-IDF Programming Guide and the issue is not addressed there.
  • I have updated my IDF branch (master or release) to the latest version and checked that the issue is present there.
  • I have searched the issue tracker for a similar issue and not found a similar issue.

General issue report

I am currently using ESP32S3 with W5500 to establish an Ethernet connection, using version V5.3. The current issue I'm facing is that the network card repeatedly restarts and shuts down. Even when it starts up normally, it fails to communicate with other hosts

The log information is as follows:

I (301) main_task: Started on CPU0
I (311) main_task: Calling app_main()
I (311) eth_example: GPIO ISR service installed
I (311) eth_example: esp-netif initialized
I (321) eth_example: Event loop created
I (321) eth_example: SPI bus initialized
E (431) w5500.mac: W5500 version mismatched, expected 0x04, got 0xa0
E (431) w5500.mac: emac_w5500_init(826): verify chip ID failed
I (431) gpio: GPIO[4]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
E (441) esp_eth: esp_eth_driver_install(228): init mac failed
ESP_ERROR_CHECK failed: esp_err_t 0x10a (ESP_ERR_INVALID_VERSION) at 0x4200a752
0x4200a752: app_main at /Users/11/Documents/code/tools/w5-s3/main/main.c:205 (discriminator 1)

file: "./main/main.c" line 205
func: app_main
expression: esp_eth_driver_install(&config, &handle)

abort() was called at PC 0x4037b4ef on core 0
0x4037b4ef: _esp_error_check_failed at /Users/11/esp/v5.3/esp-idf/components/esp_system/esp_err.c:49

Backtrace: 0x40375b16:0x3fc9c670 0x4037b4f9:0x3fc9c690 0x40382c1d:0x3fc9c6b0 0x4037b4ef:0x3fc9c720 0x4200a752:0x3fc9c750 0x42035973:0x3fc9c880 0x4037bf8d:0x3fc9c8b0
0x40375b16: panic_abort at /Users/11/esp/v5.3/esp-idf/components/esp_system/panic.c:463
0x4037b4f9: esp_system_abort at /Users/11/esp/v5.3/esp-idf/components/esp_system/port/esp_system_chip.c:92
0x40382c1d: abort at /Users/11/esp/v5.3/esp-idf/components/newlib/abort.c:38
0x4037b4ef: _esp_error_check_failed at /Users/11/esp/v5.3/esp-idf/components/esp_system/esp_err.c:49
0x4200a752: app_main at /Users/11/Documents/code/tools/w5-s3/main/main.c:205 (discriminator 1)
0x42035973: main_task at /Users/11/esp/v5.3/esp-idf/components/freertos/app_startup.c:208
0x4037bf8d: vPortTaskWrapper at /Users/11/esp/v5.3/esp-idf/components/freertos/FreeRTOS-Kernel/portable/xtensa/port.c:134

ELF file SHA256: d27500b09

Rebooting...
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x28 (SPI_FAST_FLASH_BOOT)
Saved PC:0x40375a50
0x40375a50: esp_restart_noos at /Users/11/esp/v5.3/esp-idf/components/esp_system/port/soc/esp32s3/system_internal.c:158

SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2810,len:0x178c
load:0x403c8700,len:0x4
load:0x403c8704,len:0xcb8
load:0x403cb700,len:0x2db0
entry 0x403c8914
I (26) boot: ESP-IDF v5.3-dirty 2nd stage bootloader
I (26) boot: compile time Jul 27 2024 17:30:30
I (26) boot: Multicore bootloader
I (30) boot: chip revision: v0.2
I (33) boot.esp32s3: Boot SPI Speed : 80MHz
I (38) boot.esp32s3: SPI Mode : DIO
I (43) boot.esp32s3: SPI Flash Size : 16MB
I (48) boot: Enabling RNG early entropy source...
I (53) boot: Partition Table:
I (57) boot: ## Label Usage Type ST Offset Length
I (64) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (71) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (79) boot: 2 factory factory app 00 00 00010000 00100000
I (86) boot: End of partition table
I (91) esp_image: segment 0: paddr=00010020 vaddr=3c040020 size=13e90h ( 81552) map
I (114) esp_image: segment 1: paddr=00023eb8 vaddr=3fc94e00 size=02b58h ( 11096) load
I (116) esp_image: segment 2: paddr=00026a18 vaddr=40374000 size=09600h ( 38400) load
I (128) esp_image: segment 3: paddr=00030020 vaddr=42000020 size=36724h (223012) map
I (168) esp_image: segment 4: paddr=0006674c vaddr=4037d600 size=07714h ( 30484) load
I (182) boot: Loaded app from partition at offset 0x10000
I (183) boot: Disabling RNG early entropy source...
I (194) cpu_start: Multicore app
I (203) cpu_start: Pro cpu start user code
I (204) cpu_start: cpu freq: 160000000 Hz
I (204) app_init: Application information:
I (206) app_init: Project name: w5-s3
I (211) app_init: App version: 1
I (215) app_init: Compile time: Jul 27 2024 17:30:25
I (221) app_init: ELF file SHA256: d27500b09...
I (227) app_init: ESP-IDF: v5.3-dirty
I (232) efuse_init: Min chip rev: v0.0
I (237) efuse_init: Max chip rev: v0.99
I (242) efuse_init: Chip rev: v0.2
I (246) heap_init: Initializing. RAM available for dynamic allocation:
I (254) heap_init: At 3FC98C18 len 00050AF8 (322 KiB): RAM
I (260) heap_init: At 3FCE9710 len 00005724 (21 KiB): RAM
I (266) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM
I (272) heap_init: At 600FE100 len 00001EE8 (7 KiB): RTCRAM
I (279) spi_flash: detected chip: generic
I (283) spi_flash: flash io: dio
I (287) sleep: Configure to isolate all GPIO pins in sleep state
I (294) sleep: Enable automatic switching of GPIO sleep configuration
I (301) main_task: Started on CPU0
I (311) main_task: Calling app_main()
I (311) eth_example: GPIO ISR service installed
I (311) eth_example: esp-netif initialized
I (321) eth_example: Event loop created
I (321) eth_example: SPI bus initialized
E (431) w5500.mac: W5500 version mismatched, expected 0x04, got 0x00
E (431) w5500.mac: emac_w5500_init(826): verify chip ID failed
I (431) gpio: GPIO[4]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
E (441) esp_eth: esp_eth_driver_install(228): init mac failed
ESP_ERROR_CHECK failed: esp_err_t 0x10a (ESP_ERR_INVALID_VERSION) at 0x4200a752

file: "./main/main.c" line 205
func: app_main
expression: esp_eth_driver_install(&config, &handle)

abort() was called at PC 0x4037b4ef on core 0
0x4037b4ef: _esp_error_check_failed at /Users/11/esp/v5.3/esp-idf/components/esp_system/esp_err.c:49

Backtrace: 0x40375b16:0x3fc9c670 0x4037b4f9:0x3fc9c690 0x40382c1d:0x3fc9c6b0 0x4037b4ef:0x3fc9c720 0x4200a752:0x3fc9c750 0x42035973:0x3fc9c880 0x4037bf8d:0x3fc9c8b0

ELF file SHA256: d27500b09

Rebooting...
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x28 (SPI_FAST_FLASH_BOOT)
Saved PC:0x40375a50
0x40375a50: esp_restart_noos at /Users/11/esp/v5.3/esp-idf/components/esp_system/port/soc/esp32s3/system_internal.c:158

SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2810,len:0x178c
load:0x403c8700,len:0x4
load:0x403c8704,len:0xcb8
load:0x403cb700,len:0x2db0
entry 0x403c8914
I (26) boot: ESP-IDF v5.3-dirty 2nd stage bootloader
I (26) boot: compile time Jul 27 2024 17:30:30
I (27) boot: Multicore bootloader
I (30) boot: chip revision: v0.2
I (33) boot.esp32s3: Boot SPI Speed : 80MHz
I (38) boot.esp32s3: SPI Mode : DIO
I (43) boot.esp32s3: SPI Flash Size : 16MB
I (48) boot: Enabling RNG early entropy source...
I (53) boot: Partition Table:
I (57) boot: ## Label Usage Type ST Offset Length
I (64) boot: 0 nvs WiFi data 01 02 00009000 00006000
I (72) boot: 1 phy_init RF data 01 01 0000f000 00001000
I (79) boot: 2 factory factory app 00 00 00010000 00100000
I (86) boot: End of partition table
I (91) esp_image: segment 0: paddr=00010020 vaddr=3c040020 size=13e90h ( 81552) map
I (114) esp_image: segment 1: paddr=00023eb8 vaddr=3fc94e00 size=02b58h ( 11096) load
I (116) esp_image: segment 2: paddr=00026a18 vaddr=40374000 size=09600h ( 38400) load
I (128) esp_image: segment 3: paddr=00030020 vaddr=42000020 size=36724h (223012) map
I (168) esp_image: segment 4: paddr=0006674c vaddr=4037d600 size=07714h ( 30484) load
I (182) boot: Loaded app from partition at offset 0x10000
I (183) boot: Disabling RNG early entropy source...
I (194) cpu_start: Multicore app
I (203) cpu_start: Pro cpu start user code
I (204) cpu_start: cpu freq: 160000000 Hz
I (204) app_init: Application information:
I (206) app_init: Project name: w5-s3
I (211) app_init: App version: 1
I (215) app_init: Compile time: Jul 27 2024 17:30:25
I (221) app_init: ELF file SHA256: d27500b09...
I (227) app_init: ESP-IDF: v5.3-dirty
I (232) efuse_init: Min chip rev: v0.0
I (237) efuse_init: Max chip rev: v0.99
I (242) efuse_init: Chip rev: v0.2
I (246) heap_init: Initializing. RAM available for dynamic allocation:
I (254) heap_init: At 3FC98C18 len 00050AF8 (322 KiB): RAM
I (260) heap_init: At 3FCE9710 len 00005724 (21 KiB): RAM
I (266) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM
I (272) heap_init: At 600FE100 len 00001EE8 (7 KiB): RTCRAM
I (279) spi_flash: detected chip: generic
I (283) spi_flash: flash io: dio
I (287) sleep: Configure to isolate all GPIO pins in sleep state
I (294) sleep: Enable automatic switching of GPIO sleep configuration
I (301) main_task: Started on CPU0
I (311) main_task: Calling app_main()
I (311) eth_example: GPIO ISR service installed
I (311) eth_example: esp-netif initialized
I (321) eth_example: Event loop created
I (321) eth_example: SPI bus initialized
I (381) eth_example: Ethernet driver installed
I (381) esp_eth.netif.netif_glue: 00:00:00:00:00:00
I (381) esp_eth.netif.netif_glue: ethernet attached to netif
I (381) eth_example: esp-netif instance created
I (391) eth_example: Ethernet driver started
I (391) eth_example: Ethernet Started
I (401) main_task: Returned from app_main()
E (12391) w5500.mac: emac_w5500_transmit(578): free size (0) < send length (42)
I (12391) eth_example: Ethernet Link Up
I (12391) eth_example: Ethernet HW Addr 00:00:00:00:00:00
I (12401) esp_netif_handlers: eth ip: 192.168.4.101, mask: 255.255.255.0, gw: 192.168.4.1
I (12401) eth_example: Ethernet Got IP Address
I (12411) eth_example: ~~~~~~~~~~~
I (12411) eth_example: ETHIP:192.168.4.101
I (12421) eth_example: ETHMASK:255.255.255.0
I (12421) eth_example: ETHGW:192.168.4.1
I (12431) eth_example: ~~~~~~~~~~~
I (14391) eth_example: Ethernet Link Down

Below is the code I am currently using:

#define CS_PIN    14
#define MISO_PIN  12
#define MOSI_PIN  11
#define SCK_PIN   13
#define RESET_PIN 9
#define INTR_PIN  10

#define DEFAULT_MAC_ADDR {0x02, 0x00, 0x00, 0x12, 0x34, 0x56}
static esp_eth_handle_t handle = NULL;
static esp_netif_t *eth_netif = NULL;

static const char *TAG = "eth_example";

static void IRAM_ATTR intr_handler(void* arg) {
    BaseType_t higher_priority_task_woken = pdFALSE;
    vTaskNotifyGiveFromISR((TaskHandle_t)arg, &higher_priority_task_woken);
    if (higher_priority_task_woken == pdTRUE) {
        portYIELD_FROM_ISR();
    }
}

static void reset_w5500(void) {
    gpio_set_level(RESET_PIN, 0);
    vTaskDelay(pdMS_TO_TICKS(100));
    gpio_set_level(RESET_PIN, 1);
    vTaskDelay(pdMS_TO_TICKS(100));
    ESP_LOGI(TAG, "W5500 reset done");
}

esp_err_t example_eth_init(esp_eth_handle_t **eth_handle) {
    ESP_ERROR_CHECK(gpio_install_isr_service(0));
    ESP_LOGI(TAG, "GPIO ISR service installed");

    gpio_config_t io_conf = {
        .pin_bit_mask = (1ULL << RESET_PIN),
        .mode = GPIO_MODE_OUTPUT,
        .pull_up_en = GPIO_PULLUP_DISABLE,
        .pull_down_en = GPIO_PULLDOWN_DISABLE,
        .intr_type = GPIO_INTR_DISABLE
    };
    gpio_config(&io_conf);
    reset_w5500();

    io_conf.pin_bit_mask = (1ULL << INTR_PIN);
    io_conf.mode = GPIO_MODE_INPUT;
    io_conf.pull_up_en = GPIO_PULLUP_ENABLE;
    io_conf.pull_down_en = GPIO_PULLDOWN_DISABLE;
    io_conf.intr_type = GPIO_INTR_NEGEDGE;
    gpio_config(&io_conf);
    ESP_ERROR_CHECK(gpio_isr_handler_add(INTR_PIN, intr_handler, xTaskGetCurrentTaskHandle()));
    ESP_LOGI(TAG, "Interrupt GPIO configured");

    spi_bus_config_t buscfg = {
        .miso_io_num = MISO_PIN,
        .mosi_io_num = MOSI_PIN,
        .sclk_io_num = SCK_PIN,
        .quadwp_io_num = -1,
        .quadhd_io_num = -1,
        .max_transfer_sz = 4096,
    };
    ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO));
    ESP_LOGI(TAG, "SPI bus initialized");

    spi_device_interface_config_t devcfg = {
        .command_bits = 16,
        .address_bits = 8,
        .clock_speed_hz = 36 * 1000 * 1000,
        .mode = 0,
        .spics_io_num = CS_PIN,
        .queue_size = 20,
    };

    eth_w5500_config_t w5500_config = ETH_W5500_DEFAULT_CONFIG(SPI3_HOST, &devcfg);
    eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
    eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
    phy_config.phy_addr = 1;
    phy_config.reset_gpio_num = RESET_PIN;

    esp_eth_mac_t *mac = esp_eth_mac_new_w5500(&w5500_config, &mac_config);
    if (!mac) {
        ESP_LOGE(TAG, "Failed to create W5500 MAC");
        return ESP_FAIL;
    }

    esp_eth_phy_t *phy = esp_eth_phy_new_w5500(&phy_config);
    if (!phy) {
        ESP_LOGE(TAG, "Failed to create W5500 PHY");
        return ESP_FAIL;
    }

    esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
    ESP_ERROR_CHECK(esp_eth_driver_install(&config, &handle));
    ESP_LOGI(TAG, "Ethernet driver installed");

    uint8_t custom_mac[6] = DEFAULT_MAC_ADDR;
    ESP_ERROR_CHECK(esp_eth_ioctl(handle, ETH_CMD_S_MAC_ADDR, custom_mac));

    *eth_handle = handle;
    return ESP_OK;
}

static void eth_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) {
    uint8_t mac_addr[6] = {0};
    esp_eth_handle_t eth_handle = *(esp_eth_handle_t *)event_data;

    switch (event_id) {
        case ETHERNET_EVENT_CONNECTED:
            esp_eth_ioctl(eth_handle, ETH_CMD_G_MAC_ADDR, mac_addr);
            ESP_LOGI(TAG, "Ethernet Link Up");
            ESP_LOGI(TAG, "Ethernet HW Addr %02x:%02x:%02x:%02x:%02x:%02x",
                     mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
            break;
        case ETHERNET_EVENT_DISCONNECTED:
            ESP_LOGI(TAG, "Ethernet Link Down");
            break;
        case ETHERNET_EVENT_START:
            ESP_LOGI(TAG, "Ethernet Started");
            break;
        case ETHERNET_EVENT_STOP:
            ESP_LOGI(TAG, "Ethernet Stopped");
            break;
        default:
            break;
    }
}

static void got_ip_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) {
    ip_event_got_ip_t *event = (ip_event_got_ip_t *) event_data;
    const esp_netif_ip_info_t *ip_info = &event->ip_info;

    ESP_LOGI(TAG, "Ethernet Got IP Address");
    ESP_LOGI(TAG, "~~~~~~~~~~~");
    ESP_LOGI(TAG, "ETHIP:" IPSTR, IP2STR(&ip_info->ip));
    ESP_LOGI(TAG, "ETHMASK:" IPSTR, IP2STR(&ip_info->netmask));
    ESP_LOGI(TAG, "ETHGW:" IPSTR, IP2STR(&ip_info->gw));
    ESP_LOGI(TAG, "~~~~~~~~~~~");
}

void app_main(void) {
    ESP_ERROR_CHECK(gpio_install_isr_service(0));
    ESP_LOGI(TAG, "GPIO ISR service installed");

    ESP_ERROR_CHECK(esp_netif_init());
    ESP_LOGI(TAG, "esp-netif initialized");

    ESP_ERROR_CHECK(esp_event_loop_create_default());
    ESP_LOGI(TAG, "Event loop created");

    spi_bus_config_t buscfg = {
        .miso_io_num = MISO_PIN,
        .mosi_io_num = MOSI_PIN,
        .sclk_io_num = SCK_PIN,
        .quadwp_io_num = -1,
        .quadhd_io_num = -1,
        .max_transfer_sz = 4096,
    };
    ESP_ERROR_CHECK(spi_bus_initialize(SPI3_HOST, &buscfg, SPI_DMA_CH_AUTO));
    ESP_LOGI(TAG, "SPI bus initialized");

    spi_device_interface_config_t devcfg = {
        .command_bits = 16,
        .address_bits = 8,
        .clock_speed_hz = 2 * 1000 * 1000,
        .mode = 0,
        .spics_io_num = CS_PIN,
        .queue_size = 20,
    };

    eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
    eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
    eth_w5500_config_t w5500_config = ETH_W5500_DEFAULT_CONFIG(SPI3_HOST, &devcfg);

    phy_config.phy_addr = 1;  // PHY Address
    phy_config.reset_gpio_num = RESET_PIN;
    
    esp_eth_mac_t *mac = esp_eth_mac_new_w5500(&w5500_config, &mac_config);
    if (!mac) {
        ESP_LOGE(TAG, "Failed to create W5500 MAC");
        return;
    }

    esp_eth_phy_t *phy = esp_eth_phy_new_w5500(&phy_config);
    if (!phy) {
        ESP_LOGE(TAG, "Failed to create W5500 PHY");
        return;
    }

    esp_eth_config_t config = ETH_DEFAULT_CONFIG(mac, phy);
    ESP_ERROR_CHECK(esp_eth_driver_install(&config, &handle));
    ESP_LOGI(TAG, "Ethernet driver installed");

    // Create instance of esp-netif for Ethernet
    esp_netif_inherent_config_t esp_netif_config = ESP_NETIF_INHERENT_DEFAULT_ETH();
    esp_netif_config_t cfg = {
        .base = &esp_netif_config,
        .stack = ESP_NETIF_NETSTACK_DEFAULT_ETH
    };
    eth_netif = esp_netif_new(&cfg);
    ESP_ERROR_CHECK(esp_netif_attach(eth_netif, esp_eth_new_netif_glue(handle)));
    ESP_LOGI(TAG, "esp-netif instance created");
    esp_netif_ip_info_t ip_info;
    IP4_ADDR(&ip_info.ip, 192, 168, 4, 101);
    IP4_ADDR(&ip_info.gw, 192, 168, 4, 1);
    IP4_ADDR(&ip_info.netmask, 255, 255, 255, 0);

    ESP_ERROR_CHECK(esp_netif_dhcpc_stop(eth_netif));
    ESP_ERROR_CHECK(esp_netif_set_ip_info(eth_netif, &ip_info));

    ESP_ERROR_CHECK(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID, &eth_event_handler, NULL));
    ESP_ERROR_CHECK(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP, &got_ip_event_handler, NULL));

    ESP_ERROR_CHECK(esp_eth_start(handle));
    ESP_LOGI(TAG, "Ethernet driver started");
}
@espressif-bot espressif-bot added the Status: Opened Issue is new label Jul 27, 2024
@github-actions github-actions bot changed the title Ethernet Link Down--ESP32S3 with W5500 to establish an Ethernet connection Ethernet Link Down--ESP32S3 with W5500 to establish an Ethernet connection (IDFGH-13341) Jul 27, 2024
@Chillimeat
Copy link
Author

The device’s logs indicate that the Ethernet link repeatedly goes up and down, as shown below:
E (1776391) w5500.mac: emac_w5500_transmit(578): free size (0) < send length (42)
I (1776391) eth_example: Ethernet Link Up
I (1776391) eth_example: Ethernet HW Addr 00:00:00:00:00:00
I (1776401) esp_netif_handlers: eth ip: 192.168.4.101, mask: 255.255.255.0, gw: 192.168.4.1
I (1776411) eth_example: Ethernet Got IP Address
I (1776411) eth_example: ~~~~~~~~~~~
I (1776411) eth_example: ETHIP:192.168.4.101
I (1776421) eth_example: ETHMASK:255.255.255.0
I (1776421) eth_example: ETHGW:192.168.4.1
I (1776431) eth_example: ~~~~~~~~~~~
I (1778391) eth_example: Ethernet Link Down
E (1808391) w5500.mac: emac_w5500_transmit(578): free size (0) < send length (42)
I (1808391) eth_example: Ethernet Link Up
I (1808391) eth_example: Ethernet HW Addr 00:00:00:00:00:00
I (1808401) esp_netif_handlers: eth ip: 192.168.4.101, mask: 255.255.255.0, gw: 192.168.4.1
I (1808411) eth_example: Ethernet Got IP Address
I (1808411) eth_example: ~~~~~~~~~~~
I (1808411) eth_example: ETHIP:192.168.4.101
I (1808421) eth_example: ETHMASK:255.255.255.0
I (1808421) eth_example: ETHGW:192.168.4.1
I (1808431) eth_example: ~~~~~~~~~~~
I (1810391) eth_example: Ethernet Link Down

@DarmorGamz
Copy link

Please try esp_base_mac_addr_set() and esp_netif_set_mac() instead of esp_eth_ioctl.

I experienced this on v5.0 and the symptom was "Ethernet HW Addr 00:00:00:00:00:00"

I also experienced "w5500.mac: emac_w5500_transmit(n): free size (0) < send length (k)" when my pins were incorrectly connected. You'll need to verify tx & rx are correctly connected and your clock speed.

Change your clock speed to ".clock_speed_hz = SPI_MASTER_FREQ_8M;"

Add ".flags = SPICOMMON_BUSFLAG_MASTER | SPICOMMON_BUSFLAG_SCLK | SPICOMMON_BUSFLAG_MISO | SPICOMMON_BUSFLAG_MOSI" to the spi_bus_config_t.
Change transfer speed to ".max_transfer_sz = 0".

Remove the line "phy_config.phy_addr = 1;"

@Chillimeat
Copy link
Author

@DarmorGamz
Thank you for the help provided, but I found that I have been stuck in a loop of obtaining versions.

I (321) eth_example: GPIO ISR service installed
I (331) gpio: GPIO[43]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0 
I (541) eth_example: W5500 reset done
I (541) gpio: GPIO[41]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:2 
I (541) eth_example: Interrupt GPIO configured
I (541) eth_example: SPI bus initialized
E (651) w5500.mac: W5500 version mismatched, expected 0x04, got 0x00
E (651) w5500.mac: emac_w5500_init(826): verify chip ID failed
I (651) gpio: GPIO[4]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 
E (661) esp_eth: esp_eth_driver_install(228): init mac failed
ESP_ERROR_CHECK failed: esp_err_t 0x10a (ESP_ERR_INVALID_VERSION) at 0x4200a7e5
file: "./main/main.c" line 110
func: example_eth_init
expression: esp_eth_driver_install(&config, &handle)

abort() was called at PC 0x4037b50b on core 0


Backtrace: 0x40375b16:0x3fc9c600 0x4037b515:0x3fc9c620 0x40382c39:0x3fc9c640 0x4037b50b:0x3fc9c6b0 0x4200a7e5:0x3fc9c6e0 0x4200a923:0x3fc9c810 0x42035b2f:0x3fc9c880 0x4037bfa9:0x3fc9c8b0




ELF file SHA256: 15b08351e

Rebooting...
ESP-ROM:esp32s3-20210327
Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0xb (SPI_FAST_FLASH_BOOT)
Saved PC:0x40375a50
SPIWP:0xee
mode:DIO, clock div:1
load:0x3fce2810,len:0x178c

@kostaond
Copy link
Collaborator

kostaond commented Aug 8, 2024

Please try esp_base_mac_addr_set() and esp_netif_set_mac() instead of esp_eth_ioctl.

@DarmorGamz Could you please elaborate what is the issue? This exact scenario is tested in CI for all supported Ethernet SPI modules.

@kostaond
Copy link
Collaborator

kostaond commented Aug 8, 2024

@Chillimeat how is your W5500 connected to ESP32? Do you have custom board or is it connected just via jumper wires? What W5500 board do you use?

@Chillimeat
Copy link
Author

@kostaond
Thank you very much for your attention. I am using DuPont wires for connection, and I have attached the relevant pictures.
image

@Chillimeat
Copy link
Author

Please try esp_base_mac_addr_set() and esp_netif_set_mac() instead of esp_eth_ioctl.

@DarmorGamz Could you please elaborate what is the issue? This exact scenario is tested in CI for all supported Ethernet SPI modules.

I also used a separate 5V power supply for power.

@kostaond
Copy link
Collaborator

kostaond commented Aug 9, 2024

It seems you have some issues with SPI communication. Double check (or triple check :)) SPI configuration, that the connection is correct and use wires as short as possible (max 10cm) with matching length. You can also try to lower the SPI frequency to 8 MHz.

@kostaond
Copy link
Collaborator

kostaond commented Sep 4, 2024

@Chillimeat any update? Have you been able to resolve the issue?

@kostaond
Copy link
Collaborator

kostaond commented Jan 6, 2025

Closing the issue due to lack of feedback from reporter.

@kostaond kostaond closed this as completed Jan 6, 2025
@espressif-bot espressif-bot added Status: Done Issue is done internally Resolution: Won't Do This will not be worked on and removed Status: Opened Issue is new labels Jan 6, 2025
@MAE-91
Copy link

MAE-91 commented Jan 8, 2025

I am facing the same issue . Have you found the root cause?

@kostaond
Copy link
Collaborator

kostaond commented Jan 9, 2025

@MAE-91 could you please be more specific? How is your W5500 connected to the ESP32? If it's module, what module do you use? What is behavior you observe? What IDF version? etc...

@MAE-91
Copy link

MAE-91 commented Jan 9, 2025

I am currently benchmarking to replace my existing Ethernet solution, which uses 10 pins, with an SPI Ethernet solution to free up more GPIOs. The example works when I use the ESP devkit, but it fails on my custom board that I manually reworked. I am using a WIZ850io module connected to a breadboard, and it is wired to my board with manual soldering.

the error :
w5500.mac: W5500 version mismatched, expected 0x04, got 0x00
w5500.mac: emac_w5500_init(795): vefiry chip ID failed
esp_eth: esp_eth_driver_install(228): init mac failed

idf version 5.3.2

@kostaond
Copy link
Collaborator

Seems like hardware issue... Triple check that your SPI MOSI/MISO/SCLK configuration align with the hardware and signal is present at both source and sink pins. Try to decrease SPI frequency to e.g. 8 MHz. Make sure the WIZ850io is functional or use another piece if you have such option.

@MAE-91
Copy link

MAE-91 commented Jan 10, 2025

I have a question. is it possible to use W5500 as a PHY only? if not , Do you know any PHY chip that works with esp32 with SPI ?

@kostaond
Copy link
Collaborator

It's not possible to have just PHY connected to MAC over SPI. MAC and PHY communicate over MII/RMII interface (ESP32 supports both but RMII is preffered and tested). See https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/network/esp_eth.html#configure-mac-and-phy for more information.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Resolution: Won't Do This will not be worked on Status: Done Issue is done internally
Projects
None yet
Development

No branches or pull requests

5 participants