ESP32-S3 没有 RMII 引脚?W5500 走 SPI 照样上以太网
【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32
手上有块 ESP32-S3 开发板,想插根网线做有线以太网,却发现板上根本没有 RMII 引脚。别急着去配 LAN8720。
先说结论:ESP32-S3 有线网络路线对比
| 接口类型 | 典型器件 | 是否适配 ESP32-S3 | 适合场景 | 一句话优劣 |
|---|---|---|---|---|
| RMII | LAN8720 | 否(板载无 RMII) | 已带以太网 PHY 的成品板 | 能跑满百兆,但需要改板 |
| SPI | W5500 | 是 | 开发板快速加网线口 | 协议栈在芯片里,接线少,速度受 SPI 限制 |
| USB 转 RJ45 | USB 网卡芯片 | 是(限带 USB-OTG 的板) | 临时调试 | 免布线,但绑死 USB,不适合做产品 |
选 SPI + W5500:Arduino core 的 Ethernet 库已内置 W5500 驱动,只需引出 4~6 个 GPIO,还能和显示屏、Flash 共用同一条 SPI 总线。
接线清单:W5500 SPI 接线表
编号沿用官方示例ETH_W5500_Arduino_SPI的默认值:
| W5500 引脚 | ESP32-S3 引脚 | 作用 | 是否必须 |
|---|---|---|---|
| SCK | GPIO14 | SPI 时钟 | 必须 |
| MOSI | GPIO13 | 主出从入 | 必须 |
| MISO | GPIO12 | 主入从出 | 必须 |
| SCS | GPIO15 | 片选 | 必须 |
| INT | GPIO4 | 中断输出 | 可选 |
| RST | GPIO5 | 硬件复位 | 可选 |
| 3.3V | 3V3 | 模块由 3.3V 供电 | 必须 |
| GND | GND | 共地 | 必须 |
对照引脚位置图找到上表编号对应的物理焊盘。INT 和 RST 可以不接,但代码要做相应调整,见下面第三个坑。
跑通最小可用代码:ESP32-S3 接网线
这段代码只做一件事:初始化 SPI 总线,让 ETH 驱动接管 W5500,拿到 IP 后打印出来。
#include <ETH.h> #include <SPI.h> #define CS 15 // 片选 #define IRQ 4 // 中断,未接线时传 -1 #define RST 5 // 复位,未接线时传 -1 void setup() { SPI.begin(14, 12, 13); // SCK, MISO, MOSI ETH.begin(ETH_PHY_W5500, 1, CS, IRQ, RST, SPI); } void loop() { if (ETH.linkUp()) Serial.println(ETH); delay(1000); }串口打出ETH Got IP及地址,说明链路和 DHCP 都通了,此时可以直接从 PC ping 这块板子。
三个容易踩的坑
- SPI 时钟给太高:按 80MHz 配置时 DHCP 频繁超时、链路反复断开。W5500 的 SPI 上限约 33MHz,把时钟压到 40MHz 以内即可稳定。
- 去掉中断线却忘了改轮询:INT 不接又不做处理,驱动会忙等,CPU 占用飙升。要么把 INT 线接上,要么在
begin()前设置轮询周期(毫秒级)。 - 供电不足或未共地:现象是偶发拿到 IP、随后随机掉线。W5500 必须用 3.3V 供电并与 ESP32-S3 共 GND,别拿未稳压的 5V 直灌。
做中小批量网关、不想为网线口改板、吞吐要求停在几 Mbps,选 W5500 + SPI 就够。要持续百兆吞吐、双口或时间戳敏感的应用,回 RMII 板卡方案,别硬用 W5500 顶。
【免费下载链接】arduino-esp32Arduino core for the ESP32 family of SoCs项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考