以太网¶
:link_to_translation:`en:[English]`
ESP32 以太网开发板示例出现 “emac: Reset EMAC Timeout” 有哪些原因?¶
此 log 为 EMAC 初始化超时,与 RMII 时钟有关,建议排查硬件问题,查看 PHY 晶振是否虚焊等。
ESP32 外接 LAN8720,GPIO0 对其提供 CLK,Ethernet 例程初始化出错。如何解决?¶
I (229) cpu_start: App cpu up. I (247) heap_init: Initializing. RAM available for dynamic allocation: I (254) heap_init: At 3FFAE6E0 len 00001920 (6 KiB): DRAM I (260) heap_init: At 3FFB40A8 len 0002BF58 (175 KiB): DRAM I (266) heap_init: At 3FFE0440 len 00003AE0 (14 KiB): D/IRAM I (273) heap_init: At 3FFE4350 len 0001BCB0 (111 KiB): D/IRAM I (279) heap_init: At 400885D0 len 00017A30 (94 KiB): IRAM I (285) cpu_start: Pro cpu start user code I (303) cpu_start: Chip Revision: 1 W (303) cpu_start: Chip revision is higher than the one configured in menuconfig. Suggest to upgrade it. I (307) cpu_start: Starting scheduler on PRO CPU. I (0) cpu_start: Starting scheduler on APP CPU. I (319) system_api: Base MAC address is not set, read default base MAC address from BLK0 of EFUSE E (1329) emac: Timed out waiting for PHY register 0x2 to have value 0x0007(mask 0xffff). Current value 0xffff E (2329) emac: Timed out waiting for PHY register 0x3 to have value 0xc0f0(mask 0xfff0). Current value 0xffff E (2329) emac: Initialise PHY device Timeout ESP_ERROR_CHECK failed: esp_err_t 0xffffffff (ESP_FAIL) at 0x40084140 0x40084140: _esp_error_check_failed at /mnt/hgfs/workspace/esp32/IDF/esp-idf-v3.3/components/esp32/panic.c:720 file: "/mnt/hgfs/workspace/esp32/project/ethernet/main/ethernet_example_main.c" line 153 func: app_main expression: esp_eth_enable() ELF file SHA256: ``597d55ebf237c1cffa5f47c73148a159b22726d94a7b78100bd941d7d5fc906e`` Backtrace: 0x40083cdc:0x3ffb5e80 0x40084143:0x3ffb5ea0 0x400d32c1:0x3ffb5ec0 0x400d1742:0x3ffb5f20 0x40085d91:0x3ffb5f40 0x40083cdc: invoke_abort at /mnt/hgfs/workspace/esp32/IDF/esp-idf-v3.3/components/esp32/panic.c:715 0x40084143: _esp_error_check_failed at /mnt/hgfs/workspace/esp32/IDF/esp-idf-v3.3/components/esp32/panic.c:721 0x400d32c1: app_main at /mnt/hgfs/workspace/esp32/project/ethernet/main/ethernet_example_main.c:153 (discriminator 1) 0x400d1742: main_task at /mnt/hgfs/workspace/esp32/IDF/esp-idf-v3.3/components/esp32/cpu_start.c:542 0x40085d91: vPortTaskWrapper at /mnt/hgfs/workspace/esp32/IDF/esp-idf-v3.3/components/freertos/port.c:403 Rebooting...
- 请检查 IO0 上是否有电容。作为 CLK 输出 pin 的时候最好 IO0 上没有接电容,这会影响时序。
- GPIO0 输出 RMII 时钟切记在 Kconfig 中要勾选
CONFIG_PHY_CLOCK_GPIO0_OUT
。- 另外,以太网部分除了可以参考 example 中的 README 讲解,也可以参阅官方文档 API 参考。
使用 ESP-IDF 中的 Ethernet 示例时,出现错误代码 “Timed out waiting for PHY register 0x3 to have value 0xc0f0 (mask 0xfff0). Current value 0xffff”,请问该如何解决?¶
请参考:BBS issue 与 Github issue。
读 PHY 寄存器值为 0xFFFF 时,通常情况可以这样排查:
- 检查 MDIO 和 MDC 的接线是否错误
- 检查 RMII 需要的 50 MHz 时钟是否正常
- 检查 PHY 地址是否配置正确(包括软件和硬件)
强烈建议检查一遍控制 PHY 地址的 strap 引脚,保证其不要悬空,不要默认!确保这些 strap 引脚已经被外部电阻上拉或者下拉了。
如果还是不够确定 PHY 地址究竟是多少,可以在软件中尝试设置 PHY 地址从 0 开始到 31,然后读取 PHY ID 寄存器,看看是否能够读到正常的数据,如果正确,记录下当前 PHY 地址。
使用 ESP-IDF v4.1,ESP32 Ethernet 如何设置静态 IP?¶
由于 ESP-IDF v4.1 以及以上版本会摒弃掉 tcp/ip 的接口,推荐使用 ESP-NETIF 的接口。
参考示例代码如下:
{ ... esp_netif_config_t cfg = ESP_NETIF_DEFAULT_ETH(); esp_netif_t *eth_netif = esp_netif_new(&cfg); // Set default handlers to process TCP/IP stuffs ESP_ERROR_CHECK(esp_eth_set_default_handlers(eth_netif)); ... char* ip= "192.168.5.241"; char* gateway = "192.168.5.1"; char* netmask = "255.255.255.0"; esp_netif_ip_info_t info_t; memset(&info_t, 0, sizeof(esp_netif_ip_info_t)); if (eth_netif) { ESP_ERROR_CHECK(esp_netif_dhcpc_stop(eth_netif)); info_t.ip.addr = esp_ip4addr_aton((const char *)ip); info_t.netmask.addr = esp_ip4addr_aton((const char *)netmask); info_t.gw.addr = esp_ip4addr_aton((const char *)gateway); esp_netif_set_ip_info(eth_netif, &info_t); } ... }
ESP32-Ethernet-Kit 开发板模组替换成 ESP32-WROOM-32D 以太网功能是否存在影响?¶
ESP32-Ethernet-Kit 上的 ESP32-WROVER-B 可以更换成 ESP32-WROOM-32D,且以太网功能不受影响。
ESP32-WROOM 和 ESP32-WROVER 系列模组最大的区别是:ESP32-WROVER 带有 4 MB PSRAM,而 ESP32-WROOM 默认没有 PSRAM。请参考:
ESP32-WROOM 和 ESP32-WROVER 模组都使用的是 ESP32 芯片,ESP32 芯片支持以太网,详情可以参考 ESP32 技术规格书。
相关文档:ESP32-Ethernet-Kit 入门指南。
ESP32-S,ESP-WROOM-32,ESP32-A1S模组有什么区别?¶
答:ESP32-S与ESP32-WROOM-32为通用类型的模组,软硬件部分,除了天线形式有差异,其他部分都一样,ESP32-A1S模组内置AC101音频解码芯片,可以进行音频相关的开发,支持播放音乐和录音
nodemcu32的开发板下载需要注意什么?¶
答:串口驱动是否安装,接线是否良好,点击START出现等待电平同步的时候有没有长按IO0按钮