使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0xffff
使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0xffff
我在使用esp wroom 32和一个LAN8720的PHY模块时,并参考idf中的Ethernet示例时,出现了图中的错误代码,多次检查接线并未出现问题,PHY模块在STM32开发板上可以正常使用。使用附件中的配置方式。请问我该如何解决。开发环境为官方推荐的Ubuntu环境。
- Attachments
-
- 错误代码
- 捕获1.PNG (34.37 KiB) Viewed 23036 times
-
- 配置
- 捕获.PNG (51.38 KiB) Viewed 23036 times
-
- 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
你好,从你给的图中看到你选择的时钟模式是GPIO0输入模式,即RMII的50MHz时钟需要由外部提供(一般是由PHY产生或者是外部晶振提供)。
1. 请检查GPIO0是否有50MHz的时钟输入
2. 确定好你的PHY地址是否是0(最好查看一下原理图)
1. 请检查GPIO0是否有50MHz的时钟输入
2. 确定好你的PHY地址是否是0(最好查看一下原理图)
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
你好,首先感谢您的回复。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,但依然出现原来的错误。最后我更换使用了其他的网线,也没办法解决这个问题。
-
- 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
我们最近在测试过程中发现有和你类似的情况,但具体原因不知是否相同。
建议先试一下在esp-idf/components/ethernet/emac_main.c 中的esp_eth_enable函数中添加:emac_enable_clk(true);具体位置如下图:
防止图片显示不了,我把代码贴上来
建议先试一下在esp-idf/components/ethernet/emac_main.c 中的esp_eth_enable函数中添加:emac_enable_clk(true);具体位置如下图:
防止图片显示不了,我把代码贴上来
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;
}
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
感谢您的回复,使用您的方法依然没有解决问题。ESP_morris wrote: ↑Tue Dec 04, 2018 9:11 am我们最近在测试过程中发现有和你类似的情况,但具体原因不知是否相同。
建议先试一下在esp-idf/components/ethernet/emac_main.c 中的esp_eth_enable函数中添加:emac_enable_clk(true);具体位置如下图:
防止图片显示不了,我把代码贴上来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; }
-
- 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
嗯嗯,是的。
-
- 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
好的,非常感谢!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
希望能对你有帮助。
-
- 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
请问,你这个问题解决了吗?分享下你的解决办法,好吗,谢谢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: No registered users and 73 guests