Skip to content

Commit

Permalink
w5500: rework version check to avoid a false alarm on fault detection
Browse files Browse the repository at this point in the history
See: #11331
  • Loading branch information
huming2207 authored and kostaond committed Jul 3, 2023
1 parent cacb45d commit 098e559
Showing 1 changed file with 14 additions and 2 deletions.
16 changes: 14 additions & 2 deletions components/esp_eth/src/esp_eth_mac_w5500.c
Original file line number Diff line number Diff line change
Expand Up @@ -229,10 +229,22 @@ static esp_err_t w5500_verify_id(emac_w5500_t *emac)
{
esp_err_t ret = ESP_OK;
uint8_t version = 0;
ESP_GOTO_ON_ERROR(w5500_read(emac, W5500_REG_VERSIONR, &version, sizeof(version)), err, TAG, "read VERSIONR failed");

// W5500 doesn't have chip ID, we check the version number instead
ESP_GOTO_ON_FALSE(version == W5500_CHIP_VERSION, ESP_ERR_INVALID_VERSION, err, TAG, "invalid chip version, expected 0x%x, actual 0x%x", W5500_CHIP_VERSION, version);
// The version number may be polled multiple times since it was observed that
// some W5500 units may return version 0 when it is read right after the reset
ESP_LOGD(TAG, "Waiting W5500 to start & verify version...");
uint32_t to = 0;
for (to = 0; to < emac->sw_reset_timeout_ms / 10; to++) {
ESP_GOTO_ON_ERROR(w5500_read(emac, W5500_REG_VERSIONR, &version, sizeof(version)), err, TAG, "read VERSIONR failed");
if (version == W5500_CHIP_VERSION) {
return ESP_OK;
}
vTaskDelay(pdMS_TO_TICKS(10));
}

ESP_LOGE(TAG, "W5500 version mismatched, expected 0x%02x, got 0x%02x", W5500_CHIP_VERSION, version);
return ESP_ERR_INVALID_VERSION;
err:
return ret;
}
Expand Down

0 comments on commit 098e559

Please sign in to comment.