以太网

  • ethernet
  • ETH
  • WT32-ETH01
  • RMII
  • PHY
  • netif
  • DHCP

WT32-ETH01 开发板在上电并插入网线后,网口灯没有亮起,这是什么原因?

WT32-ETH01 的以太网物理层芯片(PHY)具有独立外部晶振,晶振使能引脚连接到 ESP32 的 GPIO16

如果 GPIO16 在上电或初始化阶段没有被上拉到高电平,系统不会向 PHY 提供时钟,网口就无法正常工作,网口 LED 也不会亮。

解决方法是将 GPIO16 上拉到 3.3 V,确保其默认上电为高电平。只有 PHY 晶振正常工作后,网口才会建立物理链路,LED 才会亮起;否则以太网初始化和通信都会失败。

ESP32 模组的 Wi-Fi 和以太网可以同时使用吗?

ESP32 模组的 Wi-Fi 和以太网可以同时使用,但同时使用以太网和 Wi-Fi 时,必须使用外部 PHY 或外部时钟源提供 RMII REF_CLK

原因是 ESP32 模组在 RMII 模式下,以太网 MAC 和 PHY 需要公共的 50 MHz 同步时钟。如果同时使用以太网与 Wi-Fi,RMII 时钟不能由 ESP32 内部 APLL 产生,否则可能导致时钟不稳定。

如果要使用内部 APLL 生成 RMII REF_CLK,则需要关闭 Wi-Fi。

ESP32-S3 目前已适配哪些以太网控制器芯片?若需使用其他型号,是否可通过自定义驱动方式适配?

ESP-IDF 当前已为 ESP32-S3 提供多种 SPI 接口以太网控制器驱动支持,常见型号包括 DM9051W5500KSZ8851SNLENC28J60CH390LAN865x,这些型号均为 SPI 接口方案。

乐鑫也提供了统一的 ethernet_init 组件,可以在 menuconfig 中选择上述多种 SPI 以太网芯片,简化初始化流程。

如果需要使用列表以外的以太网芯片,技术上可以适配。ESP-IDF 以太网驱动框架提供了 esp_eth_phy_tesp_eth_mac_t 抽象接口,开发者可基于该框架实现自定义驱动。需要注意的是,第三方芯片通常不在乐鑫官方验证范围内,自定义适配和后续维护需要由开发者自行承担。

在 ESP-IDF 中将以太网 netif 优先级调高后,Wi-Fi 已建立的 TCP 连接在网线插入后仍通过 Wi-Fi 地址与服务器通信,而非切换至以太网,原因是什么?

ESP-IDF 的 TCP/IP 协议栈在创建 socket 时,如果应用层没有显式绑定指定 netif,连接会使用当时优先级最高的 default netif

如果 TCP 连接是在只有 Wi-Fi 可用时建立的,该 socket 已经绑定到 Wi-Fi 接口。即使之后以太网上线并成为新的 default netif,已建立的 TCP 连接也不会自动迁移到以太网,仍会继续使用原有 Wi-Fi 路径。

如果需要切换到以太网,需要在以太网接口就绪并成为 default netif 后,主动断开原有连接并重新建立连接。新连接会使用当前优先级最高的 default netif

如果需要在多 netif 场景下精确控制路由,建议在创建 socket 时显式绑定目标网络接口,避免依赖 default netif 优先级变化。

使用 WT01P4C5-S1-N16R32 模组运行 ethernet/basic 示例时,网线插拔可正常检测,但 DHCP 无法获取 IP 地址,ping 路由器失败,原因是什么?

ESP32-P4 芯片的 GPIO35 内部默认为上拉状态,且 WT01P4C5-S1-N16R32 模组在 GPIO35 引脚外部已经集成 10 kΩ 上拉电阻。

如果用户在模组外部再对 GPIO35 添加上拉电阻,会导致该引脚外部负载过大,干扰 RMII 接口 TXD1 信号正常通信,进而造成数据发送异常。表现上可能是网线插拔可以检测,但 DHCP 请求无响应,无法获取 IP 地址,也无法 ping 通路由器。

解决方法是检查并移除模组外部 GPIO35 上额外添加的上拉电阻,保留模组内部已集成的 10 kΩ 上拉即可。