Generic network interface for WIZ850io with RasPi Zero 2 W
IO Modules
- Raspberry Pi
- Linux
No replies yet. Be the first to reply.
Join the discussion.
IO Modules
No replies yet. Be the first to reply.
Join the discussion.
Share projects and connect with makers.
Joined before the site update? first.
New to WIZnet Makers?
We sent a verification link to your address. Open it to activate your account, then log in.
Accounts from this email provider are reviewed by an administrator after verification. Approval usually takes one business day.
Already have an account?
Enter your email address. If it belongs to an account, we'll send a link to set a new password. Members who joined before the site update use this to set their password.
If an account uses that address, we sent a link to set a new password. The link works once and expires in 30 minutes.
Know your password?
Need an account?
RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by WIZnet AI AI generated ·
RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by Lihan__ WIZnet ·
Hello, thank you for reaching out.
As you mentioned, the "w5100_spi" driver is fully compatible with the W5500. Also, as you expected, the INTn pin is required for proper operation in a Linux environment.
I reviewed the link you shared, and the solution seems to be well-documented there. The link below also provides detailed instructions on setting up the W5500 driver, which you may find helpful.
https://github.com/Wiznet-OpenHardware/RPi-w5500/blob/main/RPi4-w5500/Getting%20Start%20Ethernet%20Driver.md
My primary recommendation is to connect the INTn pin first.
If the issue persists, please share the output of the following commands along with your Device Tree file.
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by hsummers ·
Thank you for the feedback!
Connecting INTn solved the problem for me, so now I've just been working on optimizing the data speed.
The AI answer was actually very helpful, with the one exception that it specified the overlay argument "spi_max_frequency" which is actually "speed" in my case, so that confused me for a bit, but I'm all clear now.
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by Lihan__ WIZnet ·
Is the current operation functioning without issues?
I am curious about the results if you proceed with speed optimization.
If you reach a satisfactory level of speed, please share the results with me.
I have not attempted porting on the Raspberry Pi Zero 2 myself, so I am interested in the outcome.
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by hsummers ·
I've been testing with the Wiz850io module as well as the PP-W5500-POE from Platypus.
I get stable communication at 32MHz max, and it becomes quite unstable above that. My data throughput on LAN (Curling a 100MB file hosted on LAN) was 14Mbps, which is reasonable for 32MHz. However, when I curl to the file hosted remotely, I get no more than 4Mbps, which is well below expected performance.
I suspect this is a W5500 driver issue, as the RasPi Zero 2W has no problem curling the same remote file at 20Mbps using its onboard wifi.
Speedtest-cli gives even slower results - around 2Mbps.
I have tested this on two separate networks - one my home router, and another my office network with a wired connection to the router through a high-quality switch.
I upgraded from my initial 2-layer PCB to a 4-layer PCB, with proper shielding and trace length matching and saw no substantial improvement.
If I could achieve consistent 10Mbps over the internet, this chip would meet my project requirements.
On a different note, I've noticed that the Pi sometimes fails to establish communication to the Eth chip over SPI, depending on the startup sequence. I was wondering if there is a recommended startup sequence for the Pi using the RST pin on the Eth module, and also a recommended reset procedure if connection is lost.
Thanks for your support!
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by Lihan__ WIZnet ·
Hello, Thank you for your additional response.
I will set up the environment and run a test.
Is there anything I should know during the setup process?
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by hsummers ·
The main benchmark I'm using is curl https://fsn1-speed.hetzner.com/100MB.bin > /dev/null
Summary of my setup:
I have added the following to my boot config:
I am using a Raspberry PI Zero 2 W, with Raspberry Pi OS Lite (64-bit), Released 2025-12-04.
I am using the w5100_spi driver included with the OS.
No other modifications.
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by hsummers ·
I'm becoming quite dissatisfied with the existing w5100_spi driver, as I'm encountering numerous issues.
- Poor data throughput over the internet
- Failure to reconnect after SPI device disconnect or reset
- No logs in dmesg or journalctl, making it impossible to troubleshoot
The driver description indicates the build version is v2012-04-04. It seems like I should just find a better driver to use, rather than trying to use this outdated driver.
I can continue trying to compile a driver using the Wiznet ioLibrary_Driver, however, I'm inexperienced and having trouble understanding the instructions in the README.
If there are any beginner-friendly guides or examples on compiling a basic driver from that library, please direct me to it!
Thank you.
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by Lihan__ WIZnet ·
Sorry for the late reply!
The difference in test results between local network and external network environments is unavoidable due to the nature of network characteristics. It would be greatly appreciated if you could run the commands below and share the results.
Additionally, since the W5500'''s internal buffer is relatively small at 16KB, it appears that the bandwidth is measured somewhat lower compared to WiFi modules.
We have completed some improvements to the driver. Please run the command below on your Raspberry Pi Zero 2 W to apply the patch, and we would appreciate it if you could share the results!
We are continuing to work on further driver improvements and will share the results with you as soon as possible!
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by Lihan__ WIZnet ·
I have implemented driver improvements and confirmed performance enhancements compared to the existing driver in my test environment. In local network conditions, throughput improved from 13.6Mbps to 18.4Mbps, achieving approximately 35% performance gain. However, please note that these results may vary significantly depending on network congestion, physical connection conditions, and system load.
However, performance degradation occurs during CURL tests with external servers. This is due to the significant impact of network congestion, latency, and packet loss rates along the path between the server and W5500. Particularly, since the W5500's internal buffer is limited to 16KB, rapid retransmission from the server is required when packet loss occurs, but recovery time increases drastically as RTT (Round Trip Time) extends.
In contrast, WiFi modules typically have relatively larger internal buffers, enabling them to maintain more stable performance even during network delays or temporary packet loss situations. This difference in buffer size appears to be one of the main factors contributing to the performance gap experienced in real-world usage environments.
Additionally, due to the characteristics of TCP's Slow Start and congestion control algorithms, considerable time is required for transmission speed to re-optimize after packet loss, leading to overall throughput degradation as a structural limitation.
How to apply the improved driver:Additionally, we recommend applying the BBR congestion control algorithm for TCP performance optimization:
Check current settings:
Apply BBR:
Test Environment:
I also conducted testing on the same Raspberry Pi Zero 2W and validated it in the following environment:
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by hsummers ·
Thank you for the support!
My ping to fsn1-speed.hetzner.com is 180ms, and my LAN ping is 1ms.
I updated my packages and OS to the latest to match your environment,
Linux raspberrypi 6.12.75+rpt-rpi-v8 #1 SMP PREEMPT Debian 1:6.12.75-1+rpt1 (2026-03-11) aarch64 GNU/Linux
I ran several LAN tests before and after the driver update and saw an increase from 14Mbps to 17Mbps max.
I haven't been able to run the remote tests thoroughly yet as I've been getting throttled by my home ISP, and need to test at our office.
Thank you for explaining the details of the network behavior and where/why the bottleneck might be occurring - this was most informative to me.
I'll share the rest of my results soon!
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by hsummers ·
The driver update achieved minor improvements in LAN speed, but no noticeable improvement in high-latency TCP connections.
The maximum download speed from the Hetzner server (170ms latency) I achieved was ~3Mbit/s.
I got substantially higher results running speedtest-cli (30ms latency) and reached a download speed of 8Mbit/s.
Thank you for your support!
I'm happy to run any tests and provide any additional information you request.
RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by Lihan__ WIZnet ·
Hello, we have significantly improved the W5500 driver's receive logic to maximize throughput.
This update focuses on securing stable bandwidth, especially in High RTT (High Latency) environments. The key improvements are as follows:
1. Key Driver Enhancements
NAPI Batch Processing: We modified the driver to collect up to 256 packets before reporting them to the kernel, rather than reporting each packet immediately. This dramatically reduces the ACK transmission frequency, which is the primary bottleneck for half-duplex SPI buses. (Improved ACK ratio from 1:1 to up to 7.3:1)
GRO (Generic Receive Offload) Optimization: By batching packets, we trigger the kernel's GRO engine to merge them into larger data segments. This reduces CPU overhead and increases effective throughput.
System Stability (Memory Tuning): To prevent stack overflows during batch processing, we moved critical data structures to the Heap (priv structure), ensuring long-term stability during high-speed transfers.
2. Driver Update & Installation
Please use the following commands to install the improved driver:
# Download and install the driver $ wget https://raw.githubusercontent.com/seok930927/W5500_Driver/main/install.sh $ chmod +x install.sh $ ./install.sh # To restore the original driver: $ ./install.sh -Remove3. Kernel & Network Optimization (Mandatory)
To unlock the full potential of the driver, please execute the following commands in order after rebooting. (While optimal values may vary by environment, these settings yielded the highest performance in our tests.)
① Network Interface & Routing Settings
# Force-enable Software Generic Receive Offload (GRO) sudo ethtool -K eth0 gro on # Optimize ACK suppression and Retransmission Timers (Crucial for performance) sudo ip route replace default via 192.168.11.1 dev eth0 quickack 0 rto_min 250ms② Kernel Network Parameter (sysctl) Tuning
# Match the driver batch size with the kernel budget (256) sudo sysctl -w net.core.netdev_budget=256 # Expand receive buffers and optimize Window Scaling for high-latency environments sudo sysctl -w net.ipv4.tcp_rmem=''4096 131072 1048576'' sudo sysctl -w net.ipv4.tcp_adv_win_scale=1 # Select the ''Cubic'' algorithm for better speed maintenance in high-latency scenarios sudo sysctl -w net.ipv4.tcp_congestion_control=cubic # General system optimizations (Timestamps and Queue management) sudo sysctl -w net.ipv4.tcp_timestamps=1 sudo sysctl -w net.ipv4.tcp_notsent_lowat=163844. Testing & Feedback
After applying these settings, please perform a download test (e.g., using
curl) and share your results.Performance Metrics: You can monitor the
segs_invssegs_outratio andcwndvalues using thess -ticommand.Target Performance: In our test environment (RTT 270ms), we achieved a stable peak speed of 1230k (approx. 9.8Mbps).
Thank you.
I personally conducted tests in my environment using two different servers: speedtest.tele2.net and fsn1-speed.hetzner.com.
Although both servers showed a similar RTT of approximately 280ms, the performance results varied significantly depending on the network path and server policies. While the Tele2 server consistently delivered speeds near the driver's maximum capability, the Hetzner server experienced a sharp decline in throughput, likely due to transmission path quality or server-side bottlenecks. Since these discrepancies are caused by the external network environment and not a driver defect, I strongly recommend performing cross-tests with multiple servers to accurately verify the receiving performance.
RE: RE: Generic network interface for WIZ850io with RasPi Zero 2 W
by hsummers ·
Hello Lihan,
I appreciate all the time you have spent trying to find a solution for me.
I downloaded and ran the update script again, rebooted, and made the recommended config changes. I included detailed logs at the end for verification.
In short, I did not observe a change in average download speed with the updated driver and network settings changes. For the 100MB download tests, my highest average from my Home router was ~2MHz, with peak speeds of ~3Mhz.
I have not been able to achieve stable communication with a SPI rate above 32MHz, which appears to be a limitation of the RasPi 02W.
So as to not take any more of your time, I will continue hardware development with the W5500 chip for now and see if our software team finds the performance acceptable once they begin application development.
Thank you again for your time.
Sincerely,
Hamilton Summers
Tests:
Hetzner: curl https://fsn1-speed.hetzner.com/100MB.bin > /dev/null
Speedtest: curl http://speedtest.tele2.net/100MB.zip > /dev/null
Results:
Interface
Net / Router
Test
Ping
SPI Rate
Download Speed
PP-W5500-POE 2.0
Home
Hetzner curl
85 ms
32 MHz
2 Mbit/s
PP-W5500-POE 2.0
Home
speedtest-cli
90 ms
32 MHz
1.7 Mbit/s
PP-W5500-POE 2.0
Office
Hetzner curl
160 ms
32 MHz
3.7 Mbit/s
PP-W5500-POE 2.0
Home
LAN curl
1 ms
32 MHz
14 Mbit/s
PP-W5500-POE 2.0
Driver update 1
Home
LAN curl
1 ms
32 MHz
17 Mbit/s
PP-W5500-POE 2.0
Driver update 1
Home
Hetzner curl
180 ms
32 MHz
1.7 Mbit/s
PP-W5500-POE 2.0
Driver update 1
Office
Speedtest-cli
26 ms
32 MHz
8 Mbit/s
PP-W5500-POE 2.0
Driver update 1
Office
Hetzner curl
170 ms
32 MHz
2.6 Mbit/s
PP-W5500-POE 2.0
Driver update 2
Home
Hetzner curl
190 ms
32 MHz
1.8 Mbit/s
PP-W5500-POE 2.0
Driver update 2
Home
Speedtest curl
195 ms
32 MHz
2.3 Mbit/s
PP-W5500-POE 2.0
Driver update 2
Home
speedtest-cli
85 ms
32 MHz
2.4 Mbit/s
Downloading and running install.sh:
Src version hash for the updated driver, shown using ''modinfo w5100'' and ''modinfo w5100_spi''.
w5100: srcversion: 8AD56A232DA3815E2C3F1F9
w5100_spi: srcversion: 923E5AACA7FD03FAB32503D
Script for network settings:
Script output:
Metrics during ''curl http://speedtest.tele2.net/100MB.zip > /dev/null'' (Also my ssh connection)