W5500 driver issues on Raspberry Pi 4
W5500 driver issues on Raspberry Pi 4: MAC address changes & ARP confusion explained
🔎 Overview
A Raspberry Pi 4 user integrating a W5500 module noticed two confusing symptoms:
- MAC address changed every reboot
- W5500 responded to ARP requests for 0.0.0.0 while waiting for DHCP
These behaviors looked like “bugs,” but the community discussion reveals important networking principles and configuration details that engineers should know when working with hardwired TCP/IP chips like the W5500.
💬 What Happened in the Thread
A brief curated summary of the most useful points:
- The user enabled W5500 on Raspberry Pi via an overlay and configured the interface with DHCP.
- But since they did not set a static MAC, the overlay-generated MAC changed every boot.
- They also noticed that before DHCP assigned an IP, the W5500 was briefly responding to ARP queries for the 0.0.0.0 address.
Community replies explained that:
- Many embedded NIC overlays use a randomized MAC if the user doesn’t specify one.
- A device that hasn’t yet received a DHCP lease will often use 0.0.0.0 as “initial IP state.”
- Some TCP/IP stacks reply to ARP for 0.0.0.0 as part of the discovery process or link-probe.
📘 WIZnet Insight
These findings are consistent with expected W5500 behavior:
1. MAC address instability
- W5500 does not auto-generate a MAC address.
- If the host platform (like Raspberry Pi dtoverlay) does not set one, you get:
- default / random MAC
- Or occasionally a fallback MAC if the driver implements one
- default / random MAC
Recommendation:
Always specify a MAC in /etc/network/interfaces or via NetworkManager/udev rule.
2. ARP response at 0.0.0.0
This can happen when:
- W5500 is initialized but DHCP has not yet completed, and
- The driver’s ARP handler is active
- The chip is still holding its default IP of 0.0.0.0
This ARP behavior is common on many NICs during DHCP and is not harmful.
Recommendation:
- Ensure DHCP is configured with retry logic
- Optionally assign a static IPv4 address or a “DHCP hint” IP if the network allows
📐 Best Practices for Using W5500 on Linux Hosts
To avoid these confusions:
- Manually assign MAC
Example udev rule: - ACTION=="add", SUBSYSTEM=="net", ATTR{address}="02:08:dc:11:22:33"
- Lock the IP strategy
- Either DHCP with static mapping on the router
- Or static IP config on the Pi
- Either DHCP with static mapping on the router
- Ensure initialization order
- SPI → Reset → MAC → IP setup → Open sockets
- Avoid starting higher-level services before W5500 is fully configured
- SPI → Reset → MAC → IP setup → Open sockets

