使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0xffff

chengqian
Posts: 5
Joined: Mon Dec 03, 2018 11:24 am

使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0xffff

Postby chengqian » Mon Dec 03, 2018 11:48 am

我在使用esp wroom 32和一个LAN8720的PHY模块时,并参考idf中的Ethernet示例时,出现了图中的错误代码,多次检查接线并未出现问题,PHY模块在STM32开发板上可以正常使用。使用附件中的配置方式。请问我该如何解决。开发环境为官方推荐的Ubuntu环境。
Attachments
捕获1.PNG
错误代码
捕获1.PNG (34.37 KiB) Viewed 23040 times
捕获.PNG
配置
捕获.PNG (51.38 KiB) Viewed 23040 times

ESP_morris
Posts: 290
Joined: Wed Sep 05, 2018 6:23 am

Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x

Postby ESP_morris » Tue Dec 04, 2018 5:05 am

你好,从你给的图中看到你选择的时钟模式是GPIO0输入模式,即RMII的50MHz时钟需要由外部提供(一般是由PHY产生或者是外部晶振提供)。
1. 请检查GPIO0是否有50MHz的时钟输入
2. 确定好你的PHY地址是否是0(最好查看一下原理图)

chengqian
Posts: 5
Joined: Mon Dec 03, 2018 11:24 am

Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x

Postby chengqian » Tue Dec 04, 2018 8:43 am

ESP_morris wrote:
Tue Dec 04, 2018 5:05 am
你好,从你给的图中看到你选择的时钟模式是GPIO0输入模式,即RMII的50MHz时钟需要由外部提供(一般是由PHY产生或者是外部晶振提供)。
1. 请检查GPIO0是否有50MHz的时钟输入
2. 确定好你的PHY地址是否是0(最好查看一下原理图)
你好,首先感谢您的回复。
其次,我购买的PHY模块自带有50MHZ晶振,我利用示波器测试了,其输出没有错误,是50MHZ。另外,对于地址问题我查看了原理图及相关的技术文档,其地址都为0,我也试过了地址1,但依然出现原来的错误。最后我更换使用了其他的网线,也没办法解决这个问题。

ESP_morris
Posts: 290
Joined: Wed Sep 05, 2018 6:23 am

Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x

Postby ESP_morris » Tue Dec 04, 2018 9:11 am

我们最近在测试过程中发现有和你类似的情况,但具体原因不知是否相同。
建议先试一下在esp-idf/components/ethernet/emac_main.c 中的esp_eth_enable函数中添加:emac_enable_clk(true);具体位置如下图:
Image
防止图片显示不了,我把代码贴上来

Code: Select all

esp_err_t esp_eth_enable(void)
{
    struct emac_post_cmd post_cmd;
    struct emac_open_cmd open_cmd;

    post_cmd.cmd = (void *)(&open_cmd);
    open_cmd.err = EMAC_CMD_OK;

    if (emac_config.emac_status == EMAC_RUNTIME_START) {
        open_cmd.err = EMAC_CMD_OK;
        return open_cmd.err;
    }

#ifdef CONFIG_PM_ENABLE
    esp_err_t err = esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, "ethernet", &s_pm_lock);
    if (err != ESP_OK) {
        return err;
    }
    esp_pm_lock_acquire(s_pm_lock);
#endif //CONFIG_PM_ENABLE

    emac_enable_clk(true);
    /* init phy device */
    if (emac_config.phy_init() != ESP_OK) {
        ESP_LOGE(TAG, "Initialise PHY device Timeout");
        return ESP_FAIL;
    }

    if (emac_config.emac_status != EMAC_RUNTIME_NOT_INIT) {
        if (emac_ioctl(SIG_EMAC_START, (emac_par_t)(&post_cmd))) {
            open_cmd.err = EMAC_CMD_FAIL;
            goto cleanup;
        }
    } else {
        open_cmd.err = EMAC_CMD_FAIL;
        goto cleanup;
    }
    return EMAC_CMD_OK;

cleanup:
#ifdef CONFIG_PM_ENABLE
    esp_pm_lock_release(s_pm_lock);
    esp_pm_lock_delete(s_pm_lock);
    s_pm_lock = NULL;
#endif //CONFIG_PM_ENABLE
    return open_cmd.err;
}

chengqian
Posts: 5
Joined: Mon Dec 03, 2018 11:24 am

Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x

