Overview

The W5500 is a hardwired TCP/IP embedded Ethernet controller manufactured by WIZnet. Communicating over an 80 MHz high-speed SPI bus, it offloads full network protocol processing (TCP, UDP, IPv4, ICMP, ARP, IGMP, and PPPoE) into dedicated silicon hardware.

Unlike MAC/PHY-only controllers (like the ENC28J60) that require microcontrollers to run software TCP/IP stacks in MCU RAM, the W5500 incorporates 8 independent hardware sockets and a 32 KB internal TX/RX packet buffer. It allows resource-constrained microcontrollers (such as Arduino, ESP32, STM32, and RP2040) to maintain stable 100BASE-TX Ethernet connectivity with minimal MCU overhead.

Quick reference

Operating voltage (VCC)3.3 V to 5.0 V DC (module includes 3.3V LDO regulator)
IC supply voltage (VDD)2.97 V to 3.63 V DC (3.3 V nominal)
Ethernet standard10Base-T / 100Base-TX (Auto-negotiation half/full duplex)
Hardware TCP/IP stackTCP, UDP, ICMP, IPv4, ARP, IGMP, PPPoE
Hardware sockets8 independent simultaneous sockets
Internal buffer memory32 KB internal SRAM (allocated across 8 sockets)
InterfaceHigh-Speed SPI (up to 80 MHz, SPI Mode 0 & Mode 3)
I/O tolerance5V tolerant SPI pins (CS, SCLK, MOSI, MISO)

Pinout

Standard 10-pin 0.1" (2.54 mm) breakout module header:

PinNameTypeDescription
1VCC / 3V3PowerSupply input (+3.3 V to +5.0 V DC)
2GNDPowerGround reference (0 V)
3MISO / SODigital OutputSPI Master Input Slave Output
4MOSI / SIDigital InputSPI Master Output Slave Input
5SCLK / CLKDigital InputSPI Serial Clock Input (up to 80 MHz)
6SCS / CSDigital InputActive-Low SPI Chip Select
7RST / RSTnDigital InputActive-Low hardware reset pin
8INT / INTnDigital OutputActive-Low interrupt output (triggers on socket events)

Specifications

ParameterSymbolMinTypMaxUnitConditions
Supply Voltage (Module)VCCV_{CC}3.33.3 / 5.05.5VPower rail with LDO
Transmit CurrentItxI_{tx}132160mA100BASE-TX active transmission
Standby CurrentIsbI_{sb}1320mAPower-down mode
SPI Clock SpeedfSPIf_{SPI}03380MHzFast SPI bus operation
Auto-Negotiation10/100Mbps10Base-T / 100Base-TX
Operating TemperatureToprT_{opr}-4085°CIndustrial temperature rating

Hardware Sockets & Buffer Allocation

The 32 KB internal SRAM is shared dynamically between the 8 hardware sockets (Sockets 0 through 7). Each socket can be configured with 1 KB, 2 KB, 4 KB, 8 KB, or 16 KB buffer sizes for TX and RX:

  • Default Assignment: 2 KB TX + 2 KB RX per socket across all 8 sockets (8×4 KB=32 KB8 \times 4\text{ KB} = 32\text{ KB}).
  • High-Throughput Single Socket Assignment: 16 KB TX + 16 KB RX for Socket 0 (32 KB32\text{ KB} dedicated to a single socket for maximum throughput).

Wiring

W5500 PinArduino UnoESP32Raspberry Pi PicoNotes
VCC5V / 3.3V3.3V3.3VConnect to 3.3V rail
GNDGNDGNDGNDShared ground
SCLKDigital D13GPIO 18GP18 (SPI0 SCK)SPI Clock
MISODigital D12GPIO 19GP16 (SPI0 RX)SPI MISO
MOSIDigital D11GPIO 23GP19 (SPI0 TX)SPI MOSI
SCSDigital D10GPIO 5GP17 (SPI0 CS)Active-Low CS
RSTDigital D9GPIO 16GP20Hardware Reset

Example (Arduino Official Ethernet.h Library)

cpp
#include <SPI.h>
#include <Ethernet.h>

// MAC address for controller
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

EthernetServer server(80);

void setup() {
  Serial.begin(115200);
  while (!Serial);

  // Initialize W5500 Chip Select pin (Digital D10)
  Ethernet.init(10);

  Serial.println("Connecting to network via DHCP...");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    while (1);
  }

  server.begin();
  Serial.print("W5500 Web Server online at IP: ");
  Serial.println(Ethernet.localIP());
}

void loop() {
  EthernetClient client = server.available();
  if (client) {
    Serial.println("New client connected");
    boolean currentLineIsBlank = true;

    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n' && currentLineIsBlank) {
          // Send HTTP 200 OK header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          client.println("<!DOCTYPE HTML><html><h1>VoltDocs W5500 Ethernet Online!</h1></html>");
          break;
        }
        if (c == '\n') currentLineIsBlank = true;
        else if (c != '\r') currentLineIsBlank = false;
      }
    }
    delay(1);
    client.stop();
  }
}

Common mistakes

  • Using slow SPI speeds: W5500 supports up to 80 MHz SPI. Running SPI at slow default speeds (1 MHz) bottlenecks network throughput. Set SPI clock to 14–33 MHz on microcontrollers.
  • Forgetting hardware reset line: If RST is left floating, spurious noise on power-up can lock the W5500 internal state machine. Connect RST to a digital GPIO pin or pull High to 3.3V with a 10 kΩ10\text{ k}\Omega resistor.

Notes

  • W5500 vs W5100 vs ENC28J60: W5500 features 8 sockets, 32KB RAM, 80MHz SPI, and 100Mbps speed; W5100 has 4 sockets, 16KB RAM, and slower SPI; ENC28J60 has no hardware TCP/IP stack.

Assets & downloads