Page 1 of 2
使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0xffff
Posted: Mon Dec 03, 2018 11:48 am
by chengqian
我在使用esp wroom 32和一个LAN8720的PHY模块时,并参考idf中的Ethernet示例时,出现了图中的错误代码,多次检查接线并未出现问题,PHY模块在STM32开发板上可以正常使用。使用附件中的配置方式。请问我该如何解决。开发环境为官方推荐的Ubuntu环境。
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
Posted: Tue Dec 04, 2018 5:05 am
by ESP_morris
你好,从你给的图中看到你选择的时钟模式是GPIO0输入模式,即RMII的50MHz时钟需要由外部提供(一般是由PHY产生或者是外部晶振提供)。
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
Posted: Tue Dec 04, 2018 8:43 am
by chengqian
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,但依然出现原来的错误。最后我更换使用了其他的网线,也没办法解决这个问题。
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
Posted: Tue Dec 04, 2018 9:11 am
by ESP_morris
我们最近在测试过程中发现有和你类似的情况,但具体原因不知是否相同。
建议先试一下在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
Posted: Tue Dec 04, 2018 12:40 pm
by chengqian
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;
}
感谢您的回复,使用您的方法依然没有解决问题。
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
Posted: Tue Dec 04, 2018 2:10 pm
by ESP_morris
chengqian wrote: ↑Tue Dec 04, 2018 8:43 am
你好,首先感谢您的回复。
其次,我购买的PHY模块自带有50MHZ晶振,我利用示波器测试了,其输出没有错误,是50MHZ。另外,对于地址问题我查看了原理图及相关的技术文档,其地址都为0,我也试过了地址1,但依然出现原来的错误。最后我更换使用了其他的网线,也没办法解决这个问题。
容我多问一句,这个50MHz是否通过
GPIO0输入给了ESP32呢?
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
Posted: Wed Dec 05, 2018 5:35 am
by chengqian
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呢?
嗯嗯,是的。
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
Posted: Thu Dec 06, 2018 4:48 am
by ESP_morris
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
Posted: Thu Dec 06, 2018 8:18 am
by chengqian
Re: 使用idf中的Ethernet示例时,出现错误代码Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0x
Posted: Mon Dec 17, 2018 1:29 pm
by ESP_@In逍遥子
chengqian wrote:
好的,非常感谢!
请问,你这个问题解决了吗?分享下你的解决办法,好吗,谢谢