Postby chengqian » Tue Dec 04, 2018 12:40 pm

ESP_morris wrote:
Tue Dec 04, 2018 9:11 am
我们最近在测试过程中发现有和你类似的情况,但具体原因不知是否相同。
建议先试一下在esp-idf/components/ethernet/emac_main.c 中的esp_eth_enable函数中添加:emac_enable_clk(true);具体位置如下图:
Image
防止图片显示不了,我把代码贴上来

Code: Select all

esp_err_t esp_eth_enable(void)
{
    struct emac_post_cmd post_cmd;
    struct emac_open_cmd open_cmd;

    post_cmd.cmd = (void *)(&open_cmd);
    open_cmd.err = EMAC_CMD_OK;

    if (emac_config.emac_status == EMAC_RUNTIME_START) {
        open_cmd.err = EMAC_CMD_OK;
        return open_cmd.err;
    }

#ifdef CONFIG_PM_ENABLE
    esp_err_t err = esp_pm_lock_create(ESP_PM_APB_FREQ_MAX, 0, "ethernet", &s_pm_lock);
    if (err != ESP_OK) {
        return err;
    }
    esp_pm_lock_acquire(s_pm_lock);
#endif //CONFIG_PM_ENABLE

    emac_enable_clk(true);
    /* init phy device */
    if (emac_config.phy_init() != ESP_OK) {
        ESP_LOGE(TAG, "Initialise PHY device Timeout");
        return ESP_FAIL;
    }

    if (emac_config.emac_status != EMAC_RUNTIME_NOT_INIT) {
        if (emac_ioctl(SIG_EMAC_START, (emac_par_t)(&post_cmd))) {
            open_cmd.err = EMAC_CMD_FAIL;
            goto cleanup;
        }
    } else {
        open_cmd.err = EMAC_CMD_FAIL;
        goto cleanup;
    }
    return EMAC_CMD_OK;

cleanup:
#ifdef CONFIG_PM_ENABLE
    esp_pm_lock_release(s_pm_lock);
    esp_pm_lock_delete(s_pm_lock);
    s_pm_lock = NULL;
#endif //CONFIG_PM_ENABLE
    return open_cmd.err;
}
感谢您的回复,使用您的方法依然没有解决问题。

ESP_morris
Posts: 290
Joined: Wed Sep 05, 2018 6:23 am

Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x

Postby ESP_morris » Tue Dec 04, 2018 2:10 pm

chengqian wrote:
Tue Dec 04, 2018 8:43 am
你好,首先感谢您的回复。
其次,我购买的PHY模块自带有50MHZ晶振,我利用示波器测试了,其输出没有错误,是50MHZ。另外,对于地址问题我查看了原理图及相关的技术文档,其地址都为0,我也试过了地址1,但依然出现原来的错误。最后我更换使用了其他的网线,也没办法解决这个问题。
容我多问一句,这个50MHz是否通过GPIO0输入给了ESP32呢?

chengqian
Posts: 5
Joined: Mon Dec 03, 2018 11:24 am

Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x

Postby chengqian » Wed Dec 05, 2018 5:35 am

ESP_morris wrote:
Tue Dec 04, 2018 2:10 pm
chengqian wrote:
Tue Dec 04, 2018 8:43 am
你好,首先感谢您的回复。
其次,我购买的PHY模块自带有50MHZ晶振,我利用示波器测试了,其输出没有错误,是50MHZ。另外,对于地址问题我查看了原理图及相关的技术文档,其地址都为0,我也试过了地址1,但依然出现原来的错误。最后我更换使用了其他的网线,也没办法解决这个问题。
容我多问一句,这个50MHz是否通过GPIO0输入给了ESP32呢?
嗯嗯,是的。



ESP_@In逍遥子
Posts: 132
Joined: Thu Nov 15, 2018 2:06 am

Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x

Postby ESP_@In逍遥子 » Mon Dec 17, 2018 1:29 pm

chengqian wrote:
ESP_morris wrote:
Thu Dec 06, 2018 4:48 am
可以参考以下这个:
https://www.esp32.com/viewtopic.php?f=1 ... 381#p27381
https://github.com/espressif/esp-idf/pu ... -340727923
希望能对你有帮助。
好的,非常感谢!
请问,你这个问题解决了吗?分享下你的解决办法,好吗,谢谢

Who is online

Users browsing this forum: Google [Bot] and 78 guests